Amazon ECS 배포 문제 해결 - AWS CodeDeploy

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

Amazon ECS 배포 문제 해결

대체 작업 세트를 기다리는 동안 시간 초과 발생

문제: 다음을 사용하여 Amazon ECS 애플리케이션을 배포하는 동안 다음 오류 메시지가 표시됩니다. CodeDeploy

The deployment timed out while waiting for the replacement task set to become healthy. This time out period is 60 minutes.

가능한 원인: 작업 정의 파일 또는 기타 배포 관련 파일에 오류가 있는 경우 이 오류가 발생할 수 있습니다. 예를 들어 작업 정의 파일의 image 필드에 오타가 있는 경우 Amazon ECS가 잘못된 컨테이너 이미지를 가져오려고 시도하고 계속 실패하여 이 오류가 발생합니다.

가능한 해결 방법 및 다음 단계:

  • 작업 정의 파일과 기타 파일의 오타 및 구성 문제를 해결합니다.

  • 관련 Amazon ECS 서비스 이벤트를 확인하고 대체 작업이 정상적으로 진행되지 않는 이유를 알아봅니다. Amazon ECS 이벤트에 대한 자세한 내용은 Amazon Elastic 컨테이너 서비스 개발자 안내서Amazon ECS 이벤트를 참조하세요.

  • Amazon Elastic Container Service 개발자 안내서Amazon ECS 문제 해결 섹션에서 이벤트의 메시지와 관련된 오류를 확인합니다.

알림이 계속되기를 기다리는 동안 시간 초과 발생

문제: 다음을 사용하여 Amazon ECS 애플리케이션을 배포하는 동안 다음 오류 메시지가 표시됩니다. CodeDeploy

The deployment timed out while waiting for a notification to continue. This time out period is n minutes.

가능한 원인: 배포 그룹을 생성할 때 트래픽을 언제 다시 라우팅할지 지정에 대기 시간을 지정했지만 대기 시간이 만료되기 전에 배포가 완료되지 못한 경우 이 오류가 발생할 수 있습니다.

가능한 해결 방법 및 다음 단계:

IAM 역할에 충분한 권한이 없음

문제: 다음을 사용하여 Amazon ECS 애플리케이션을 배포하는 동안 다음 오류 메시지가 표시됩니다. CodeDeploy

The IAM role role-arn does not give you permission to perform operations in the following AWS service: AWSLambda.

가능한 원인: 파일 Hooks 섹션에서 Lambda 함수를 지정했지만 Lambda 서비스에 CodeDeploy 권한을 부여하지 않은 경우 이 오류가 발생할 수 있습니다. AppSpec

가능한 해결 방법: 서비스 역할에 lambda:InvokeFunction 권한을 추가합니다. CodeDeploy 이 권한을 추가하려면 다음 AWS관리형 정책 중 하나를 AWSCodeDeployRoleForECS 또는 AWSCodeDeployRoleForECSLimited 역할에 추가합니다. 이러한 정책 및 CodeDeploy 서비스 역할에 정책을 추가하는 방법에 대한 자세한 내용은 을 참조하십시오2단계: 서비스 역할 만들기 CodeDeploy.

상태 콜백을 기다리는 동안 배포 시간 초과

문제: 다음을 사용하여 Amazon ECS 애플리케이션을 배포하는 동안 다음 오류 메시지가 표시됩니다. 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.

가능한 원인: 이 오류는 파일 Hooks 섹션에서 AppSpec Lambda 함수를 지정했지만 Lambda 함수가 또는 상태를 반환하는 PutLifecycleEventHookExecutionStatus 데 필요한 API를 호출하지 못한 경우 발생할 수 있습니다. Succeeded Failed CodeDeploy

