GitHub Actions を使用して Python AWS CDK アプリケーションの Amazon CodeGuru レビューを自動化する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

GitHub Actions を使用して Python AWS CDK アプリケーションの Amazon CodeGuru レビューを自動化する

Amazon Web Services、Vanitha Dontireddy、Sarat Chandra Pothula

概要

注: 2025 年 11 月 7 日現在、Amazon CodeGuru Reviewer で新しいリポジトリの関連付けを作成することはできません。CodeGuru Reviewer と同様の機能を持つサービスの詳細については、CodeGuru Reviewer ドキュメントの「Amazon CodeGuru Reviewer の可用性の変更」を参照してください。 CodeGuru

このパターンは、GitHub Actions を通じてオーケストレーションされた Python AWS Cloud Development Kit (AWS CDK) アプリケーションの Amazon CodeGuru 自動コードレビューの統合を示しています。このソリューションは、Python で定義されたサーバーレスアーキテクチャ AWS CDK をデプロイします。開発パイプライン内のエキスパートコード分析を自動化することで、このアプローチは Python AWS CDK プロジェクトに対して次のことを実行できます。

  • コードの品質を向上させる

  • ワークフローを効率化する

  • サーバーレスコンピューティングの利点を最大化する

前提条件と制限

前提条件

  • アクティブ AWS アカウント。

  • AWS Command Line Interface (AWS CLI) バージョン 2.9.11 以降、インストールおよび設定済み。

  • 有効な GitHub アカウントと、ワークフローの読み取りおよび書き込み権限ならびに PR ワークフローが正常に動作することを確保するための GitHub アクションによるプルリクエスト (PR) の作成機能を備えた GitHub リポジトリ。

  • AWS アカウントにソリューションをデプロイするための GitHub アクションの OpenID Connect (OIDC) ロール。ロールを作成するには AWS CDK コンストラクトを使用します。

制限事項

  • Amazon CodeGuru Profiler は、すべての Java 仮想マシン (JVM) 言語 (Scala や Kotlin など) およびランタイム、ならびに Python 3.6 以降で記述されたアプリケーションをサポートしています。

  • Amazon CodeGuru Reviewer は、、Bitbucket AWS CodeCommit、GitHub、GitHub Enterprise Cloud、GitHub Enterprise Server のソースプロバイダーからのみ、Java および Python コードリポジトリとの関連付けをサポートします。また、Amazon Simple Storage Service (Amazon S3) リポジトリは、GitHub アクションを通じてのみサポートされています。

  • 継続的インテグレーションと継続的デプロイ (CI/CD) のパイプライン中に結果を自動的に出力する方法はありません。このパターンでは、代替の方法として GitHub アクションを使用し検出結果を処理および表示します。

  • 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては「AWS サービス (リージョン別)」を参照してください。特定のエンドポイントについて確認するには、「サービスエンドポイントとクォータ」を参照し、サービスのリンクを選択してください。

アーキテクチャ

このソリューション用のアーキテクチャを次の図に示します。

GitHub アクションを使用して AWS CDK Python アプリケーションの CodeGuru コードレビューを統合するためのワークフロー。

図に示すように、開発者がレビュー用のプルリクエスト (PR) を作成すると、GitHub アクションが次のステップをトリガーします。

  1. IAM ロールの引き受け – パイプラインは、GitHub Secrets で指定された IAM ロールを使用してデプロイタスクを実行します。

  2. コード分析

    • CodeGuru Reviewer は、Amazon S3 バケットに保存されているコードを分析します。不具合を特定し、修正と最適化に関する推奨事項を提供します。

    • CodeGuru Security は、ポリシー違反と脆弱性をスキャンします。

  3. 検出結果の確認

    • パイプラインが、コンソールの出力に検出結果ダッシュボードへのリンクを出力します。

    • 重要度が重大である場合、パイプラインは直ちに失敗します。

    • 重要度が高、普通、低である場合、パイプラインは次のステップに進みます。

  4. PR の承認

    • レビュー担当者は、PR を手動で承認する必要があります。

    • PR が拒否されると、パイプラインは失敗し、それ以降のデプロイステップが停止します。

  5. CDK デプロイ – PR の承認後、CDK デプロイプロセスが開始します。以下の AWS のサービス および リソースを設定します。

    • CodeGuru Profiler

    • AWS Lambda 関数

    • Amazon Simple Queue Service (Amazon SQS) キュー

  6. データ生成のプロファイリング – CodeGuru Profiler 用に十分なプロファイリングデータを生成するには:

    • パイプラインは、Amazon SQS キューに定期的にメッセージを送信することで、Lambda 関数を複数回呼び出します。

ツール

AWS のサービス

  • AWS Cloud Development Kit (AWS CDK) は、コードで AWS クラウド インフラストラクチャを定義およびプロビジョニングするのに役立つソフトウェア開発フレームワークです。

  • CDK Toolkit は、 AWS CDK アプリの操作に役立つコマンドラインクラウド開発キットです。

  • Amazon CodeGuru Profiler は、ライブアプリケーションからランタイムパフォーマンスデータを収集し、アプリケーションのパフォーマンスを微調整する上で役立つ推奨事項を提供します。

  • Amazon CodeGuru Reviewer は、プログラム解析と機械学習により、開発者が検出するのが難しい潜在的な不具合を検出します。次に、CodeGuru Profiler は Java および Python コードを改善するための提案を提供します。

  • Amazon CodeGuru Security は、機械学習を使用してセキュリティポリシー違反と脆弱性を検出する静的アプリケーションセキュリティツールです。セキュリティリスクに対処するための提案を行い、アプリケーションのセキュリティ態勢を追跡できるようにメトリクスを生成します。

  • AWS Identity and Access Management (IAM) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。

  • AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

  • Amazon Simple Queue Service (Amazon SQS) 」は、安全で耐久性があり、配信ソフトウェアシステムとコンポーネントを統合および分離できる利用可能なホスト型キューを提供します。

  • Amazon Simple Storage Service (Amazon S3) 」は、どのようなデータの量であっても、保存、保護、取得することを支援するクラウドベースのオブジェクトストレージサービスです。

