ステップ 3: ライフサイクルフック Lambda 関数を作成する - AWS CodeDeploy

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

ステップ 3: ライフサイクルフック Lambda 関数を作成する

このセクションでは、Amazon ECS デプロイの AfterAllowTestTraffic のフック用に 1 つの Lambda 関数を実装します。Lambda 関数は、更新された Amazon ECS アプリケーションがインストールされる前に検証テストを実行します。このチュートリアルでは、Lambda 関数は Succeeded を返します。実際のデプロイ中、検証テストの結果に応じて、検証テストは Succeeded または Failed を返します。また、実際のデプロイ中に、他の Amazon ECS デプロイライフサイクルイベントフック (BeforeInstallAfterInstallBeforeAllowTraffic、および AfterAllowTraffic) に 1 つ以上の Lambda テスト関数を実装することもできます。詳細については、「Amazon ECS のデプロイ向けのライフサイクルイベントフックのリスト」を参照してください。

Lambda 関数を作成するには、IAM ロールが必要です。ロールは、CloudWatch Logs に書き込む Lambda 関数を許可し、CodeDeployライフサイクルフックのステータスを設定します。

IAM ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインから [ロール] を選択し、[ロールの作成] を選択します。

  3. 次のプロパティでロールを作成します。

    • 信頼されたエンティティ]: AWS Lambda

    • 権限:AWSLambdaBasicExecutionRole。これにより、CloudWatch Logs に書き込むアクセス許可が Lambda 関数に付与されます。

    • ロール名]: lambda-cli-hook-role

    詳細については、「AWS Lambda 実行ロールの作成」を参照してください。

  4. 作成したロールにアクセス許可 codedeploy:PutLifecycleEventHookExecutionStatus をアタッチします。これにより、CodeDeployデプロイ中にライフサイクルフックのステータスを設定する Lambda 関数の許可が付与されます。詳細については、AWS Identity and Access ManagementユーザーガイドとCodeDeploy API リファレンスのIAM ID PutLifecycleEventHookExecutionStatus権限の追加」を参照してください。

AfterAllowTestTraffic のフック Lambda 関数を作成するには
  1. 次の内容で、AfterAllowTestTraffic.js という名前のファイルを作成します。

    'use strict'; const AWS = require('aws-sdk'); const codedeploy = new AWS.CodeDeploy({apiVersion: '2014-10-06'}); exports.handler = (event, context, callback) => { console.log("Entering AfterAllowTestTraffic hook."); // Read the DeploymentId and LifecycleEventHookExecutionId from the event payload var deploymentId = event.DeploymentId; var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId; var validationTestResult = "Failed"; // Perform AfterAllowTestTraffic validation tests here. Set the test result // to "Succeeded" for this tutorial. console.log("This is where AfterAllowTestTraffic validation tests happen.") validationTestResult = "Succeeded"; // Complete the AfterAllowTestTraffic hook by sending CodeDeploy the validation status var params = { deploymentId: deploymentId, lifecycleEventHookExecutionId: lifecycleEventHookExecutionId, status: validationTestResult // status can be 'Succeeded' or 'Failed' }; // Pass CodeDeploy the prepared validation test results. codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) { if (err) { // Validation failed. console.log('AfterAllowTestTraffic validation tests failed'); console.log(err, err.stack); callback("CodeDeploy Status update failed"); } else { // Validation succeeded. console.log("AfterAllowTestTraffic validation tests succeeded"); callback(null, "AfterAllowTestTraffic validation tests succeeded"); } }); }
  2. Lambda デプロイパッケージを作成する

    zip AfterAllowTestTraffic.zip AfterAllowTestTraffic.js
  3. create-function のコマンドを使用して、AfterAllowTestTraffic のフックのために Lambda 関数を作成します。

    aws lambda create-function --function-name AfterAllowTestTraffic \ --zip-file fileb://AfterAllowTestTraffic.zip \ --handler AfterAllowTestTraffic.handler \ --runtime nodejs10.x \ --role arn:aws:iam::aws-account-id:role/lambda-cli-hook-role
  4. create-function のレスポンスにある Lambda 関数の ARN を書き留めます。この ARN は、CodeDeployAppSpec次のステップでデプロイファイルを更新するときに使用します。