Amazon CodeGuru Reviewer

Amazon CodeGuru Reviewer は、Java および Python コードの問題を検出し、コードを改善するためのレコメンデーションを提供します。例えば、CodeGuru Reviewer は、セキュリティの脆弱性、シークレット、リソースのリーク、同時実行の問題、誤った入力検証、AWS API と SDK の使用に関するベストプラクティスからの逸脱を検出します。コードのレビューを開始するには、GitHub、GitHub Enterprise、Bitbucket、または AWS CodeCommit の既存のコードリポジトリを CodeGuru に関連付けます。

セキュリティ検出

CodeGuru Reviewer は、コードセキュリティの強化を支援し、一般的な脆弱性 (OWASP トップ 10) と AWS の内部的なセキュリティに関するベストプラクティスに基づいてレコメンデーションを提供します。自動推論を使用して、ソースからシンクへのデータフロー、および複数の機能にわたるデータフローを分析し、見つけにくいセキュリティの脆弱性を検出します。CodeGuru Reviewer Security Detector は、Java 8 から Java 11、Python 3 以上をサポートします。これを使用して、次のようなコードセキュリティに関する問題を検出できます。

  1. OWASP トップ 10: アクセスコントロールの失敗、インジェクション、データ整合性の失敗など、ウェブアプリケーションの上位のセキュリティリスクをチェックします
  2. AWS API セキュリティに関するベストプラクティス: Amazon Elastic Compute Cloud と AWS Key Management Service の API セキュリティを確認します
  3. AWS のセキュリティに関するベストプラクティス (AWS 暗号は Amazon の標準に実装されています): Amazon の内部的なセキュリティに関する専門知識をコードに適用します
  4.  Java 暗号ライブラリに関するベストプラクティス: Javax.Crypto.Cipher が初期化され、正しく呼び出されるかどうかを確認します
  5. Python 暗号ライブラリに関するベストプラクティス: 正しいバージョンの Python のハッシュと暗号アルゴリズムが使用されているかどうかを確認します
  6. 安全なウェブアプリケーション: LDAP インジェクションなどのアプリケーション関連のセキュリティ問題を確認します
  7. 機密情報の漏えい: 個人情報または機密情報の漏えいをチェックします (例: AWS アカウントの認証情報をプレーンテキストでログに記録する)
  8. 入力検証: 信頼されないソースから送られる、不適当な形態の、または悪意のあるデータを確認します
  9. ログインジェクション: コードが偽造されたログエントリや悪意のあるコンテンツのログへのインジェクションを適切に防止しているかをチェックすることにより、Log4j タイプの脆弱性から保護します

Amazon CodeGuru コンソールに移動して、リポジトリ全体でセキュリティ分析を呼び出すか、GitHub Actions を介して CI/CD と統合することができます。

Image under Security detection

シークレットの検出

CodeGuru Reviewer Secrets Detector は、機械学習ベースの分析を使用して、パスワード、API キー、SSH キー、アクセストークン、データベース接続文字列、JSON ウェブトークンなど、リポジトリまたは設定ファイルにハードコードされているシークレットを検出するのに役立ちます。CodeGuru Reviewer の一部である Secrets Detector は、これらのシークレットのコードをチェックし、AWS Secrets Manager を使用してポイントアンドクリックでそれらを保護できるようにする自動化されたメカニズムです。また、AWS、Atlassian、GitHub、Salesforce、HubSpot、Stripe などの最も一般的な API プロバイダーによって生成された特定のキーを識別できます。シークレットのリストについては、ドキュメントをご覧ください。

シークレットの検出

コード品質

CodeGuru Reviewer は、コード品質の問題を特定し、開発チームがソフトウェア開発プロセスで高いコーディング標準を維持できるようにします。

  • AWS のベストプラクティス: AWS API (例: ポーリング、ページ割り) の使用方法を修正します
  • Java と Python のベストプラクティス: 一般的な Java と Python の言語とライブラリ機能の正しい使用
  • 同時実行: 機能上の障害を引き起こしている同期不良、またはパフォーマンスの問題を生じさせている過剰な同期を検出します
  • 不整合: リポジトリ内のコーディングパターンを分析し、標準パターンから逸脱した異常がある場合の検出に役立ちます
  • コードの保守容易性: コードの複雑さや、コードのメンテナンスを困難にするソースコードの特性を特定します
  • リソースリーク: リソースの処理を修正します (例: データベース接続の解放)
  • 一般的なコーディングのベストプラクティス: パラメータをチェックし、バグ (オブジェクトを使用する前に null かどうかをチェックするのを忘れる、同期されたオブジェクトを再割り当てする、または例外パスに沿って変数を初期化するのを忘れる、など) を引き起こす可能性のあるコード行を探します。
  • コードのクローン作成: 統合することでコードの保守性を高められる可能性のある重複コードを特定します
