

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 3단계: 수명 주기 후크 Lambda 함수 생성
<a name="tutorial-ecs-with-hooks-create-hooks"></a>

이 단원에서는 Amazon ECS 배포의 `AfterAllowTestTraffic` 후크에 대한 Lambda 함수를 구현합니다. Lambda 함수는 업데이트된 Amazon ECS 애플리케이션이 설치되기 전에 확인 테스트를 실행합니다. 이 튜토리얼의 경우 Lambda 함수는 `Succeeded`을(를) 반환합니다. 실제 배포 중에 확인 테스트는 확인 테스트의 결과에 따라 `Succeeded` 또는 `Failed`를 반환합니다. 또한 실제 배포 중에는 다른 Amazon ECS 배포 수명 주기 이벤트 후크(`BeforeInstall`, `AfterInstall`, `BeforeAllowTraffic`, `AfterAllowTraffic`) 중 하나 이상에 대한 Lambda 테스트 함수를 구현할 수 있습니다. 자세한 내용은 [Amazon ECS 배포를 위한 수명 주기 이벤트 후크 목록](reference-appspec-file-structure-hooks.md#reference-appspec-file-structure-hooks-list-ecs) 단원을 참조하십시오.

 Lambda 함수를 생성하려면 IAM 역할이 필요합니다. 이 역할은 CloudWatch Logs에 쓰고 CodeDeploy 수명 주기 후크의 상태를 설정할 수 있는 권한을 Lambda 함수에 부여합니다.

**IAM 역할을 생성하려면**

1. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 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 사용 설명서*의 [IAM 자격 증명 권한 추가](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console) 및 *CodeDeploy API 참조*의 [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을 기록해 둡니다. 다음 단계에서 CodeDeploy 배포의 AppSpec 파일을 업데이트할 때 이 ARN을 사용합니다.