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

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

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

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

重要

パイプラインの作成の一環として、お客様が提供する S3 アーティファクトバケットがアーティファクト CodePipeline に によって使用されます。(これは 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 にその変数を渡す必要があります。このチュートリアルで後ほどパイプラインのアクションを設定しますが、ここでは変数を渡したものとしてコードを追加します。

    const commitId = event["CodePipeline.job"].data.actionConfiguration.configuration.UserParameters;

    新しい変数を生成するには、入力の outputVariables というプロパティを putJobSuccessResult に設定します。putJobFailureResult の一部として変数を生成することはできない点に注意してください。

    const successInput = { jobId: jobId, outputVariables: { testRunId: Math.floor(Math.random() * 1000).toString(), dateTime: Date(Date.now()).toString(), region: lambdaRegion } };

    新しい関数で、[コードをインラインで編集] を選択したまま、次のコード例を index.js の下に貼り付けます。

    var AWS = require('aws-sdk'); exports.handler = function(event, context) { var codepipeline = new AWS.CodePipeline(); // Retrieve the Job ID from the Lambda action var jobId = event["CodePipeline.job"].id; // Retrieve the value of UserParameters from the Lambda action configuration in CodePipeline, // in this case it is the Commit ID of the latest change of the pipeline. var params = event["CodePipeline.job"].data.actionConfiguration.configuration.UserParameters; // The region from where the lambda function is being executed. var lambdaRegion = process.env.AWS_REGION; // Notify CodePipeline of a successful job var putJobSuccess = function(message) { var params = { jobId: jobId, outputVariables: { testRunId: Math.floor(Math.random() * 1000).toString(), dateTime: Date(Date.now()).toString(), region: lambdaRegion } }; codepipeline.putJobSuccessResult(params, function(err, data) { if(err) { context.fail(err); } else { context.succeed(message); } }); }; // Notify CodePipeline of a failed job var putJobFailure = function(message) { var params = { jobId: jobId, failureDetails: { message: JSON.stringify(message), type: 'JobFailed', externalExecutionId: context.invokeid } }; codepipeline.putJobFailureResult(params, function(err, data) { context.fail(message); }); }; var sendResult = function() { try { console.log("Testing commit - " + params); // Your tests here // Succeed the job putJobSuccess("Tests passed."); } catch (ex) { // If any of the assertions failed then fail the job putJobFailure(ex); } }; sendResult(); };
  7. [Save] を選択します。

  8. 画面上部の Amazon リソースネーム (ARN) をコピーします。

  9. 最後のステップとして、 で AWS Identity and Access Management (IAM) コンソールを開きますhttps://console.aws.amazon.com/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 関数の名前を選択します。

    6. ユーザーパラメータ に、 CodeCommit コミット ID の変数構文を入力します。これにより、パイプラインが実行されるたびに確認および承認されるコミットに解決される出力変数が作成されます。

      #{SourceVariables.CommitId}
    7. [変数名前空間] に名前空間名 (TestVariables など) を追加します。

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

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

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

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

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

    4. URL で を確認し、 変数と 変数のregion変数構文URLを追加して を構築しますCommitId。出力変数を提供するアクションに割り当てられた名前空間を使用してください。

      この例では、 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. パイプラインが正常に実行されたら、アクションの実行履歴ページで変数の値を表示することもできます。