コード品質

自動レコメンデーション

CodeGuru Reviewer がレコメンデーションを提供するために実行できるコードレビューには、増分コードレビューとフルリポジトリコードレビューの 2 種類があります。 

増分コードレビュー 
関連付けられたリポジトリからプルリクエストを作成すると、増分コードレビューが自動的に作成されます。これらのコードレビューは、プルリクエストで変更されたコードをスキャンします。CodeGuru Reviewer は、すべてのコードレビューの情報 (例: コードレビューのステータス、分析されたコードの行数、レコメンデーションの数) を一覧表示するプルリクエストダッシュボードも提供します。CodeGuru Reviewer の標準月額料金には、オンボーディングされたリポジトリのすべての増分コードレビュー分析が含まれています。

自動レコメンデーション

フルリポジトリ分析コードレビュー
CodeGuru Reviewer を使用すると、指定されたコードブランチの下で、関連するリポジトリ内のすべてのコード行について、機械学習を利用したコードレビューのレコメンデーションを取得できます。フルリポジトリスキャンを実行して、コードの移行、コードのデューデリジェンス、定期的なコードのメンテナンスの取り組み中にコードレビューのレコメンデーションを取得できます。CodeGuru コンソールで、[Code Reviews] (コードレビュー) ページの [Repository Analysis] (リポジトリ分析) タブに移動して、フルリポジトリで新しい分析を開始できます。新しいリポジトリサイズベースの料金モデルには、2 つのフルリポジトリスキャンが含まれています。詳細については、CodeGuru の料金のページをご覧ください。

フルリポジトリ分析コードレビュー
コードレビュー

ユーザーは、コンソールの [Code reviews] (コードレビュー) ページ ([Reviewer] セクション) ですべてのコードレビューを表示できます。このページには、コードレビューのステータス、対象のレポジトリ、レコメンデーションの数など、コードレビューに関するすべての情報が一覧表示されます。ユーザーは、正常に完了したコードレビューをクリックすることで、レコメンデーションの詳細を表示したり、レコメンデーションを検索したり、解析した行数を表示したりできます。また、レコメンデーションの下に表示されるサムズアップやサムズダウンをクリックすることで、CodeGuru のレコメンデーションに対するフィードバックを提供することもできます。

CI/CD と GitHub Actions の統合

CodeGuru Reviewer の CI/CD エクスペリエンスを使用すると、GitHub アクションを使用して CI ワークフロー内のステップとしてコード品質とセキュリティ分析を呼び出すことができます。パイプラインのプル、プッシュ、またはスケジュールされた実行において実行し、レコメンデーションを提供するよう設定できます。CI/CD を介して CodeGuru Reviewer スキャンを呼び出すと、CodeGuru Reviewer コンソールまたは GitHub のユーザーインターフェイス内でコードの品質とセキュリティのレコメンデーションを表示できます。 CI/CD 統合を使用すると、コードの品質とセキュリティを継続的にモニタリングして、レコメンデーションを見逃さないようにすることができます。 CodeGuru Reviewer では、GitHub Marketplace にある GitHub Action を使用して、GitHub のユーザーインターフェイス内でセキュリティレビューを行い、レコメンデーションを直接受け取ることができます。オンボーディングすると、GitHub の [Security] タブ内にレコメンデーションが直接表示されます。

セキュリティ検出

レコメンデーションは、プルリクエストや AWS コンソール内でも提供されます。GitHub 内のレコメンデーションをクリックすると、検出結果に関するより詳細な情報 (その検出結果がアプリケーション内で生じさせる問題、解決までの手順、それに関連する CWE (Common Weakness Enumerations)、重要度など) を確認できます。

プルリクエスト

Amazon CodeGuru Profiler

Amazon CodeGuru Profiler はアプリケーションパフォーマンスの最適化策を常に探索しながら、最も「コストがかかる」コード行を特定します。さらにそれらを修正して CPU 使用率を削減し、計算コストの削減を行い、アプリケーションパフォーマンスを改善するための推奨方法を示します。たとえば、CodeGuru Profiler により、アプリケーションがコアビジネスロジック実行のためではなく、ログ記録ルーチンのために過剰な CPU 容量を消費している場合を識別できます。

実稼働環境にあるアプリケーションの定常的なプロファイリング

