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

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

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

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

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

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

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

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

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

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

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

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

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

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 レスポンスARNに Lambda 関数を書き留めます。これは、次のステップで CodeDeploy デプロイの AppSpec ファイルを更新するARNときに使用します。