翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions と Lambda プロキシ関数を使用してAWSアカウント間で CodeBuild プロジェクトを起動する
作成者: Richard Milner-Watts (AWS)、Amit Anjarlekar (AWS)
概要
このパターンは、AWSStep Functions と AWS Lambda プロキシ関数を使用して、複数のAWSアカウントで AWS CodeBuild プロジェクトを非同期的に起動する方法を示しています。パターンのサンプル Step Functions ステートマシンを使用して、 CodeBuild プロジェクトの成功をテストできます。
CodeBuild は、フルマネージドランタイム環境から AWS コマンドラインインターフェイス (AWSCLI) を使用して運用タスクを起動するのに役立ちます。環境変数を上書きすることで、実行時に CodeBuild プロジェクトの動作を変更できます。さらに、 CodeBuild を使用してワークフローを管理できます。詳細については、AWSワークショップウェブサイトの「Service Catalog Tools」と、 AWS データベースブログの「 AWS CodeBuild と Amazon を使用して Amazon RDS for PostgreSQL でジョブをスケジュール EventBridgeする」を参照してください。
前提条件と制限
前提条件
制約事項
アーキテクチャ
このパターンが構築するアーキテクチャを次の図に示します。
この図表は、次のワークフローを示しています:
Step Functions ステートマシンは、指定された入力マップを解析し、定義したアカウント、リージョン、プロジェクトごとに Lambda プロキシ関数 (codebuild-proxy-lambda
) を呼び出します。
Lambda プロキシ関数はAWS、Security Token Service (AWSSTS) を使用して、ターゲットアカウントの IAMポリシー (codebuild-proxy-role
) に関連付けられたIAMプロキシロール (codebuild-proxy-policy
) を引き受けます。
引き受けたロールを使用して、Lambda 関数は CodeBuild プロジェクトを起動し、 CodeBuild ジョブ ID を返します。Step Functions ステートマシンは、成功または失敗のステータスを受け取るまで CodeBuild ジョブをループしてポーリングします。
ステートマシンのロジックを次の図に示します。
テクノロジースタック
AWS CloudFormation
CodeBuild
IAM
Lambda
Step Functions
X-Ray
AWS CloudFormation を使用すると、AWSリソースをセットアップし、迅速かつ一貫してプロビジョニングし、AWSアカウントとリージョン全体のライフサイクルを通じてリソースを管理できます。
AWS CloudFormation デザイナー には、 CloudFormation テンプレートの表示と編集に役立つ統合JSONYAMLエディタが用意されています。
AWS CodeBuild は、フルマネージド型のビルドサービスであり、ソースコードのコンパイル、ユニットテストの実行、デプロイ可能なアーティファクトの生成に役立ちます。
AWS Identity and Access Management (IAM) は、誰を認証し、誰に使用を許可するかを制御することで、 AWSリソースへのアクセスを安全に管理できます。
AWS Lambda は、サーバーのプロビジョニングや管理を必要とせずにコードを実行するのに役立つコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
AWS Step Functions は、AWSLambda 関数と他の サービスを組み合わせてビジネスクリティカルなアプリケーションを構築するのに役立つサーバーレスオーケストレーションAWSサービスです。
AWS X-Ray は、アプリケーションが処理するリクエストに関するデータを収集し、そのデータを表示、フィルタリング、インサイトを取得して、問題や最適化の機会を特定するために使用できるツールを提供します。
コード
このパターンのサンプルコードは、 GitHubCross Account CodeBuild Proxy リポジトリにあります。このパターンでは、AWSLambda Powertools for Python ライブラリを使用してログ記録とトレース機能を提供します。このライブラリとそのユーティリティの詳細については、「Powertools for AWS Lambda (Python)」を参照してください。
ベストプラクティス
Step Function ステートマシンの待機時間の値を調整して、ジョブステータスのポーリングリクエストを最小限に抑えます。 CodeBuild プロジェクトの予想される実行時間を使用します。
Step Functions でマップの MaxConcurrency
プロパティを調整して、並列で実行できる CodeBuild プロジェクトの数を制御します。
必要に応じて、本番稼働の準備状況のサンプルコードを確認します。ソリューションによってログに記録される可能性のあるデータと、デフォルトの Amazon CloudWatch 暗号化で十分かどうかを検討します。
エピック
タスク | 説明 | 必要なスキル |
---|
AWS アカウント を記録しますIDs。 | AWS アカウント間でアクセスを設定するには、 アカウントIDsが必要です。 ソースAWSアカウントとターゲットアカウントのアカウント ID を記録します。詳細については、 IAMドキュメントのAWS「アカウント ID の検索」を参照してください。 | AWS DevOps |
AWS CloudFormation テンプレートをダウンロードします。 | このパターンのGitHub リポジトリからsample_target_codebuild_template.yaml AWS CloudFormation テンプレートをダウンロードします。 このパターンのGitHub リポジトリからAWS CloudFormation テンプレートをダウンロードしますcodebuild_lambda_proxy_template.yaml 。
AWS CloudFormation テンプレートでは、 <SourceAccountId> はソースAWSアカウントのアカウント ID で、 <TargetAccountId> はターゲットアカウントのアカウント AWS ID です。 | AWS DevOps |
AWS CloudFormation スタックを作成してデプロイします。 | ソースアカウントの AWSマネジメントコンソールにサインインし、 AWS CloudFormation コンソールを開き、 スタックを選択します。 [スタックの作成] を選択し、[With new resources (standard) 新しいリソースを使用 (標準)] を選択します。 [テンプレートソース] で、[テンプレートファイルのアップロード] を選択します。 [テンプレートファイルのアップロード] で [ファイル] を選択し、ダウンロードしたファイルcodebuild_lambda_proxy_template.yaml を選択します。[Next (次へ)] を選択します。 [スタック名] にスタックの名前 (例: codebuild-lambda-proxy ) を入力します。 crossAccountTargetRoleArn パラメータをお使いの <TargetAccountId> (たとえば <arn:aws:iam::123456789012:role/proxy-lambda-codebuild-role> ) に置き換えます。: パラメータのデフォルト値targetCodeBuildProject を更新する必要はありません。
[次へ] を選択し、デフォルトのスタック作成オプションを許可してから、[次へ] を選択します。 がカスタム名でIAMリソースを作成するAWS CloudFormation 可能性があることを確認したチェックボックスを選択し、スタックの作成を選択します。
ターゲットアカウントにリソースを作成する前に、プロキシ Lambda 関数のAWS CloudFormation スタックを作成する必要があります。ターゲットアカウントに信頼ポリシーを作成すると、IAMロールはロール名から内部識別子に変換されます。そのため、IAMロールは既に存在している必要があります。 | AWS DevOps |
プロキシ関数とステートマシンが作成されていることを確認します。 | AWS CloudFormation スタックが CREATE_COMPLETEstatus になるまで待ちます。この所要時間は 1 分以内となります。 AWS Lambda コンソールを開き、関数を選択してから、lambda-proxy-ProxyLambda-<GUID> 関数を見つけます。 AWS Step Functions コンソールを開き、ステートマシンを選択してから、sample-crossaccount-codebuild-state-machine ステートマシンを見つけます。
| AWS DevOps |
タスク | 説明 | 必要なスキル |
---|
AWS CloudFormation スタックを作成してデプロイします。 | ターゲットアカウントの AWSマネジメントコンソールにサインインし、 AWS CloudFormation コンソールを開き、 スタックを選択します。 [スタックの作成] を選択し、[With new resources (standard) 新しいリソースを使用 (標準)] を選択します。 [テンプレートソース] で、[テンプレートファイルのアップロード] を選択します。 [テンプレートファイルのアップロード] で [ファイルの選択] を選択し、sample_target_codebuild_template.yaml ファイルを選択します。[Next (次へ)] を選択します。 [スタック名] にスタックの名前 (例: sample-codebuild-stack ) を入力します。 crossAccountSourceRoleArn パラメータをお使いの <SourceAccountId> (たとえば <arn:aws:iam::123456789012:role/codebuild-proxy-lambda-role> ) に置き換えます。
[次へ] を選択し、デフォルトのスタック作成オプションを許可してから、[次へ] を選択します。 がカスタム名でIAMリソースを作成するAWS CloudFormation 可能性があることを確認したチェックボックスを選択し、スタックの作成を選択します。
| AWS DevOps |
サンプル CodeBuild プロジェクトの作成を確認します。 | AWS CloudFormation スタックが CREATE_COMPLETE ステータスになるまで待ちます。この所要時間は 1 分以内となります。 AWS CodeBuild コンソールを開き、sample-codebuild-project プロジェクトを見つけます。
| AWS DevOps |
タスク | 説明 | 必要なスキル |
---|
ステートマシンを起動します。 | ソースアカウントの AWSマネジメントコンソールにサインインし、AWSStep Functions コンソールを開き、ステートマシンを選択します。 sample-crossaccount-codebuild-state-machine ステートマシンを選択し、次に[実行開始] を選択します。
入力エディタで、次の を入力しJSON、 を CodeBuild プロジェクトを含むアカウントのアカウント AWS ID <TargetAccountID> に置き換えます。 {
"crossAccountTargetRoleArns": [
{
"arn": "arn:aws:iam::<TargetAccountID>:role/proxy-lambda-codebuild-role",
"region": "eu-west-1",
"codeBuildProject": "sample-codebuild-project",
"SampleValue1": "Value1",
"SampleValue2": "Value2"
}
]
}
キーと値のペアは、ソースアカウントの 関数からターゲットアカウントの CodeBuild プロジェクトに環境変数として渡されます。 [実行のスタート] を選択します。 ステートマシンページの [詳細] タブで、[実行ステータス] が [成功] に設定されているかどうかを確認します。これで、ステートマシンの実行が確認できました。注: ステートマシンが [成功] ステータスになるまで約 30 秒かかることがあります。 ステートマシンのステップの出力と入力を確認するには、[実行イベント履歴] セクションでそのステップを展開します。例えば、Lambda - CodeBuild Proxy – Start ステップを展開します。出力には、上書きされた環境変数、元のペイロード、 CodeBuild ジョブ ID の詳細が含まれます。
| AWS DevOps |
環境変数を検証します。 | ターゲットアカウントの AWSマネジメントコンソールにサインインします。 AWS CodeBuild コンソールを開き、ビルド を展開し、プロジェクトの構築 を選択します。 sample-codebuild-project プロジェクトを選択し、詳細の表示を選択します。
ビルド履歴タブで、プロジェクトの最新のビルドを選択し、ログの表示を選択します。 ログ出力で、Step Functions サンプルステートマシンの環境変数STDOUTと一致するように出力された環境変数を確認します。
| AWS DevOps |
トラブルシューティング
問題 | ソリューション |
---|
Step Functions の実行に予想以上に時間がかかります。 | Step Function ステートマシンのマップの MaxConcurrency プロパティを調整して、並列で実行できる CodeBuild プロジェクトの数を制御します。 |
CodeBuild ジョブの実行に予想以上に時間がかかります。 | Step Functions ステートマシンの待機時間の値を調整して、ジョブステータスのポーリングリクエストを最小限に抑えます。 CodeBuild プロジェクトの予想される実行時間を使用します。 CodeBuild が使用する適切なツールであるかどうかを検討します。例えば、 CodeBuild ジョブの初期化に必要な時間は、AWSLambda よりも大幅に長くなる可能性があります。高いスループットと高速な完了時間が必要な場合は、ビジネスロジックを AWS Lambda に移行し、ファンアウトアーキテクチャを使用することを検討してください。
|