3단계: 수명 주기 후크 Lambda 함수 생성 - AWS CodeDeploy

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

3단계: 수명 주기 후크 Lambda 함수 생성

이 단원에서는 Amazon ECS 배포의 AfterAllowTestTraffic 후크에 대한 Lambda 함수를 구현합니다. Lambda 함수는 업데이트된 Amazon ECS 애플리케이션이 설치되기 전에 확인 테스트를 실행합니다. 이 튜토리얼의 경우 Lambda 함수는 Succeeded을(를) 반환합니다. 실제 배포 중에 확인 테스트는 확인 테스트의 결과에 따라 Succeeded 또는 Failed를 반환합니다. 또한 실제 배포 중에는 다른 Amazon ECS 배포 수명 주기 이벤트 후크(BeforeInstall, AfterInstall, BeforeAllowTraffic, AfterAllowTraffic) 중 하나 이상에 대한 Lambda 테스트 함수를 구현할 수 있습니다. 자세한 정보는 Amazon ECS 배포를 위한 수명 주기 이벤트 후크 목록을 참조하세요.

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

IAM 역할을 생성하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할을 선택한 후 역할 생성을 선택합니다.

  3. 다음 속성을 사용하여 역할을 만듭니다.

    • 신뢰할 수 있는 엔터티: AWS Lambda.

    • 권한:. AWSLambdaBasicExecutionRole 이렇게 하면 Lambda 함수에 로그에 쓸 수 있는 권한이 부여됩니다. CloudWatch

    • 역할 이름: lambda-cli-hook-role.

    자세한 내용은 AWS Lambda 실행 역할 생성을 참조하십시오.

  4. 생성한 역할에 codedeploy:PutLifecycleEventHookExecutionStatus 권한을 연결합니다. 이렇게 하면 Lambda 함수에 배포 중에 수명 주기 후크의 상태를 설정할 수 CodeDeploy 있는 권한이 부여됩니다. 자세한 내용은 사용 AWS Identity and Access Management 설명서PutLifecycleEventHookExecutionStatusAPI 참조의 IAM ID 권한 추가를 참조하십시오. CodeDeploy

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을 기록해 둡니다. 다음 단계에서 CodeDeploy 배포 AppSpec 파일을 업데이트할 때 이 ARN을 사용합니다.