AWS CloudFormation에서 Amazon Elastic Container Service(Amazon ECS) 블루/그린 배포를 구성할 때 오류가 발생합니다.
해결 방법
CloudFormation에서 AWS::CodeDeploy::BlueGreen 후크를 사용하는 경우 오류 메시지가 표시될 수 있습니다. 오류를 해결하려면 해당 해결 방법 섹션을 따르십시오.
구문 분석 실패 오류
권한을 부여하지 않거나 템플릿에 Weight 속성을 포함하지 않으면 AWS CodeDeploy가 제공된 템플릿 후크 섹션을 구문 분석하지 못합니다. 다음과 같은 오류 메시지가 표시됩니다.
"'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: Internal Failure"
블루/그린 배포를 활성화하는 변경 세트를 만들 때는 CloudFormation 서비스 AWS Identity and Access Management(IAM) 역할을 CloudFormation 스택에 연결해야 합니다. 이 오류를 해결하려면 서비스 역할에 스택 작업을 실행할 권한을 부여하십시오.
참고: CodeDeploy가 스택을 생성한 후에는 스택에서 서비스 역할을 제거할 수 없습니다.
ForwardConfig 속성을 포함하도록 DefaultAction을 정의했지만 AWS::ElasticLoadBalancingV2::Listener 리소스 유형에 Weight 속성을 포함하지 않은 경우, CodeDeploy 후크가 실패합니다. 이 오류를 해결하려면 리소스 유형에 Weight 속성을 포함해야 합니다.
추가 리소스 오류
그린 배포를 시작하는 리소스 업데이트와 다른 리소스에 대한 업데이트를 동일한 스택 업데이트에 포함하면 다음 오류가 발생합니다.
"Additional resource diff other than Amazon ECS application related resource update is detected,CodeDeploy can't perform BlueGreen style update properly. Diff resource logical Ids: []"
이 오류를 해결하려면 다음 단계를 완료하십시오.
- 두 개의 개별 스택 업데이트 작업을 수행합니다.
참고: 하나의 스택 업데이트에는 그린 배포를 시작하는 업데이트된 리소스(AWS::ECS::TaskDefinition 및 AWS::ECS::TaskSet)만 포함해야 합니다. 두 번째 스택 업데이트에는 다른 리소스에 대한 변경 사항을 포함해야 합니다.
- CloudFormation 템플릿에서 변환 및 후크 섹션을 제거한 다음, 스택 업데이트를 수행합니다. 참고: 이 경우 CloudFormation은 그린 배포를 수행하지 않습니다.
지원되지 않는 오류
CloudFormation 템플릿의 구성 가져오기 또는 내보내기는 지원되지 않습니다. 출력을 선언하거나 Fn::ImportValue를 사용하여 Amazon ECS 블루/그린 배포를 정의하는 템플릿의 다른 스택에서 값을 가져오면 다음과 같은 오류가 발생합니다.
"Imports and exports are currently not supported on templates using hooks"
이 오류를 해결하려면 템플릿에서 가져오기나 내보내기를 사용하지 마십시오.
CodeDeploy는 동적 참조를 사용하여 타사에서 값을 검색하거나 그린 배포 중에 NoEcho 속성 정의가 없는 파라미터를 업데이트할 수 없습니다. 동적 참조를 사용하면 다음과 같은 오류가 발생할 수 있습니다.
"'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: NoEcho parameter Dynamic references is not supported in template when using AWS::CodeDeploy::BlueGreen Hook"
이 오류를 해결하려면 템플릿에서 동적 참조를 사용하지 마십시오.
테스트 리스너 오류
이미 그린 대상 그룹을 가리키는 테스트 리스너를 지정하면 CodeDeploy 후크가 실패하고 다음 오류가 발생합니다.
"'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: Replacement target group [ALBTargetGroupGreen] is already serving traffic behind listener [ALBListenerTestTraffic]"
이 오류를 해결하려면 CloudFormation 템플릿을 업로드할 때 프로덕션 및 테스트 리스너 필드의 값이 동일한지 확인하십시오.
변환 누락 오류
업데이트된 CloudFormation 템플릿에 변환 섹션을 포함하지 않으면 변환이 호출되지 않습니다. 블루/그린 리소스 논리적 ID가 변환되지 않으면 다음 오류가 발생합니다.
"'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: The submitted template's primary task definition 'BlueTaskDefinition' was never updated. The template's 'AWS::CodeDeployBlueGreen' Transform might be missing or removed"
이 오류를 해결하려면 CloudFormation 스택을 업데이트하기 전에 CloudFormation 템플릿에 변환 섹션을 포함해야 합니다.
Load Balancer 오류
TrafficRoutingconfig 유형을 AllAtOnce로 설정해야 합니다. 템플릿에 Network Load Balancer를 포함하고 AWS::CodeDeploy::BlueGreen 후크가 있으며, TrafficRoutingConfig 유형이 TimeBasedCanary 또는 TimeBasedLinear로 설정된 경우 다음 오류가 발생합니다.
"'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: Only AllAtOnce traffic routing config type is supported for network load balancers."
이 오류를 해결하려면 TrafficRoutingConfig 유형을 AllAtOnce로 설정해야 합니다.
Load Balancer의 Amazon 리소스 이름(ARN)을 파라미터로 구성하고 !Ref를 사용하여 AWS::ElasticLoadBalancingV2::Listener의 LoadBalancerArn 속성을 참조하는 경우 다음과 같은 오류가 발생할 수 있습니다.
"Transform AWS::CodeDeployBlueGreen failed with: Failed to transform template. Could not find AWS::ElasticLoadBalancingV2::LoadBalancer LoadBalancerArn"
이 오류를 해결하려면 템플릿에 Load Balancer 리소스를 만들고 LoadBalancerArn 속성에서 ARN을 참조합니다. 또는 LoadBalancerArn ARN 속성에 Load Balancer ARN을 하드코딩할 수 있습니다.
Amazon ECS 서비스 오류
Hooks Applications 속성 아래에 단일 Application Load Balancer를 공유하는 서로 다른 Amazon ECS 서비스 대상 두 개를 추가하면 다음과 같은 오류가 발생할 수 있습니다.
"'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen failed with message: Handler failed: Applications must have at most one application in AWS::CodeDeploy::BlueGreen Hook"
이 오류를 해결하려면 Application Load Balancer에 Amazon ECS 서비스를 하나만 연결해야 합니다.