CodeDeploy를 사용한 블루/그린 배포 - Amazon Elastic Container Service

CodeDeploy를 사용한 블루/그린 배포

블루/그린 배포 유형은 CodeDeploy로 제어되는 블루/그린 배포 모델을 사용합니다. 이 배포 유형을 사용하면 프로덕션 트래픽을 전송하기 전에 서비스의 새로운 배포를 확인할 수 있습니다. 자세한 정보는 AWS CodeDeploy 사용 설명서CodeDeploy란 무엇인가요?를 참조하세요.

블루/그린 배포 중 트래픽을 이동할 수 있는 방법은 3가지가 있습니다.

  • Canary — 트래픽이 2증분씩 이동합니다. 나머지 트래픽이 두 번째 증분으로 이동하기 전에 첫 번째 증분에서 업데이트된 작업 세트로 이동할 트래픽 비율(%)과 간격(분)을 지정하는 사전 정의된 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.ECSLinear10PercentEvery1Minutes

모든 트래픽이 이동될 때까지 트래픽의 10%를 1분마다 이동합니다.

CodeDeployDefault.ECSLinear10PercentEvery3Minutes

모든 트래픽이 이동될 때까지 트래픽의 10%를 3분마다 이동합니다.

CodeDeployDefault.ECSCanary10percent5Minutes

첫 번째 증분에 트래픽의 10%를 이동합니다. 나머지 90%는 5분 이후 배포됩니다.

CodeDeployDefault.ECSCanary10percent15Minutes

첫 번째 증분에 트래픽의 10%를 이동합니다. 나머지 90%는 15분 이후 배포됩니다.

CodeDeployDefault.ECSAllAtOnce

모든 트래픽을 업데이트된 Amazon ECS 컨테이너로 한 번에 이동합니다.

개정

개정은 CodeDeploy 애플리케이션 사양 파일(AppSpec 파일)입니다. AppSpec 파일에서 태스크 정의의 전체 ARN을 지정하고, 새 배치가 생성될 때 트래픽이 라우팅되는 대상에 해당하는 교체 작업 세트의 컨테이너 및 포트도 지정합니다. 컨테이너 이름은 태스크 정의에서 참조되는 컨테이너 이름 중 하나여야 합니다. 서비스 정의에서 네트워크 구성 또는 플랫폼 버전이 업데이트된 경우, AppSpec 파일에서도 해당 세부 정보를 지정해야 합니다. 배포 수명 주기 이벤트 중에 실행할 Lambda 함수를 지정할 수도 있습니다. Lambda 함수를 사용하면 배포 중에 테스트를 실행하고 지표를 반환할 수 있습니다. 자세한 정보는 AWS CodeDeploy 사용 설명서AppSpec 파일 참조를 참조하세요.

블루/그린 배포 고려 사항

블루/그린 배포 유형 사용 시 고려할 몇 가지 사항들은 다음과 같습니다.

  • 블루/그린 배포 유형을 사용하는 Amazon ECS 서비스가 맨 처음 생성되면 Amazon ECS 작업 세트가 생성됩니다.

  • Application Load Balancer 또는 Network Load Balancer를 사용하도록 서비스를 구성해야 합니다. Classic Load Balancer는 지원되지 않습니다. 로드 밸런서의 요구 사항들은 다음과 같습니다.

    • 프로덕션 트래픽을 라우팅하는 데 사용되는 로드 밸런서에 프로덕션 리스너를 추가해야 합니다.

    • 테스트 트래픽을 라우팅하는 데 사용되는 로드 밸런서에는 테스트 리스너(선택 사항)를 추가해야 합니다. 테스트 리스너를 지정하면 CodeDeploy는 배포 중에 테스트 트래픽을 교체 작업 세트로 라우팅합니다.

    • 프로덕션 및 테스트 리스너는 모두 동일한 로드 밸런서에 속해야 합니다.

    • 로드 밸런서에 대한 대상 그룹을 정의해야 합니다. 대상 그룹은 트래픽을 프로덕션 리스너를 통해 서비스의 원래 작업 세트로 라우팅합니다.

    • Network Load Balancer를 사용하는 경우 CodeDeployDefault.ECSAllAtOnce 배포 구성만이 지원됩니다.

  • 서비스 자동 크기 조정 및 블루/그린 배포 유형을 사용하도록 구성된 서비스의 경우 배포 중에 자동 크기 조정이 차단되지 않지만 일부 상황에서는 배포가 실패할 수 있습니다. 이 동작에 대한 자세한 설명은 아래와 같습니다.

    • 서비스가 조정되고 배포가 시작되면 그린 작업 세트가 생성되고, CodeDeploy는 그린 작업 세트가 정상 상태에 도달하도록 최대 1시간 동안 대기하며 트래픽이 이동하지 않습니다.

    • 서비스가 블루/그린 배포 중이고 조정 이벤트가 발생하면 트래픽은 5분 동안 계속 이동합니다. 서비스가 5분 이내에 정상 상태에 도달하지 않으면 CodeDeploy는 배포를 중지하고 실패로 표시합니다.

    • 서비스가 블루/그린 배포 중이고 크기 조정 이벤트가 발생하면 원하는 태스크 수가 예기치 않은 값으로 설정될 수 있습니다. 이는 실행 중인 태스크 수를 현재 용량(원하는 태스크 수 계산에 사용되는 적절한 태스크 수의 2배)으로 간주하는 Auto Scaling에 의해 발생합니다.

  • Fargate 시작 유형이나 CODE_DEPLOY 배포 컨트롤러 유형을 사용하는 태스크는 DAEMON 일정 전략을 지원하지 않습니다.

  • CodeDeploy 애플리케이션 및 배포 그룹을 처음 생성할 때 다음을 지정해야 합니다.

    • 로드 밸런서에 대해 두 개의 대상 그룹을 정의해야 합니다. 하나의 대상 그룹은 Amazon ECS 서비스가 생성될 때 로드 밸런서에 대해 정의된 초기 대상 그룹이어야 합니다. 두 번째 대상 그룹의 유일한 요구 사항은 서비스가 사용하는 것과 다른 로드 밸런서에 연결할 수 없다는 것입니다.

  • Amazon ECS 서비스에 대해 CodeDeploy 배포가 생성되면 CodeDeploy는 배포에서 교체 작업 세트(또는 그린 작업 세트)를 생성합니다. 테스트 리스너를 로드 밸런서에 추가한 경우 CodeDeploy는 테스트 트래픽을 교체 작업 세트로 라우팅합니다. 이때 모든 확인 테스트를 실행할 수 있습니다. 그런 다음, CodeDeploy는 프로덕션 트래픽을 원래 작업 세트에서 배포 그룹에 대한 트래픽 다시 라우팅 설정에 따라 교체 작업 세트로 다시 라우팅합니다.

