

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

# GitHub Actions を使用して Python AWS CDK アプリケーションの Amazon CodeGuru レビューを自動化する
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications"></a>

*Amazon Web Services、Vanitha Dontireddy、Sarat Chandra Pothula*

## 概要
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-summary"></a>

注: 2025 年 11 月 7 日現在、Amazon CodeGuru Reviewer で新しいリポジトリの関連付けを作成することはできません。CodeGuru Reviewer と同様の機能を持つサービスの詳細については、[CodeGuru Reviewer ドキュメントの「Amazon CodeGuru Reviewer の可用性の変更](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html)」を参照してください。 CodeGuru 

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

## 前提条件と制限
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-prereqs"></a>

**前提条件**
+ アクティブ AWS アカウント。
+ AWS Command Line Interface (AWS CLI) バージョン 2.9.11 以降、[インストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)および[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)済み。
+ 有効な GitHub アカウントと、ワークフローの読み取りおよび書き込み権限ならびに PR ワークフローが正常に動作することを確保するための GitHub アクションによるプルリクエスト (PR) の作成機能を備えた GitHub リポジトリ。
+  AWS アカウントにソリューションをデプロイするための GitHub アクションの OpenID Connect (OIDC) ロール。ロールを作成するには [AWS CDK コンストラクト](https://github.com/aws-samples/github-actions-oidc-cdk-construct)を使用します。

**制限事項**
+ Amazon CodeGuru Profiler は、すべての Java 仮想マシン (JVM) 言語 (Scala や Kotlin など) およびランタイム、ならびに Python 3.6 以降で記述された[アプリケーションをサポート](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html#what-is-language-support)しています。
+ Amazon CodeGuru Reviewer は、、Bitbucket AWS CodeCommit、GitHub、GitHub Enterprise Cloud、GitHub Enterprise Server のソースプロバイダーからのみ、Java および Python コードリポジトリとの[関連付けをサポートします](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/working-with-repositories.html)。また、Amazon Simple Storage Service (Amazon S3) リポジトリは、GitHub アクションを通じてのみサポートされています。
+ 継続的インテグレーションと継続的デプロイ (CI/CD) のパイプライン中に結果を自動的に出力する方法はありません。このパターンでは、代替の方法として GitHub アクションを使用し検出結果を処理および表示します。
+ 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては「[AWS サービス (リージョン別)](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。特定のエンドポイントについて確認するには、「[サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」を参照し、サービスのリンクを選択してください。

## アーキテクチャ
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-architecture"></a>

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

![GitHub アクションを使用して AWS CDK Python アプリケーションの CodeGuru コードレビューを統合するためのワークフロー。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/c5395e3e-ff2a-41cf-bd64-c73cc928b60b/images/18f880a2-9bc3-4d71-a598-bb83b68ee383.png)


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

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

1. コード分析
   + CodeGuru Reviewer は、Amazon S3 バケットに保存されているコードを分析します。不具合を特定し、修正と最適化に関する推奨事項を提供します。
   + CodeGuru Security は、ポリシー違反と脆弱性をスキャンします。

1. 検出結果の確認
   + パイプラインが、コンソールの出力に検出結果ダッシュボードへのリンクを出力します。
   + 重要度が重大である場合、パイプラインは直ちに失敗します。
   + 重要度が高、普通、低である場合、パイプラインは次のステップに進みます。

1. PR の承認
   + レビュー担当者は、PR を手動で承認する必要があります。
   + PR が拒否されると、パイプラインは失敗し、それ以降のデプロイステップが停止します。

1. CDK デプロイ – PR の承認後、CDK デプロイプロセスが開始します。以下の AWS のサービス および リソースを設定します。
   + CodeGuru Profiler
   + AWS Lambda 関数
   + Amazon Simple Queue Service (Amazon SQS) キュー

1. データ生成のプロファイリング – CodeGuru Profiler 用に十分なプロファイリングデータを生成するには:
   + パイプラインは、Amazon SQS キューに定期的にメッセージを送信することで、Lambda 関数を複数回呼び出します。

## ツール
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-tools"></a>

**AWS のサービス**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) は、コードで AWS クラウド インフラストラクチャを定義およびプロビジョニングするのに役立つソフトウェア開発フレームワークです。
+ [CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) は、 AWS CDK アプリの操作に役立つコマンドラインクラウド開発キットです。
+ [Amazon CodeGuru Profiler](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html) は、ライブアプリケーションからランタイムパフォーマンスデータを収集し、アプリケーションのパフォーマンスを微調整する上で役立つ推奨事項を提供します。
+ [Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) は、プログラム解析と機械学習により、開発者が検出するのが難しい潜在的な不具合を検出します。次に、CodeGuru Profiler は Java および Python コードを改善するための提案を提供します。
+ Amazon CodeGuru Security は、機械学習を使用してセキュリティポリシー違反と脆弱性を検出する静的アプリケーションセキュリティツールです。セキュリティリスクに対処するための提案を行い、アプリケーションのセキュリティ態勢を追跡できるようにメトリクスを生成します。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ 「[Amazon Simple Queue Service (Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)) 」は、安全で耐久性があり、配信ソフトウェアシステムとコンポーネントを統合および分離できる利用可能なホスト型キューを提供します。
+ 「[Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 」は、どのようなデータの量であっても、保存、保護、取得することを支援するクラウドベースのオブジェクトストレージサービスです。

**その他のツール**
+ [GitHub アクション](https://docs.github.com/en/actions/writing-workflows/quickstart)は、GitHub リポジトリと緊密に統合された継続的インテグレーションおよび継続的デリバリー (CI/CD) プラットフォームです。GitHub アクションを使用することで、生成、テスト、デプロイのパイプラインを自動化できます。

**コードリポジトリ**

本パターン用のコードは、GitHub の [amazon-codeguru-suite-cdk-python](https://github.com/aws-samples/amazon-codeguru-suite-cdk-python) リポジトリから入手できます。

## ベストプラクティス
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-best-practices"></a>
+ 「[Best practices for developing and deploying cloud infrastructure with the AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html)」に従います。
+ GitHub Actions ワークフロー AWS のサービス で を使用する場合は、[IAM のセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)に従います。
  + リポジトリコードに認証情報を保存しない。
  + 一時的な認証情報を受け取るときは [IAM ロールを引き受け](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-workloads-use-roles)、可能な限り一時的な認証情報を使用する。
  + GitHub アクションのワークフローで使用される IAM ロールに[最小特権を付与する](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。アクセス権限は、GitHub アクションのワークフローでアクションを実行するために必要なもののみを付与する。
  + GitHub アクションのワークフローで使用される IAM ロールの[アクティビティをモニタリングする](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#remove-credentials)。
  + 有効期間の長い認証情報を使用するときは定期的にローテーションする。

## エピック
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-epics"></a>

### 環境をセットアップします。
<a name="set-up-your-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
|  AWS 認証情報を設定します。 | スタックをデプロイする AWS アカウント と AWS リージョン を定義する変数をエクスポートするには、次のコマンドを実行します。<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number></pre><pre>export CDK_DEFAULT_REGION=<AWS Region></pre>の AWS 認証情報 AWS CDK は、環境変数を通じて提供されます。 | AWS DevOps、DevOps エンジニア | 
| リポジトリのクローン作成 | ローカルマシンにリポジトリのクローンを作成するときは次のコマンドを実行します。<pre>git clone https://github.com/aws-samples/amazon-codeguru-suite-cdk-python.git</pre> | AWS DevOps、DevOps エンジニア | 
| CDK Toolkit をインストールします。 | CDK Toolkit がインストールされていることを確認し、バージョンをチェックするには、次のコマンドを実行します。 <pre>cdk --version</pre>CDK Toolkit のバージョンが 2.27.0 より前の場合は、次のコマンドを入力してバージョン 2.27.0 に更新します。<pre>npm install -g aws-cdk@2.27.0</pre>CDK Toolkit が*インストールされていない*場合は、次のコマンドを実行してインストールします。<pre>npm install -g aws-cdk@2.27.0 --force</pre> | AWS DevOps、DevOps エンジニア | 
| 必要な依存ファイルをインストールします。 | 必要なプロジェクトの従属関係をインストールには、次のコマンドを実行します。<pre>python -m pip install --upgrade pip<br />pip install -r requirements.txt</pre> | AWS DevOps、DevOps エンジニア | 
| CDK 環境をブートストラップします。 | AWS CDK 環境を[ブートストラップ](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)するには、以下のコマンドを実行します。<pre>npm install<br />npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"</pre>環境を正常に起動すると、次の出力が表示されるはずです。<pre>⏳  Bootstrapping environment aws://{account}/{region}...<br />✅  Environment aws://{account}/{region} bootstrapped</pre> | AWS DevOps、DevOps エンジニア | 

### CDK アプリをデプロイする
<a name="deploy-the-cdk-app"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
|  AWS CDK アプリケーションを合成します。 |  AWS CDK アプリケーションを合成するには、次のコマンドを実行します。<pre>cdk synth</pre>このコマンドの詳細については、 AWS CDK ドキュメントの[「cdk 合成](https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-synth.html)」を参照してください。 | AWS DevOps、DevOps エンジニア | 
| リソースのデプロイ | コマンドをデプロイするには次のコマンドをデプロイします。<pre>cdk deploy --require-approval never</pre>`--require-approval never` フラグは、CDK がすべての変更を自動的に承認して実行することを意味します。これには、CDK が通常手動レビューを必要とするものとしてフラグを付ける変更 (IAM ポリシーの変更やリソースの削除など) が含まれます。本番環境で `--require-approval never` フラグを使用するときは、事前に CDK コードと CI/CD パイプラインが十分にテストされ安全であることを確認してください。 | AWS DevOps、DevOps エンジニア | 

### GitHub シークレットと個人用アクセストークンを作成します。
<a name="create-github-secrets-and-personal-access-token"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| GitHub で必要なシークレットを作成します。 | GitHub Actions ワークフローがリポジトリのコードに機密情報を公開することなく AWS リソースに安全にアクセスできるようにするには、シークレットを作成します。GitHub for `ROLE_TO_ASSUME`、`CodeGuruReviewArtifactBucketName`、`AWS_ACCOUNT_ID` でシークレットを作成するには、GitHub アクションのドキュメントにある「[Creating secrets for a repository](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository)」の手順に従います。以下は、これらの変数の詳細です。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps、DevOps エンジニア | 
| パーソナルアクセストークンを作成する | GitHub アクションのワークフローが GitHub を認証して操作するための安全な方法を設定するには、以下を実行します。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps、DevOps エンジニア | 

### クリーンアップ
<a name="clean-up"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| リソースをクリーンアップします。 | Python AWS CDK アプリケーションをクリーンアップするには、次のコマンドを実行します。<pre>cdk destroy --all</pre> | DevOps エンジニア | 

## トラブルシューティング
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-troubleshooting"></a>


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

## 関連リソース
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-resources"></a>

**AWS リソース**
+ [AWS クラウド開発キット](https://aws.amazon.com/cdk/)
+ [Amazon CodeGuru ドキュメント](https://docs.aws.amazon.com/codeguru/)
+ [Amazon S3](https://aws.amazon.com/s3/)
+ [AWS Identity and Access Management](https://aws.amazon.com/iam/)
+ [Amazon Simple Queue Service](https://aws.amazon.com/sqs/)
+ [とは AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

**GitHub ドキュメント**
+ [Configuring OpenID Connect in Amazon Web Services](https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services)
+ [GitHub Actions](https://github.com/features/actions)
+ [ワークフローの再利用](https://docs.github.com/en/actions/using-workflows/reusing-workflows)
+ [ワークフローのトリガー](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow) 