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

최종 업데이트 날짜: 2022년 2월 9일

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." 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

이 문제는 CodeDeploy를 사용하여 Amazon Elastic Container Service(Amazon ECS) 서비스를 유효성 검사 테스트와 함께 배포할 때 발생할 수 있습니다.

수명 주기 이벤트 후크가 호출된 후 60분 이내에 테스트가 성공 또는 실패 응답을 반환하지 않으면 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."

참고: 수명 주기 후크 AWS Lambda 함수의 상태 콜백에 대한 기본 제한 시간은 60분입니다.

오류를 해결하려면 수명 주기 후크 Lambda 함수에 필요한 메서드와 AWS Identity and Access Management(IAM) 권한이 있는지 확인합니다.

해결 방법

CloudWatch 로그를 검토하여 오류의 원인을 확인

수명 주기 후크 Lambda 함수에 필요한 IAM 권한이 있는지 확인

수명 주기 후크 Lambda 함수에 PutLifecycleEventHookExecutionStatus 권한이 포함된 실행 역할이 있는지 확인합니다.

참고: PutLifecycleEventHookExecutionStatus 권한은 AWS 관리형 CodeDeployFullAccess IAM 정책에는 기본적으로 포함되지 않습니다.

PutLifecycleEventHookExecutionStatus 권한 문 예시

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

CodeDeploy에 상태 응답을 반환하는 데 필요한 메서드가 수명 주기 후크 Lambda 함수에 포함되어 있는지 확인합니다.

수명 주기 후크 Lambda 함수에 putLifecycleEventHookExecutionStatus 메서드가 포함되어 있는지 확인합니다.

자세한 내용은 CodeDeploy 사용 설명서의 3단계: 수명 주기 후크 Lambda 함수 생성을 참조하세요.

수명 주기 후크 Lambda 함수에 대한 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");
         }

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?