Amazon ECS 콘솔 환경

Amazon ECS 콘솔의 서비스 생성 및 서비스 업데이트 워크플로는 블루/그린 배포를 지원합니다.

블루/그린 배포 유형을 사용하는 Amazon ECS 서비스를 만들려면 Amazon ECS 서비스 생성 섹션을 참조하세요.

블루/그린 배포 유형을 사용하는 기존 Amazon ECS 서비스를 업데이트하려면 서비스 업데이트하기 섹션을 참조하세요.

Amazon ECS 콘솔을 사용하여 블루/그린 배포 유형으로 Amazon ECS 서비스를 생성할 때, Amazon ECS 작업 세트와 다음의 CodeDeploy 리소스가 다음과 같은 기본 설정으로 자동 생성됩니다.

리소스

기본 설정

애플리케이션 이름

AppECS-<cluster[:47]>-<service[:47]>

배포 그룹 이름

DgpECS-<cluster[:47]>-<service[:47]>

배포 그룹 로드 밸런서 정보

로드 밸런서 프로덕션 리스너, 테스트 리스너(선택 사항) 및 지정된 대상 그룹은 배포 그룹 구성에 추가됩니다.

트래픽 다시 라우팅 설정

트래픽 다시 라우팅 – 기본 설정은 즉시 트래픽 다시 라우팅(Reroute traffic immediately)입니다. CodeDeploy 콘솔에서 또는 TrafficRoutingConfig를 업데이트하여 변경할 수 있습니다. 자세한 정보는 AWS CodeDeploy API 참조CreateDeploymentConfig를 참조하세요.

원래 개정 종료 설정

원본 수정 종료 설정은 블루 작업 세트를 종료하기 전에 트래픽이 다시 라우팅된 후 1시간 동안 대기하도록 구성됩니다.

배포 구성

기본적으로 배포 구성은 블루 작업 세트에서 그린 작업 세트로 한 번에 모든 트래픽을 라우팅하는 CodeDeployDefault.ECSAllAtOnce로 설정됩니다. 배포 구성은 서비스가 생성된 후 AWS CodeDeploy 콘솔을 사용하여 변경할 수 있습니다.

자동 롤백 구성

배포가 실패하면 자동 롤백 설정이 배포를 롤백하도록 구성됩니다.

블루/그린 배포 유형을 사용하여 Amazon ECS 서비스의 세부 정보를 보려면 Amazon ECS 콘솔에서 배포(Deployments)탭을 사용합니다.

CodeDeploy 콘솔에서 CodeDeploy 배포 그룹의 세부 정보를 보려면 AWS CodeDeploy 사용 설명서CodeDeploy를 사용하여 배포 그룹 세부 정보 보기를 참조하세요.

CodeDeploy 콘솔에서 CodeDeploy 배포 그룹에 대한 설정을 수정하려면 AWS CodeDeploy 사용 설명서CodeDeploy를 사용하여 배포 그룹 설정 변경을 참조하세요.

AWS CloudFormation에 블루/그린 배포 수행에 대한 지원이 추가되었습니다. 자세한 정보는 AWS CloudFormation 사용 설명서AWS CloudFormation을 사용하여 CodeDeploy를 통한 Amazon ECS 블루/그린 배포 수행을 참조하세요.

블루/그린 배포에 필요한 IAM 권한

Amazon ECS 블루/그린 배포는 Amazon ECS와 CodeDeploy API의 조합으로 가능합니다. IAM 사용자는 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 역할을 사용하기 위한 iam:PassRole 권한도 필요합니다.

CodeDeploy는 Amazon ECS API를 호출하고 Elastic Load Balancing을 수정하며 Lambda 함수를 호출하고 CloudWatch 경보를 설명할 수 있는 권한은 물론, 사용자를 대신하여 원하는 서비스 개수를 수정할 수 있는 권한도 필요합니다. 블루/그린 배포 유형을 사용하는 Amazon ECS 서비스를 생성하기 전에 IAM 역할(ecsCodeDeployRole)을 생성해야 합니다. 자세한 정보는 Amazon ECS CodeDeploy IAM 역할 섹션을 참조하세요.

서비스 생성 예제서비스 업데이트 예제 IAM 정책 예제는 IAM 사용자가 AWS Management Console에서 Amazon ECS 블루/그린 배포를 사용하는 데 필요한 권한을 보여 줍니다.