CodeGuru Profiler は、最小限のオーバーヘッドで本番環境で継続的に実行されるように設計されています。つまり、アプリケーションのパフォーマンスへの影響を最小限に抑えて、常時稼働させることができます。これにより、実際の顧客のトラフィックパターンを使用してアプリケーションのプロファイルとトラブルシューティングを行い、パフォーマンスの問題を簡単に発見できます。プロファイラーデータと ML を利用した推奨事項を使用すると、本番環境でのアプリケーションのパフォーマンスの問題を特定して修正できます。 CodeGuru Profiler はヒープサマリーも提供するため、いつでもどのオブジェクトがメモリを消費しているかを特定できます。

アプリケーションの実行時の動作を把握する

CodeGuru Profiler は、アプリケーションの CPU 使用率、ヒープ使用量、レイテンシー特性を継続的に分析して、アプリケーションのサイクルもしくは実行時間において最も消費量が多い部分を示します。この CPU とレイテンシー分析はインタラクティブなフレームグラフで表示されるので、どのコードパスが最もリソースを消費しているかを視覚的に簡単に理解でき、アプリケーションが期待どおりに実行されていることの確認や、さらに最適化できる領域を明らかにするのに役立ちます

画像処理異常
 クリックして拡大

フレームグラフは、一定時間のスタックトレースサンプルを収集して、その時間中のアプリケーションの動作をイメージ化することにより、アプリケーションのパフォーマンスを視覚化します。フレームグラフを使用して、どのパスが最もリソースを消費しているかを把握し、アプリケーションが期待どおりに実行されていることを確認し、最適化できる領域を発見できます。たとえば、UploadGreyImage というメソッドに毎年 134,868 USD の予算がかかり、実時間の 10.22% を消費しているとします。この時間が想定した時間より長いのであれば、調査してみる必要があります。

ヒープサマリーのまとめ

ヒープ使用量の分析は、ヒープサマリービジュアライゼーションに表示されます。これは、ヒープに割り当てられているオブジェクト(独自のドメインクラス、ライブラリまたは JDK が所有するオブジェクト)を示します。

アプリケーションパフォーマンスの異常と一般的な問題を発見する
 クリックして拡大

ヒープサマリーは、特定時間の間にヒープに割り当てられたすべてのオブジェクトを、サイズ、カウント、および時系列で視覚化します。たとえば、時系列のグラフが、午後 4 時 20 分に大幅に増加し始める 2 つのオブジェクト (java.util.LinkedHashMap$Entry および java.land.UUID) を示していれば、メモリリークの可能性があることがわかります。この上昇傾向が続く時にチェックを外すとメモリ不足の状態になる可能性があります。

インテリジェントな推奨事項

CodeGuru Profiler は、アプリケーションのパフォーマンスの問題を自動的に識別し、その修正方法に関する ML を利用した推奨事項を提供します。これらの推奨事項は、コード内で最もコストがかかる手段またはリソースを集中的に使用している手段を特定して最適化するのに役立ちます。ユーザーがパフォーマンスエンジニアリングの専門家である必要はありません。最適化を行うことで、インフラストラクチャのコストを削減し、レイテンシーを短縮し、エンドユーザーエクスペリエンス全体を改善するのに役立ちます。

インテリジェントな推奨事項
 クリックして拡大

アプリケーションのパフォーマンスを最適化する機会を特定すると、Amazon CodeGuru Profiler は、変更を推奨する理由、問題の原因、解決方法を説明し、さらにこの問題がアプリケーションに影響を与えるコード内の場所を明らかにします。この推奨事項を見ることで、コストが高いコード行が毎年 182,160 USD の予算を必要とし、CPU 使用率に 2.97% の影響を与えていることがわかります。このソリューション提案にある手順を実行することで、最大で 182,160 USD の節約が可能になります。

異常検出

Amazon CodeGuru Profiler は、アプリケーションプロファイルをリアルタイムで継続的に分析し、アプリケーションやメソッドの動作から異常を検出します。各異常の追跡結果は、CodeGuru Profiler コンソールの [Recommendation] (推奨事項) レポートに記載されます。ユーザーはこれにより、異常が明確に現れる時点でのメソッドのレイテンシーの振る舞いを、時系列的に確認することができます。また、新たな異常が検出されたときに通知を送るように、Amazon SNS を設定することもできます。

異常検出
 拡大イメージを見る
Amazon CodeGuru の料金
Amazon CodeGuru の料金の詳細

Amazon CodeGuru の料金ページをご覧ください。

詳細 
無料のアカウントにサインアップ
無料のアカウントにサインアップ

AWS 無料利用枠にすぐにアクセスできます。 

サインアップ 
コンソールで構築を開始する
コンソールで構築を開始する

AWS マネジメントコンソールで Amazon CodeGuru の構築を始めましょう。

サインイン