상태 콜백을 기다리는 동안 배포 시간이 초과될 때 AWS CodeDeploy에서 수신되는 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 12월 28일

AWS CodeDeploy에서 다음 오류를 해결하고 싶습니다. "The deployment timed out while waiting for a status callback. CodeDeploy expects a status callback within one hour after a deployment hook is invoked."

간략한 설명

일반적으로, Amazon Elastic Container Service(Amazon ECS) 배포에서 여러 수명 주기 이벤트 후크에 대해 AWS Lambda 유효성 검사 테스트 함수를 생성합니다(BeforeInstall, AfterInstall, BeforeAllowTraffic, AfterAllowTraffic). 그런 다음 유효성 검사 테스트에서 성공 또는 실패 응답을 예상합니다.

그러나 AWS Lambda 함수가 기본 제한 시간인 60분 내에 CodeDeploy에 실행 상태 성공 또는 실패를 반환하지 않으면 이 오류가 발생합니다.

해결 방법

1.    AWS CloudWatch Logs의 로그 데이터를 확인하여 Lambda 함수의 실행 시간이 60분을 초과하는지 확인합니다.

2.    Lambda 실행 역할PutLifecycleEventHookExecutionStatus 권한을 연결합니다. 예를 들어, 다음과 같습니다:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "codedeploy:PutLifecycleEventHookExecutionStatus",
            "Resource": "*"
        }
    ]
}

참고: PutLifecycleEventHookExecutionStatus 권한은 AWS에 의해 관리되는 CodeDeployFullAccess AWS Identity and Access Management(IAM) 정책에는 기본적으로 포함되지 않습니다. 정책을 수동으로 연결해야 합니다.

3.    Lambda 함수에 CodeDeploy에 대한 응답을 반환하는 putLifecycleEventHookExecutionStatus 메서드가 있는지 확인합니다. 예를 들어, 다음과 같습니다:

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