

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

# ステップ 3: ライフサイクルフック Lambda 関数を作成する
<a name="tutorial-ecs-with-hooks-create-hooks"></a>

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

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

**IAM ロールを作成するには**

1. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

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

1.  次のプロパティでロールを作成します。
   +  **信頼されたエンティティ**]: **AWS Lambda**。
   +  [**アクセス許可**]: [**AWSLambdaBasicExecutionRole**]。これにより、CloudWatch Logs に書き込むアクセス許可が Lambda 関数に付与されます。
   +  **ロール名**]: **`lambda-cli-hook-role`**。

   詳細については、[AWS Lambda 「実行ロールの作成](https://docs.aws.amazon.com/lambda/latest/dg/with-userapp.html#with-userapp-walkthrough-custom-events-create-iam-role)」を参照してください。

1.  作成したロールにアクセス許可 `codedeploy:PutLifecycleEventHookExecutionStatus` をアタッチします。これにより、デプロイ中に CodeDeploy ライフサイクルフックのステータスを設定する Lambda 関数の許可が付与されます。詳細については、*AWS Identity and Access Management ユーザーガイド* の [Adding IAM identity permissions](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)、および *CodeDeploy API Reference* の [PutLifecycleEventHookExecutionStatus](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_PutLifecycleEventHookExecutionStatus.html) を参照してください。

**`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");
    		}
    	});
    }
   ```

1.  Lambda デプロイパッケージを作成する 

   ```
   zip AfterAllowTestTraffic.zip AfterAllowTestTraffic.js 
   ```

1.  `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
   ```

1.  `create-function` のレスポンスにある Lambda 関数の ARN を書き留めます。この ARN は、次のステップで CodeDeploy デプロイの AppSpec ファイルを更新するときに使用します。