배포하기 전에 Amazon ECS 서비스의 상태 확인
블루/그린 배포 유형은 CodeDeploy로 제어되는 블루/그린 배포 모델을 사용합니다. 이 배포 유형을 사용하면 프로덕션 트래픽을 전송하기 전에 서비스의 새로운 배포를 확인합니다. 자세한 내용은 AWS CodeDeploy 사용 설명서의 CodeDeploy란 무엇입니까?를 참조하세요.배포 전에 Amazon ECS 서비스의 상태 확인
블루/그린 배포 중 트래픽을 이동할 수 있는 세 가지 방법이 있습니다.
-
Canary: 트래픽이 두 증분으로 나뉘어 이동합니다. 나머지 트래픽이 두 번째 증분으로 이동하기 전에 첫 번째 증분에서 업데이트된 작업 세트로 이동할 트래픽 비율(%)과 간격(분)을 지정하는 사전 정의된 Canary 옵션 중에서 선택할 수 있습니다.
-
Linear: 트래픽이 동일한 증분 이동하며 각 증분 간에 시간 간격(분)이 동일합니다. 각 증분에서 이동되는 트래픽 비율(%)과 각 증분 간의 시간(분)을 지정하는 사전 정의된 Linear 옵션에서 선택할 수 있습니다.
-
All-at-once: 모든 트래픽이 원래 작업 세트에서 업데이트된 작업 세트로 모두 한 번에 이동합니다.
서비스가 블루/그린 배포 유형을 사용할 때 Amazon ECS가 사용하는 CodeDeploy의 구성 요소들은 다음과 같습니다.
- CodeDeploy 애플리케이션
-
CodeDeploy 리소스 컬렉션. 이것은 하나 이상의 배포 그룹으로 구성됩니다.
- CodeDeploy 배포 그룹
-
배포 설정. 이것은 다음과 같은 요소로 구성됩니다.
-
Amazon ECS 클러스터와 서비스
-
로드 밸런서 대상 그룹 및 리스너 정보
-
배포 롤백 전략
-
트래픽 다시 라우팅 설정
-
원래 개정 종료 설정
-
배포 구성
-
배포를 중지하도록 설정할 수 있는 CloudWatch 경보 구성
-
SNS 또는 CloudWatch Events 알림 설정
자세한 정보는 AWS CodeDeploy 사용 설명서의 배포 그룹으로 작업을 참조하세요.
-
- CodeDeploy 배포 구성
-
CodeDeploy가 배포 중 프로덕션 트래픽을 교체 작업 세트로 라우팅하는 방법을 지정합니다. 다음과 같은 사전 정의된 Linear 및 Canary 배포 구성을 사용할 수 있습니다. 사용자 정의 Linear 및 Canary 배포도 생성할 수 있습니다. 자세한 정보는 AWS CodeDeploy 사용 설명서의 배포 구성으로 작업을 참조하세요.
-
CodeDeployDefault.ECSAllAtOnce: 모든 트래픽을 업데이트된 Amazon ECS 컨테이너로 한 번에 이동합니다.
-
CodeDeployDefault.ECSLinear10PercentEvery1Minutes: 모든 트래픽이 이동할 때까지 매분 트래픽의 10%를 이동합니다.
-
CodeDeployDefault.ECSLinear10PercentEvery3Minutes: 모든 트래픽이 이동할 때까지 3분마다 트래픽의 10%를 이동합니다.
-
CodeDeployDefault.ECSCanary10Percent5Minutes: 첫 번째 증분에서 트래픽의 10%를 이동합니다. 나머지 90%는 5분 이후 배포됩니다.
-
CodeDeployDefault.ECSCanary10Percent15Minutes: 첫 번째 증분에서 트래픽의 10%를 이동합니다. 나머지 90%는 15분 이후 배포됩니다.
-
- 개정
-
개정은 CodeDeploy 애플리케이션 사양 파일(AppSpec 파일)입니다. AppSpec 파일에서 태스크 정의의 전체 ARN을 지정하고, 새 배치가 생성될 때 트래픽이 라우팅되는 대상에 해당하는 교체 작업 세트의 컨테이너 및 포트도 지정합니다. 컨테이너 이름은 태스크 정의에서 참조되는 컨테이너 이름 중 하나여야 합니다. 서비스 정의에서 네트워크 구성 또는 플랫폼 버전이 업데이트된 경우, AppSpec 파일에서도 해당 세부 정보를 지정해야 합니다. 배포 수명 주기 이벤트 중에 실행할 Lambda 함수를 지정할 수도 있습니다. Lambda 함수를 사용하면 배포 중에 테스트를 실행하고 지표를 반환할 수 있습니다. 자세한 정보는 AWS CodeDeploy 사용 설명서의 AppSpec 파일 참조를 참조하세요.
고려 사항
블루/그린 배포 유형 사용 시 고려할 몇 가지 사항들은 다음과 같습니다.
-
블루/그린 배포 유형을 사용하는 Amazon ECS 서비스가 맨 처음 생성되면 Amazon ECS 작업 세트가 생성됩니다.
-
Application Load Balancer 또는 Network Load Balancer를 사용하도록 서비스를 구성해야 합니다. 로드 밸런서의 요구 사항들은 다음과 같습니다.
-
프로덕션 트래픽을 라우팅하는 데 사용되는 로드 밸런서에 프로덕션 리스너를 추가해야 합니다.
-
테스트 트래픽을 라우팅하는 데 사용되는 로드 밸런서에는 테스트 리스너(선택 사항)를 추가해야 합니다. 테스트 리스너를 지정하면 CodeDeploy는 배포 중에 테스트 트래픽을 교체 작업 세트로 라우팅합니다.
-
프로덕션 및 테스트 리스너는 모두 동일한 로드 밸런서에 속해야 합니다.
-
로드 밸런서에 대한 대상 그룹을 정의해야 합니다. 대상 그룹은 트래픽을 프로덕션 리스너를 통해 서비스의 원래 작업 세트로 라우팅합니다.
-
Network Load Balancer를 사용하는 경우
CodeDeployDefault.ECSAllAtOnce
배포 구성만이 지원됩니다.
-
-
서비스 Auto Scaling 및 블루/그린 배포 유형을 사용하도록 구성된 서비스의 경우 배포 중에 Auto Scaling이 차단되지 않지만 일부 상황에서는 배포가 실패할 수 있습니다. 이 동작에 대한 자세한 설명은 아래와 같습니다.
-
서비스가 조정되고 배포가 시작되면 그린 작업 세트가 생성되고, CodeDeploy는 그린 작업 세트가 정상 상태에 도달하도록 최대 1시간 동안 대기하며 트래픽이 이동하지 않습니다.
-
서비스가 블루/그린 배포 중이고 조정 이벤트가 발생하면 트래픽은 5분 동안 계속 이동합니다. 서비스가 5분 이내에 정상 상태에 도달하지 않으면 CodeDeploy는 배포를 중지하고 실패로 표시합니다.
-
서비스가 블루/그린 배포 중이고 크기 조정 이벤트가 발생하면 원하는 태스크 수가 예기치 않은 값으로 설정될 수 있습니다. 이는 실행 중인 태스크 수를 현재 용량(원하는 태스크 수 계산에 사용되는 적절한 태스크 수의 2배)으로 간주하는 Auto Scaling에 의해 발생합니다.
-
-
Fargate 시작 유형이나
CODE_DEPLOY
배포 컨트롤러 유형을 사용하는 태스크는DAEMON
일정 전략을 지원하지 않습니다. -
CodeDeploy 애플리케이션 및 배포 그룹을 처음 생성할 때 다음을 지정해야 합니다.
-
로드 밸런서에 대해 두 개의 대상 그룹을 정의해야 합니다. 하나의 대상 그룹은 Amazon ECS 서비스가 생성될 때 로드 밸런서에 대해 정의된 초기 대상 그룹이어야 합니다. 두 번째 대상 그룹의 유일한 요구 사항은 서비스가 사용하는 것과 다른 로드 밸런서에 연결할 수 없다는 것입니다.
-
-
Amazon ECS 서비스에 대해 CodeDeploy 배포가 생성되면 CodeDeploy는 배포에서 교체 작업 세트(또는 그린 작업 세트)를 생성합니다. 테스트 리스너를 로드 밸런서에 추가한 경우 CodeDeploy는 테스트 트래픽을 교체 작업 세트로 라우팅합니다. 이때 모든 확인 테스트를 실행할 수 있습니다. 그런 다음, CodeDeploy는 프로덕션 트래픽을 원래 작업 세트에서 배포 그룹에 대한 트래픽 다시 라우팅 설정에 따라 교체 작업 세트로 다시 라우팅합니다.
필수 IAM 권한
블루/그린 배포는 Amazon ECS와 CodeDeploy API의 조합으로 가능합니다. 사용자는 AWS Management Console에서 또는 AWS CLI 또는 SDK를 사용하여 Amazon ECS 블루/그린 배포를 사용하기 전에 이들 서비스에 적합한 권한이 있어야 합니다.
Amazon ECS는 서비스 생성 및 업데이트를 위한 표준 IAM 권한 외에 다음과 같은 권한을 필요로 합니다. 이러한 권한은 AmazonECS_FullAccess
IAM 정책에 추가되었습니다. 자세한 내용은 AmazonECS_FullAccess 단원을 참조하십시오.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment", "sns:ListTopics", "cloudwatch:DescribeAlarms", "lambda:ListFunctions" ], "Resource": ["*"] } ] }
참고
작업과 서비스를 실행하는 데 필요한 표준 Amazon ECS 권한 이외에, 사용자는 작업에 대한 IAM 역할을 사용하기 위한 iam:PassRole
권한도 필요합니다.
CodeDeploy는 Amazon ECS API를 호출하고 Elastic Load Balancing을 수정하며 Lambda 함수를 호출하고 CloudWatch 경보를 설명할 수 있는 권한은 물론, 사용자를 대신하여 원하는 서비스 개수를 수정할 수 있는 권한도 필요합니다. 블루/그린 배포 유형을 사용하는 Amazon ECS 서비스를 생성하기 전에 IAM 역할(ecsCodeDeployRole
)을 생성해야 합니다. 자세한 내용은 Amazon ECS CodeDeploy IAM 역할 단원을 참조하십시오.
Amazon ECS 서비스 예제 생성 및 Amazon ECS 서비스 예제 업데이트 IAM 정책 예제는 사용자가 AWS Management Console에서 Amazon ECS 블루/그린 배포를 사용하는 데 필요한 권한을 보여 줍니다.