その他のツール

  • GitHub アクションは、GitHub リポジトリと緊密に統合された継続的インテグレーションおよび継続的デリバリー (CI/CD) プラットフォームです。GitHub アクションを使用することで、生成、テスト、デプロイのパイプラインを自動化できます。

コードリポジトリ

本パターン用のコードは、GitHub の amazon-codeguru-suite-cdk-python リポジトリから入手できます。

ベストプラクティス

エピック

タスク説明必要なスキル

AWS 認証情報を設定します。

スタックをデプロイする AWS アカウント と AWS リージョン を定義する変数をエクスポートするには、次のコマンドを実行します。

export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number>
export CDK_DEFAULT_REGION=<AWS Region>

の AWS 認証情報 AWS CDK は、環境変数を通じて提供されます。

AWS DevOps、DevOps エンジニア

リポジトリのクローン作成

ローカルマシンにリポジトリのクローンを作成するときは次のコマンドを実行します。

git clone https://github.com/aws-samples/amazon-codeguru-suite-cdk-python.git
AWS DevOps、DevOps エンジニア

CDK Toolkit をインストールします。

CDK Toolkit がインストールされていることを確認し、バージョンをチェックするには、次のコマンドを実行します。 

cdk --version

CDK Toolkit のバージョンが 2.27.0 より前の場合は、次のコマンドを入力してバージョン 2.27.0 に更新します。

npm install -g aws-cdk@2.27.0

CDK Toolkit がインストールされていない場合は、次のコマンドを実行してインストールします。

npm install -g aws-cdk@2.27.0 --force
AWS DevOps、DevOps エンジニア

必要な依存ファイルをインストールします。

必要なプロジェクトの従属関係をインストールには、次のコマンドを実行します。

python -m pip install --upgrade pip pip install -r requirements.txt
AWS DevOps、DevOps エンジニア

CDK 環境をブートストラップします。

AWS CDK 環境をブートストラップするには、以下のコマンドを実行します。

npm install npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"

環境を正常に起動すると、次の出力が表示されるはずです。

⏳ Bootstrapping environment aws://{account}/{region}... ✅ Environment aws://{account}/{region} bootstrapped
AWS DevOps、DevOps エンジニア
タスク説明必要なスキル

AWS CDK アプリケーションを合成します。

AWS CDK アプリケーションを合成するには、次のコマンドを実行します。

cdk synth

このコマンドの詳細については、 AWS CDK ドキュメントの「cdk 合成」を参照してください。

AWS DevOps、DevOps エンジニア

リソースのデプロイ

コマンドをデプロイするには次のコマンドをデプロイします。

cdk deploy --require-approval never
注記

--require-approval never フラグは、CDK がすべての変更を自動的に承認して実行することを意味します。これには、CDK が通常手動レビューを必要とするものとしてフラグを付ける変更 (IAM ポリシーの変更やリソースの削除など) が含まれます。本番環境で --require-approval never フラグを使用するときは、事前に CDK コードと CI/CD パイプラインが十分にテストされ安全であることを確認してください。

AWS DevOps、DevOps エンジニア
タスク説明必要なスキル

GitHub で必要なシークレットを作成します。

GitHub Actions ワークフローがリポジトリのコードに機密情報を公開することなく AWS リソースに安全にアクセスできるようにするには、シークレットを作成します。GitHub for ROLE_TO_ASSUMECodeGuruReviewArtifactBucketNameAWS_ACCOUNT_ID でシークレットを作成するには、GitHub アクションのドキュメントにある「Creating secrets for a repository」の手順に従います。

以下は、これらの変数の詳細です。

  • AWS_ACCOUNT_ID – パイプラインが実行される AWS アカウント ID。

  • CodeGuruReviewArtifactBucketName – CodeGuru Reviewer のアーティファクトが保存されている S3 バケットの名前。このパターンでは、バケット名 codeguru-reviewer-build-artifacts-<ACCOUNT_ID>-<REGION> を使用します。

  • AWS_REGION – リソース AWS リージョン が配置されている 。

  • ROLE_TO_ASSUME – パイプラインが引き受ける IAM ロールの名前。このパターンでは、ロール名を使用しますgithubActionsDeployRole

AWS DevOps、DevOps エンジニア

パーソナルアクセストークンを作成する

GitHub アクションのワークフローが GitHub を認証して操作するための安全な方法を設定するには、以下を実行します。

  1. リポジトリへの読み取りおよび書き込みアクセス権を持つ GitHub 個人用アクセストークンを作成するには、GitHub のドキュメント「Managing your personal access tokens」に記載されている手順に従います。

  2. このトークンを GitHub アクションのリポジトリシークレットとして保存するには、GitHub アクションドキュメントの「Creating secrets for a repository」の手順に従います。

AWS DevOps、DevOps エンジニア
タスク説明必要なスキル

リソースをクリーンアップします。

Python AWS CDK アプリケーションをクリーンアップするには、次のコマンドを実行します。

cdk destroy --all
DevOps エンジニア

トラブルシューティング

問題ソリューション

ダッシュボードの検出結果へのリンクを表示します。

CI/CD パイプライン中に結果を出力することはできません。このパターンでは、代替の方法として GitHub アクションを使用し検出結果を処理および表示します。

関連リソース

AWS リソース

GitHub ドキュメント