チュートリアル: Lambda 呼び出しアクションで変数を使用する
Lambda 呼び出しアクションは、入力のパートとして別のアクションの変数を使用し、出力とともに新しい変数を返すことができます。CodePipeline のアクションの変数については、「変数リファレンス」を参照してください。
重要
パイプライン作成の一環として、CodePipeline は、ユーザーが指定した S3 アーティファクトバケットをアーティファクトとして使用します (これは S3 ソースアクションで使用するバケットとは異なります)。S3 アーティファクトバケットがパイプラインのアカウントとは異なるアカウントにある場合は、S3 アーティファクトバケットを所有している AWS アカウントが安全で信頼できることを確認してください。
このチュートリアルを終了すると、以下の項目が使用可能になります。
-
Lambda は次のアクションを呼び出します。
-
CodeCommit ソースアクションからの
CommitId
変数を使用する -
3 つの新しい変数として
dateTime
、testRunId
、region
を出力する
-
-
Lambda 呼び出しアクションからの新しい変数を使用してテスト URL とテスト実行 ID を提供する手動承認アクション
-
新しいアクションを反映して更新されたパイプライン
前提条件
始めるには以下のものが必要です。
-
チュートリアル: シンプルなパイプラインを作成する (CodeCommit リポジトリ) の CodeCommit ソースを使用してパイプラインを作成または使用できます。
-
既存のパイプラインを編集して CodeCommit ソースアクションに名前空間を含めます。名前空間
SourceVariables
をアクションに割り当てます。
ステップ 1: Lambda 関数を作成する
次のステップを使用して Lambda 関数と Lambda 実行ロールを作成します。Lambda 関数を作成した後、パイプラインに Lambda アクションを追加します。
Lambda 関数と実行ロールを作成するには
AWS Management Console にサインインして AWS Lambda コンソール (https://console.aws.amazon.com/lambda/
) を開きます。 -
[Create function] (関数の作成) を選択します。[一から作成] が選択された状態のままにしておきます。
-
[関数名] に、関数の名前 (
myInvokeFunction
など) を入力します。[ランタイム] は、デフォルトのオプションを選択したままにします。 -
[実行ロールの選択または作成] を選択します。[基本的な Lambda アクセス権限で新しいロールを作成] を選択します。
-
[Create function (関数の作成)] を選択します。
-
別のアクションからの変数を使用するには、Lambda 呼び出しアクションの設定で
UserParameters
にその変数を渡す必要があります。このチュートリアルで後ほどパイプラインのアクションを設定しますが、ここでは変数を渡したものとしてコードを追加します。新しい変数を生成するには、入力の
outputVariables
というプロパティをputJobSuccessResult
に設定します。putJobFailureResult
の一部として変数を生成することはできない点に注意してください。const putJobSuccess = async (message) => { const params = { jobId: jobId, outputVariables: { testRunId: Math.floor(Math.random() * 1000).toString(), dateTime: Date(Date.now()).toString(), region: lambdaRegion } };
新しい関数の [コード] タブで、次のサンプルコードを
index.mjs
の下に貼り付けます。import { CodePipeline } from '@aws-sdk/client-codepipeline'; export const handler = async (event, context) => { const codepipeline = new CodePipeline({}); // Retrieve the Job ID from the Lambda action const jobId = event["CodePipeline.job"].id; // Retrieve UserParameters const params = event["CodePipeline.job"].data.actionConfiguration.configuration.UserParameters; // The region from where the lambda function is being executed const lambdaRegion = process.env.AWS_REGION; // Notify CodePipeline of a successful job const putJobSuccess = async (message) => { const params = { jobId: jobId, outputVariables: { testRunId: Math.floor(Math.random() * 1000).toString(), dateTime: Date(Date.now()).toString(), region: lambdaRegion } }; try { await codepipeline.putJobSuccessResult(params); return message; } catch (err) { throw err; } }; // Notify CodePipeline of a failed job const putJobFailure = async (message) => { const params = { jobId: jobId, failureDetails: { message: JSON.stringify(message), type: 'JobFailed', externalExecutionId: context.invokeid } }; try { await codepipeline.putJobFailureResult(params); throw message; } catch (err) { throw err; } }; try { console.log("Testing commit - " + params); // Your tests here // Succeed the job return await putJobSuccess("Tests passed."); } catch (ex) { // If any of the assertions failed then fail the job return await putJobFailure(ex); } };
-
自動保存することを関数に許可します。
-
画面上部の [関数 ARN] にある Amazon リソースネーム (ARN) をコピーします。
-
最後のステップとして、https://console.aws.amazon.com/iam/
で AWS Identity and Access Management (IAM) コンソールを開きます。Lambda 実行ロールを変更して、次のポリシーを追加します。AWSCodePipelineCustomActionAccess 。Lambda 実行ロールを作成したり、ロールポリシーを変更したりする手順については、「ステップ 2 : Lambda 関数を作成する」を参照してください。
ステップ 2: Lambda 呼び出しアクションと手動承認アクションをパイプラインに追加する
このステップでは、パイプラインに Lambda 呼び出しアクションを追加します。Test という名前のステージの一部としてアクションを追加します。アクションタイプは、呼び出しアクションです。次に、呼び出しアクションの後に、手動承認アクションを追加します。
パイプラインに Lambda アクションと手動承認アクションを追加するには
-
CodePipeline コンソール (https://console.aws.amazon.com/codepipeline/
) を開きます。 AWS アカウントに関連付けられているすべてのパイプラインの名前が表示されます。アクションを追加するパイプラインを選択します。
-
パイプラインに Lambda テストアクションを追加します。
-
パイプラインを編集するには、[編集] を選択します。既存のパイプラインで、ソースアクションの後にステージを追加します。ステージの名前 (
Test
など) を入力します。 -
新しいステージで、[アクショングループを追加する] を選択してアクションを追加します。「アクション名」に、呼び出しアクションの名前 (
Test_Commit
など) を入力します。 -
[アクションプロバイダー] で、[AWS Lambda ] を選択します。
-
[入力アーティファクト] で、ソースアクションの出力アーティファクトの名前 (
SourceArtifact
など) を選択します。 -
[関数名] で、作成した Lambda 関数の ARN を追加します。
-
[変数名前空間] に名前空間名 (
TestVariables
など) を追加します。 -
[出力アーティファクト] で、出力アーティファクト名 (
LambdaArtifact
など) を追加します。 -
[完了] をクリックします。
-
-
パイプラインに手動の承認アクションを追加します。
-
パイプラインが編集モードのままで、呼び出しアクションの後にステージを追加します。ステージの名前 (
Approval
など) を入力します。 -
新しいステージで、アクションを追加するアイコンを選択します。[アクション名] に、承認アクションの名前 (
Change_Approval
など) を入力します。 -
[アクションプロバイダ] で、[手動承認] を選択します。
-
[レビューする URL] で、
region
変数とCommitId
変数の変数構文を追加して URL を作成します。出力変数を提供するアクションに割り当てられた名前空間を使用してください。この例では、CodeCommit アクションの変数構文を持つ URL にはデフォルトの名前空間
SourceVariables
があります。Lambda リージョン出力変数には、TestVariables
名前空間があります。URL は次のようになります。https://#{TestVariables.region}.console.aws.amazon.com/codesuite/codecommit/repositories/MyDemoRepo/commit/#{SourceVariables.CommitId}
[コメント] で、
testRunId
変数の変数構文を追加して、承認メッセージテキストを作成します。この例では、LambdatestRunId
出力変数の変数構文を持つ URL にはTestVariables
名前空間があります。以下のメッセージを入力します。Make sure to review the code before approving this action. Test Run ID: #{TestVariables.testRunId}
-
-
[完了] を選択してアクションの編集画面を閉じ、[完了] を選択してステージの編集画面を閉じます。パイプラインを保存するには、[完了] を選択します。完成したパイプラインには、ソース、テスト、承認、デプロイの各ステージがある構造が含まれています。
[変更のリリース] を選択して、パイプライン構造で最新の変更を実行します。
-
パイプラインが手動承認ステージに達したら、[確認] を選択します。解決された変数は、コミット ID の URL として表示されます。承認者は、コミットを表示する URL を選択できます。
-
パイプラインが正常に実行されたら、アクションの実行履歴ページで変数の値を表示することもできます。