チュートリアル: Lambda 呼び出しアクションで変数を使用する - AWS CodePipeline

チュートリアル: Lambda 呼び出しアクションで変数を使用する

Lambda 呼び出しアクションは、入力のパートとして別のアクションの変数を使用し、出力とともに新しい変数を返すことができます。CodePipeline のアクションの変数については、「変数リファレンス」を参照してください。

重要

パイプライン作成の一環として、CodePipeline は、ユーザーが指定した S3 アーティファクトバケットをアーティファクトとして使用します (これは S3 ソースアクションで使用するバケットとは異なります)。S3 アーティファクトバケットがパイプラインのアカウントとは異なるアカウントにある場合は、S3 アーティファクトバケットを所有している AWS アカウントが安全で信頼できることを確認してください。

このチュートリアルを終了すると、以下の項目が使用可能になります。

  • Lambda は次のアクションを呼び出します。

    • CodeCommit ソースアクションからの CommitId 変数を使用する

    • 3 つの新しい変数として dateTimetestRunIdregion を出力する

  • Lambda 呼び出しアクションからの新しい変数を使用してテスト URL とテスト実行 ID を提供する手動承認アクション

  • 新しいアクションを反映して更新されたパイプライン

前提条件

始めるには以下のものが必要です。

ステップ 1: Lambda 関数を作成する

次のステップを使用して Lambda 関数と Lambda 実行ロールを作成します。Lambda 関数を作成した後、パイプラインに Lambda アクションを追加します。

Lambda 関数と実行ロールを作成するには
  1. AWS Management Console にサインインして AWS Lambda コンソール (https://console.aws.amazon.com/lambda/) を開きます。

  2. [Create function] (関数の作成) を選択します。[一から作成] が選択された状態のままにしておきます。

  3. [関数名] に、関数の名前 (myInvokeFunction など) を入力します。[ランタイム] は、デフォルトのオプションを選択したままにします。

  4. [実行ロールの選択または作成] を選択します。[基本的な Lambda アクセス権限で新しいロールを作成] を選択します。

  5. [Create function (関数の作成)] を選択します。

  6. 別のアクションからの変数を使用するには、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); } };
  7. 自動保存することを関数に許可します。

  8. 画面上部の [関数 ARN] にある Amazon リソースネーム (ARN) をコピーします。

  9. 最後のステップとして、https://console.aws.amazon.com/iam/ で AWS Identity and Access Management (IAM) コンソールを開きます。Lambda 実行ロールを変更して、次のポリシーを追加します。AWSCodePipelineCustomActionAccess。Lambda 実行ロールを作成したり、ロールポリシーを変更したりする手順については、「ステップ 2 : Lambda 関数を作成する」を参照してください。

ステップ 2: Lambda 呼び出しアクションと手動承認アクションをパイプラインに追加する

このステップでは、パイプラインに Lambda 呼び出しアクションを追加します。Test という名前のステージの一部としてアクションを追加します。アクションタイプは、呼び出しアクションです。次に、呼び出しアクションの後に、手動承認アクションを追加します。

パイプラインに Lambda アクションと手動承認アクションを追加するには
  1. CodePipeline コンソール (https://console.aws.amazon.com/codepipeline/) を開きます。

    AWS アカウントに関連付けられているすべてのパイプラインの名前が表示されます。アクションを追加するパイプラインを選択します。

  2. パイプラインに Lambda テストアクションを追加します。

    1. パイプラインを編集するには、[編集] を選択します。既存のパイプラインで、ソースアクションの後にステージを追加します。ステージの名前 (Test など) を入力します。

    2. 新しいステージで、[アクショングループを追加する] を選択してアクションを追加します。「アクション名」に、呼び出しアクションの名前 (Test_Commit など) を入力します。

    3. [アクションプロバイダー] で、[AWS Lambda ] を選択します。

    4. [入力アーティファクト] で、ソースアクションの出力アーティファクトの名前 (SourceArtifact など) を選択します。

    5. [関数名] で、作成した Lambda 関数の ARN を追加します。

    6. [変数名前空間] に名前空間名 (TestVariables など) を追加します。

    7. [出力アーティファクト] で、出力アーティファクト名 (LambdaArtifact など) を追加します。

    8. [完了] をクリックします。

  3. パイプラインに手動の承認アクションを追加します。

    1. パイプラインが編集モードのままで、呼び出しアクションの後にステージを追加します。ステージの名前 (Approval など) を入力します。

    2. 新しいステージで、アクションを追加するアイコンを選択します。[アクション名] に、承認アクションの名前 (Change_Approval など) を入力します。

    3. [アクションプロバイダ] で、[手動承認] を選択します。

    4. [レビューする 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 変数の変数構文を追加して、承認メッセージテキストを作成します。この例では、Lambda testRunId 出力変数の変数構文を持つ URL には TestVariables 名前空間があります。以下のメッセージを入力します。

      Make sure to review the code before approving this action. Test Run ID: #{TestVariables.testRunId}
  4. [完了] を選択してアクションの編集画面を閉じ、[完了] を選択してステージの編集画面を閉じます。パイプラインを保存するには、[完了] を選択します。完成したパイプラインには、ソース、テスト、承認、デプロイの各ステージがある構造が含まれています。

    [変更のリリース] を選択して、パイプライン構造で最新の変更を実行します。

  5. パイプラインが手動承認ステージに達したら、[確認] を選択します。解決された変数は、コミット ID の URL として表示されます。承認者は、コミットを表示する URL を選択できます。

  6. パイプラインが正常に実行されたら、アクションの実行履歴ページで変数の値を表示することもできます。