가능한 해결 방법 및 다음 단계:

  • 파일에 지정한 Lambda 함수가 사용하는 Lambda 실행 역할에 codedeploy:putlifecycleEventHookExecutionStatus 권한을 추가합니다. AppSpec 이 권한은 Lambda 함수에 또는 의 상태를 Succeeded 반환할 수 있는 권한을 부여합니다. Failed CodeDeploy Lambda 실행 역할에 대한 자세한 내용은 AWS Lambda 사용 설명서Lambda 실행 역할을 참조하세요.

  • Lambda 함수 코드 및 실행 로그를 확인하여 Lambda 함수가 API를 CodeDeploy PutLifecycleEventHookExecutionStatus 호출하여 수명 주기 검증 테스트 또는 테스트 여부에 CodeDeploy 대해 알리고 있는지 확인하십시오. Succeeded Failed putlifecycleEventHookExecutionStatusAPI에 대한 자세한 내용은 API 참조를 참조하십시오 PutLifecycleEventHookExecutionStatus.AWS CodeDeploy Lambda 실행 로그에 대한 자세한 내용은 Amazon CloudWatch 로그 액세스를 참조하십시오. AWS Lambda

하나 이상의 수명 주기 이벤트 검증 함수가 실패하여 배포 실패

문제: 다음을 사용하여 Amazon ECS 애플리케이션을 배포하는 동안 다음 오류 메시지가 표시됩니다. CodeDeploy

The deployment failed because one or more of the lifecycle event validation functions failed.

가능한 원인: 파일 Hooks 섹션에서 Lambda 함수를 지정했지만 Lambda 함수가 호출 시 반환된 경우 이 오류가 발생할 수 있습니다. AppSpec Failed CodeDeploy PutLifecycleEventHookExecutionStatus 이 실패는 수명 주기 검증 CodeDeploy 테스트가 실패했음을 나타냅니다.

가능한 다음 단계: Lambda 실행 로그를 검토하여 검증 테스트 코드가 실패한 이유를 확인합니다. Lambda 실행 로그에 대한 자세한 내용은 Amazon CloudWatch 로그 액세스를 참조하십시오. AWS Lambda

다음 오류로 인해 ELB를 업데이트할 수 없음: 기본 작업 세트 대상 그룹은 리스너 뒤에 있어야 함

문제: 다음을 사용하여 Amazon ECS 애플리케이션을 배포하는 동안 다음 오류 메시지가 표시됩니다. CodeDeploy

The ELB could not be updated due to the following error: Primary taskset target group must be behind listener

가능한 원인: 선택적 테스트 리스너를 구성했는데 잘못된 대상 그룹으로 구성된 경우 이 오류가 발생할 수 있습니다. 의 테스트 리스너에 대한 자세한 내용은 CodeDeploy 및 을 참조하십시오. Amazon ECS 배포를 시작하기 전에 Amazon ECS 배포 중에 발생하는 일 작업 세트에 대한 자세한 TaskSet내용은 Amazon Elastic 컨테이너 서비스 API 참조describe-task-set AWS CLI명령 참조의 Amazon ECS 섹션을 참조하십시오.

가능한 해결 방법: Elastic Load Balancing의 프로덕션 리스너와 테스트 리스너가 모두 현재 워크로드를 제공하는 대상 그룹을 가리키고 있는지 확인합니다. 다음 세 곳에서 확인할 수 있습니다.

Auto Scaling을 사용할 때 때때로 배포가 실패함

문제: 에서 Auto Scaling을 CodeDeploy 사용하고 있는데 배포가 실패하는 경우가 있습니다. 이 문제의 증상에 대한 자세한 내용은 Amazon Elastic Container Service 개발자 안내서서비스 자동 크기 조정 및 블루/그린 배포 유형을 사용하도록 구성된 서비스의 경우 배포 중에 자동 크기 조정이 차단되지 않지만 일부 상황에서는 배포가 실패할 수 있습니다라는 주제를 참조하세요.

가능한 원인: 이 문제는 Auto Scaling 프로세스가 충돌하는 경우 CodeDeploy 발생할 수 있습니다.

