블루/그린 배포 관련 정보
이 주제에서는 CloudFormation을 사용한 블루/그린 배포의 작동 방식에 대한 개요를 제공합니다. 또한 블루/그린 배포를 위해 CloudFormation 템플릿을 준비하는 방법도 설명합니다.
작동 방법
CloudFormation을 사용하여 CodeDeploy를 통해 ECS 블루/그린 배포를 수행하는 경우 사용할 트래픽 라우팅 및 안정화 설정 지정을 포함해 블루 및 그린 애플리케이션 환경 모두에 리소스를 정의하는 스택 템플릿을 먼저 생성합니다. 다음으로 해당 템플릿에서 스택을 생성합니다. 그러면 블루(현재) 애플리케이션이 생성됩니다. CloudFormation은 스택 생성 중에만 블루 리소스를 생성합니다. 그린 배포에 대한 리소스는 필요할 때까지 생성되지 않습니다.
따라서 향후 스택 업데이트에서 블루 애플리케이션의 작업 정의 또는 작업 세트 리소스를 업데이트하는 경우 CloudFormation은 다음을 수행합니다.
-
필요한 모든 그린 애플리케이션 환경 리소스 생성
-
지정된 트래픽 라우팅 파라미터를 기반으로 트래픽 이동
-
블루 리소스 삭제
그린 배포가 성공하고 완료되기 전에 오류가 발생하면 CloudFormation은 전체 그린 배포가 시작되기 전의 상태로 스택을 롤백합니다.
그린 배포를 개시하는 리소스 업데이트
특정 ECS 리소스의 특정 속성을 업데이트하는 스택 업데이트를 수행하면 CloudFormation에서 그린 배포 프로세스를 개시합니다. 이 프로세스를 개시하는 리소스는 다음과 같습니다.
하지만 이러한 리소스에 대한 업데이트에 교체가 필요한 속성 변경이 포함되지 않는 경우 그린 배포가 개시되지 않습니다. 자세한 내용은 스택 리소스의 업데이트 동작 이해 단원을 참조하십시오.
동일한 스택 업데이트에서 다른 리소스에 대한 업데이트와 함께 위의 리소스에 대한 업데이트를 포함시킬 수 없다는 점이 중요합니다. 나열된 리소스와 동일한 스택 내의 다른 리소스를 모두 업데이트해야 하는 경우 다음 두 가지 옵션을 사용할 수 있습니다.
-
두 개의 별도 스택 업데이트 작업을 수행합니다. 즉, 위의 리소스에 대한 업데이트만 포함시키는 작업과 기타 리소스에 대한 변경 사항을 포함시키는 별도의 스택 업데이트 작업을 수행합니다.
-
템플릿에서
Transform
및Hooks
섹션을 제거한 다음 스택 업데이트를 수행합니다. 이 경우 CloudFormation이 그린 배포를 수행하지 않습니다.
ECS 블루/그린 배포를 수행하기 위한 템플릿 준비
스택에서 블루/그린 배포를 활성화하려면, 스택 업데이트를 수행하기 전에 다음 섹션을 스택 템플릿에 포함시키십시오.
-
AWS::CodeDeployBlueGreen
변환에 대한 참조를 템플릿에 추가합니다."Transform": [ "AWS::CodeDeployBlueGreen" ],
-
AWS::CodeDeploy::BlueGreen
후크를 호출하고 배포에 대한 속성을 지정하는Hooks
섹션을 추가합니다. 자세한 내용은 AWS::CodeDeploy::BlueGreen 후크 구문 단원을 참조하십시오. -
Resources
섹션에서 배포에 대한 블루 및 그린 리소스를 정의합니다.
템플릿을 처음으로 생성할 때(즉, 스택 자체를 만들기 전에) 이러한 섹션을 추가하거나 스택 업데이트를 수행하기 전에 기존 템플릿에 추가할 수 있습니다. 새 스택에 블루/그린 배포를 지정하는 경우 CloudFormation은 스택 생성 중에 블루 리소스만 생성하며 그린 배포에 대한 리소스는 스택 업데이트 중에 필요할 때까지 생성되지 않습니다.
CloudFormation 리소스를 사용하여 블루/그린 배포 모델링
ECS에서 CodeDeploy 블루/그린 배포를 수행하려면 CloudFormation 템플릿에 Amazon ECS 서비스 및 로드 밸런서와 같이 배포를 모델링하는 리소스를 포함해야 합니다. 이러한 리소스 의미에 대한 자세한 내용을 알아보려면 AWS CodeDeploy 사용 설명서의 Amazon ECS 배포를 시작하기 전에를 참조하세요.
요구 사항 | 리소스 | 필수/선택 | 바뀌는 경우 블루/그린 배포 개시? |
---|---|---|---|
Amazon ECS 클러스터 | AWS::ECS::Cluster | 선택 사항. 기본 클러스터를 사용할 수 있습니다. | No |
Amazon ECS 서비스 | AWS::ECS::Service | 필수 사항입니다. | No |
애플리케이션 또는 Network Load Balancer | AWS::ECS::Service LoadBalancer | 필수 사항입니다. | No |
프로덕션 리스너 | AWS::ElasticLoadBalancingV2::Listener | 필수 사항입니다. | No |
테스트 리스너 | AWS::ElasticLoadBalancingV2::Listener | 선택 사항. | No |
대상 그룹 두 개 | AWS::ElasticLoadBalancingV2::TargetGroup | 필수 사항입니다. | No |
Amazon ECS 작업 정의 | AWS::ECS::TaskDefinition | 필수 사항입니다. | 예 |
Amazon ECS 애플리케이션의 컨테이너 | AWS::ECS::TaskDefinition ContainerDefinition Name | 필수 사항입니다. | No |
대체 작업 세트의 포트 | AWS::ECS::TaskDefinition PortMapping ContainerPort | 필수 사항입니다. | No |
변경 세트
그린 배포를 시작할 스택 업데이트를 수행하기 전에 변경 세트를 생성하는 것이 좋습니다. 이렇게 하면 스택 업데이트를 수행하기 전에 스택에 이루어질 실제 변경 사항을 확인할 수 있습니다. 리소스 변경 사항은 스택 업데이트 중에 수행되는 순서대로 나열되지 않을 수 있습니다. 자세한 내용은 변경 세트를 사용하여 CloudFormation 스택 업데이트 단원을 참조하십시오.
스택 이벤트 모니터링
Stack(스택) 페이지의 Events(이벤트) 탭에서 AWS CLI를 사용하여 ECS 배포의 각 단계에서 생성된 스택 이벤트를 볼 수 있습니다. 자세한 내용은 스택 진행 상황 모니터링 단원을 참조하십시오.
블루/그린 배포를 위한 IAM 권한
CloudFormation에서 블루-그린 배포를 성공적으로 수행하려면 다음 CodeDeploy 권한이 있어야 합니다.
-
codedeploy:Get*
-
codedeploy:CreateCloudFormationDeployment
자세한 내용은 서비스 권한 부여 참조에서 CodeDeploy에 사용되는 작업, 리소스 및 조건 키를 참조하세요.