가능한 해결 방법: RegisterScalableTarget API (또는 해당 register-scalable-target AWS CLI 명령) CodeDeploy 를 사용하여 배포하는 동안 Auto Scaling 프로세스를 일시 중단하고 재개하십시오. 자세한 내용을 알아보려면 Application Auto Scaling 사용 설명서Application Auto Scaling의 조정 일시 중지 및 재개를 참조하세요.

참고

CodeDeploy RegisterScaleableTarget직접 호출할 수 없습니다. 이 API를 사용하려면 Amazon 단순 알림 서비스 (또는 Amazon CloudWatch) 에 알림 또는 이벤트를 CodeDeploy 전송하도록 구성해야 합니다. 그런 다음 Lambda 함수를 호출하도록 Amazon SNS (또는 CloudWatch) 를 구성하고 API를 호출하도록 Lambda 함수를 구성해야 합니다. RegisterScalableTarget Auto Scaling 작업을 일시 중지하려면 SuspendedState 파라미터를 true로 설정하고, 재개하려면 false로 설정하여 RegisterScalableTarget API를 호출해야 합니다.

CodeDeploy 전송되는 알림 또는 이벤트는 배포가 시작될 때 (Auto Scaling 일시 중지 작업을 트리거하기 위해) 또는 배포가 성공, 실패 또는 중지될 때 (Auto Scaling 재개 작업을 트리거하기 위해) 발생해야 합니다.

Amazon SNS 알림 또는 CloudWatch 이벤트를 CodeDeploy 생성하도록 구성하는 방법에 대한 자세한 내용은 및 을 참조하십시오 Amazon 이벤트를 통한 배포 모니터링 CloudWatch Monitoring Deployments with Amazon SNS Event Notifications.

ALB만 점진적 트래픽 라우팅을 지원합니다. 디플로이먼트 그룹을 생성/업데이트할 때는 AllAtOnce 트래픽 라우팅을 대신 사용하십시오.

문제: 에서 배포 그룹을 만들거나 업데이트하는 동안 다음 오류 메시지가 표시됩니다. CodeDeploy

Only ALB supports gradual traffic routing, use AllAtOnce Traffic routing instead when you create/update Deployment group.

가능한 원인: Network Load Balancer를 사용 중이고 CodeDeployDefault.ECSAllAtOnce 이외의 미리 정의된 배포 구성을 사용하려고 하면 이 오류가 발생할 수 있습니다.

수정 방법:

배포에 성공했는데도 대체 작업 세트가 Elastic Load Balancing 상태 확인에 실패하고 애플리케이션이 다운됨

문제: 배포에 CodeDeploy 성공했음을 나타내는데도 대체 작업 세트가 Elastic Load Balancing의 상태 확인에 실패하고 애플리케이션이 다운되었습니다.

가능한 원인: 이 문제는 CodeDeploy all-at-once 배포를 수행했는데 교체 (녹색) 작업 세트에 Elastic Load Balancing 상태 확인이 실패하는 잘못된 코드가 포함되어 있는 경우 발생할 수 있습니다. all-at-once 배포 구성을 사용하면 트래픽이 대체 작업 세트로 이동된 후 (즉, AllowTraffic 수명 주기 이후 이벤트가 발생한 ) 로드 밸런서의 상태 확인이 교체 작업 세트에서 실행되기 시작합니다. CodeDeploy 따라서 트래픽이 이동하기 전에는 안 그렇지만 이동한 후에는 대체 작업 세트에 대한 상태 확인이 실패하게 됩니다. CodeDeploy 생성되는 라이프사이클 이벤트에 대한 자세한 내용은 을 참조하십시오. Amazon ECS 배포 중에 발생하는 일

수정 방법:

  • 배포 구성을 카나리아 또는 all-at-once 리니어로 변경하십시오. 카나리아 또는 선형 구성에서 로드 밸런서의 상태 확인은 교체 환경에 애플리케이션을 CodeDeploy 설치하는 동안, 그리고 트래픽이 이동하기 전 (즉, Install 라이프사이클 이벤트 도중과 이벤트 ) 교체 작업 세트에서 실행되기 시작합니다. AllowTraffic 애플리케이션 설치 중에 트래픽이 이동하기 전에 검사를 실행하도록 허용하면 잘못된 애플리케이션 코드가 탐지되어 애플리케이션이 공개되기 전에 배포가 실패하게 됩니다.

    Canary 또는 Linear 배포를 구성하는 방법에 대한 자세한 내용은 다음을 사용하여 배포 그룹 설정 변경 CodeDeploy 섹션을 참조하세요.

    Amazon ECS 배포 중에 실행되는 CodeDeploy 수명 주기 이벤트에 대한 자세한 내용은 을 참조하십시오Amazon ECS 배포 중에 발생하는 일.

    참고

    Canary 및 Linear 배포 구성은 Application Load Balancer에서만 지원됩니다.

  • all-at-once 배포 구성을 유지하려면 테스트 리스너를 설정하고 BeforeAllowTraffic 수명 주기 후크를 사용하여 대체 작업 세트의 상태를 확인하십시오. 자세한 정보는 Amazon ECS 배포를 위한 수명 주기 이벤트 후크 목록을 참조하세요.

배포 그룹에 여러 로드 밸런서를 연결할 수 있나요?

아니요. 여러 애플리케이션 로드 밸런서 또는 네트워크 로드 밸런서를 사용하려는 경우 블루/그린 배포 대신 CodeDeploy Amazon ECS 롤링 업데이트를 사용하십시오. 롤링 업데이트에 대한 자세한 내용은 Amazon Elastic Container Service 개발자 안내서롤링 업데이트를 참조하세요. Amazon ECS에 여러 로드 밸런서를 사용하는 방법에 대한 자세한 내용을 알아보려면 Amazon Elastic Container Service 개발자 안내서서비스에 여러 대상 그룹 등록을 참조하세요.

로드 밸런서 없이 블루/그린 배포를 수행할 CodeDeploy 수 있습니까?

아니요. 로드 밸런서가 없으면 CodeDeploy 블루/그린 배포를 수행할 수 없습니다. 로드 밸런서를 사용할 수 없는 경우 Amazon ECS의 롤링 업데이트 기능을 대신 사용하세요. Amazon ECS 롤링 업데이트에 대한 자세한 내용은 Amazon Elastic Container Service 개발자 안내서롤링 업데이트를 참조하세요.

배포 중에 새 정보로 Amazon ECS 서비스를 업데이트하려면 어떻게 해야 하나요?

배포를 수행하는 동안 Amazon ECS 서비스를 새 파라미터로 CodeDeploy 업데이트하려면 파일 resources 섹션에서 파라미터를 지정하십시오. AppSpec 에서는 작업 정의 파일 및 컨테이너 이름 파라미터와 같은 몇 가지 Amazon ECS 파라미터만 지원됩니다 CodeDeploy. 업데이트할 CodeDeploy 수 있는 Amazon ECS 파라미터의 전체 목록은 을 참조하십시오 AppSpec Amazon ECS 배포에 대한 '리소스' 섹션.

참고

에서 지원하지 않는 파라미터로 Amazon ECS 서비스를 업데이트해야 하는 경우 다음 작업을 완료하십시오. CodeDeploy

  1. 업데이트하려는 파라미터를 사용하여 Amazon ECS의 UpdateService API를 호출합니다. 업데이트할 수 있는 파라미터의 전체 목록은 Amazon Elastic 컨테이너 서비스 API 참조를 참조하십시오 UpdateService.

  2. 작업에 변경 내용을 적용하려면 새 Amazon ECS 블루/그린 배포를 생성합니다. 자세한 내용은 Amazon ECS Compute Platform 배포 생성(콘솔)을(를) 참조하세요.