Amazon ECS 블루/그린 배포 생성
Amazon RDS 블루/그린 배포를 사용하면 프로덕션 환경에서 구현하기 전에 서비스를 변경하고 해당 변경 내용을 테스트할 수 있습니다.
사전 조건
블루/그린 배포를 시작하기 전에 다음 작업을 수행합니다.
-
적절한 권한을 구성하세요.
-
Elastic Load Balancing 권한에 대한 자세한 내용은 로드 밸런서에 대한 Amazon ECS 인프라 IAM 역할 섹션을 참조하세요.
-
Lambda 권한에 대한 자세한 내용은 Amazon ECS 블루/그린 배포에서 Lambda 함수에 필요한 권한 섹션을 참조하세요.
-
-
Amazon ECS 블루/그린 배포에서는 서비스가 다음 기능 중 하나를 사용해야 합니다. 적절한 리소스를 구성하세요.
-
Application Load Balancer - 자세한 내용은 블루/그린 배포에 대한 Application Load Balancer 리소스 섹션을 참조하세요.
-
Network Load Balancer - 자세한 내용은 Amazon ECS 블루/그린 배포에 대한 Network Load Balancer 리소스 섹션을 참조하세요.
-
Service Connect - 자세한 내용은 Amazon ECS 블루/그린 배포에 대한 Service Connect 리소스 섹션을 참조하세요.
-
-
그린 서비스 개정으로 트래픽을 라우팅하는 규칙을 생성하세요. 자세한 내용은 Network Load Balancer 사용 설명서의 리스너 규칙을 참조하세요.
-
그린 서비스 개정에 대한 대상 그룹을 생성하세요. 태스크에서
awsvpc
네트워크 모드를 사용하는 경우 대상 유형은ip
여야 합니다. 대상 그룹에 대한 자세한 내용은 Network Load Balancer 사용 설명서의 대상 그룹을 참조하세요. -
수명 주기 이벤트에 대해 Lambda 함수를 실행할지를 결정하세요.
-
사전 스케일 업
-
스케일 업 이후
-
트래픽 전환 테스트
-
트래픽 전환 테스트 이후
-
프로덕션 트래픽 전환
-
프로덕션 트래픽 전환 이후
각 수명 주기 이벤트에 대한 Lambda 함수를 생성하세요. 자세한 내용은 AWS Lambda 개발자 안내서의 콘솔로 Lambda 함수 생성을 참조하세요.
-
절차
콘솔 또는 AWS CLI를 사용하여 Amazon ECS 블루/그린 서비스를 생성할 수 있습니다.
- Console
-
https://console.aws.amazon.com/ecs/v2
에서 콘솔을 엽니다. -
서비스를 시작할 리소스를 결정합니다.
서비스 시작 단계 클러스터
-
클러스터 페이지에서 서비스를 생성할 클러스터를 선택합니다.
클러스터 세부 정보 페이지가 표시됩니다.
-
서비스(Services) 탭에서 생성(Create)을 선택합니다.
태스크 정의 -
태스크 정의 페이지에서 태스크 정의를 선택하세요.
-
배포 메뉴에서 서비스 생성을 선택하세요.
서비스 생성 페이지가 표시됩니다.
-
-
서비스 세부 정보에서 다음을 수행합니다.
-
태스크 정의에서 사용할 태스크 정의 패밀리 및 개정을 선택하세요. 그런 다음 태스크 정의 개정에 사용할 개정을 입력하세요.
-
서비스 이름(Service name)에 서비스의 이름을 입력합니다.
-
-
기존 클러스터에서 서비스를 실행하려면 기존 클러스터에서 클러스터를 선택하세요. 새 클러스터에서 서비스를 실행하려면 클러스터 생성을 선택하세요.
-
클러스터 인프라에 태스크를 배포하는 방식을 선택합니다. 컴퓨팅 구성에서 옵션을 선택합니다.
컴퓨팅 옵션 단계 용량 제공자 전략
-
컴퓨팅 옵션에서 용량 공급자 전략을 선택합니다.
-
전략을 선택합니다.
-
클러스터의 기본 용량 공급자 전략을 사용하려면 클러스터 기본값 사용(Use cluster default)을 선택합니다.
-
클러스터에 기본 용량 공급자 전략이 없거나 사용자 지정 전략을 사용하려면 사용자 지정 사용, 용량 공급자 전략 추가를 선택하고 기본, 용량 공급자 및 가중치를 지정하여 사용자 지정 용량 공급자 전략을 정의합니다.
-
참고
전략에서 용량 공급자를 사용하려면 용량 공급자가 클러스터와 연결되어야 합니다.
시작 유형 -
컴퓨팅 옵션(Compute options) 섹션에서 시작 유형(Launch type)을 선택합니다.
-
시작 유형(Launch type)에서 시작 유형을 선택합니다.
-
(선택 사항) Fargate 시작 유형이 지정되면 플랫폼 버전(Platform version)에서 사용할 플랫폼 버전을 지정합니다. 플랫폼 버전을 지정하지 않으면
LATEST
플랫폼 버전이 사용됩니다.
-
-
배포 구성에서 다음을 수행합니다.
-
서비스 유형에서 복제본을 선택하세요.
-
원하는 작업(Desired tasks)에 서비스에서 시작 및 유지 관리할 작업 수를 입력합니다.
-
Amazon ECS에서 가용 영역 전체의 태스크 분산을 모니터링하고 불균형이 있을 때 재분산하려면 가용 영역 서비스 리밸런싱에서 가용 영역 서비스 리밸런싱을 선택하세요.
-
상태 확인 유예 기간에 태스크가 처음 시작된 후 서비스 스케줄러가 비정상 Elastic Load Balancing, VPC Lattice, 컨테이너 상태 확인을 무시하는 시간(초)을 입력하세요. 상태 확인 유예 기간 값을 지정하지 않으면 기본값인 0이 사용됩니다.
-
-
-
베이크 소요 시간에 블루 개정이 종료되기 전에 블루 및 그린 서비스 개정이 동시에 실행되는 시간(분)을 입력하세요. 이를 통해 확인 및 테스트 시간을 확보할 수 있습니다.
-
(선택 사항) 배포의 특정 단계에서 실행할 Lambda 함수를 실행하세요. 배포 수명 주기 후크에서 수명 주기 후크를 실행할 단계를 선택하세요.
수명 주기 후크를 추가하는 방법:
-
추가를 선택합니다.
-
Lambda 함수에서 함수 이름 또는 ARN을 입력하세요.
-
역할에서 Lambda 함수를 간접 호출할 권한이 있는 IAM 역할을 선택하세요.
-
수명 주기 단계에서 Lambda 함수를 실행해야 하는 단계를 선택하세요.
-
-
-
Amazon ECS에서 배포 오류를 탐지 및 처리하는 방법을 구성하려면 배포 오류 탐지(Deployment failure detection)를 펼친 다음, 옵션을 선택합니다.
-
작업을 시작할 수 없을 때 배포를 중지하려면 Use the Amazon ECS deployment circuit breaker(Amazon ECS 배포 회로 차단기 사용)를 선택합니다.
배포 회로 차단기가 배포를 실패한 상태로 설정했을 때 소프트웨어가 마지막으로 완료한 배포로 자동 롤백하도록 하려면 실패 시 롤백을 선택합니다.
-
애플리케이션 지표를 기반으로 배포를 중지하려면 CloudWatch 경보 사용을 선택합니다. 그런 다음, CloudWatch 경보 이름에서 경보를 선택합니다. 새 경보를 생성하려면 CloudWatch 콘솔을 이동합니다.
CloudWatch 경보가 배포를 실패한 상태로 설정할 때 소프트웨어가 마지막으로 완료한 배포 상태로 자동 롤백하도록 하려면 실패 시 롤백을 선택합니다.
-
-
(선택 사항) Service Connect를 사용하여 서비스를 상호 연결하려면 Service Connect를 확장한 후 다음을 지정하세요.
-
Service Connect 켜기를 선택합니다.
-
Service Connect configuration(Service Connect 구성)에서 클라이언트 모드를 지정합니다.
-
서비스에서 네임스페이스의 다른 서비스에만 연결하면 되는 네트워크 클라이언트 애플리케이션을 실행하는 경우 클라이언트 측만을 선택합니다.
-
서비스가 네트워크 또는 웹 서비스 애플리케이션을 실행하고 이 서비스에 대한 엔드포인트를 제공해야 하며, 네임스페이스의 다른 서비스에 연결해야 하는 경우 Client and server(클라이언트 및 서버)를 선택합니다.
-
-
기본 클러스터 네임스페이스가 아닌 네임스페이스를 사용하려면 Namespace(네임스페이스)에서 서비스 네임스페이스를 선택합니다.
-
(선택 사항) 블루/그린 배포에 대한 테스트 트래픽 헤더 규칙을 구성하세요. 테스트 트래픽 라우팅에서 다음을 지정하세요.
-
테스트 중에 특정 요청을 그린 서비스 개정으로 라우팅하려면 테스트 트래픽 헤더 규칙 활성화를 선택하세요.
-
헤더 일치 규칙에서 테스트 트래픽 라우팅 기준을 구성하세요.
-
헤더 이름: 일치시킬 HTTP 헤더의 이름을 입력합니다(예:
X-Test-Version
또는User-Agent
). -
일치 유형: 일치 기준을 선택합니다.
-
정확한 일치: 헤더 값이 지정된 값과 정확히 일치하는 요청을 라우팅합니다.
-
헤더 있음: 값에 관계없이 지정된 헤더를 포함하는 라우팅 요청
-
패턴 일치: 헤더 값이 지정된 패턴과 일치하는 요청 라우팅
-
-
헤더 값(정확한 일치 또는 패턴 일치를 사용하는 경우): 일치시킬 값 또는 패턴을 입력합니다.
여러 헤더 일치 규칙을 추가하여 복잡한 라우팅 로직을 생성할 수 있습니다. 구성된 규칙과 일치하는 요청은 테스트를 위해 그린 서비스 개정으로 라우팅됩니다.
-
-
헤더 규칙 추가를 선택하여 추가 헤더 일치 조건을 구성하세요.
참고
테스트 트래픽 헤더 규칙을 사용하면 전체 배포를 완료하기 전에 트래픽을 제어하며 새 기능을 검증할 수 있습니다. 이를 통해 블루 서비스 개정으로 정상적인 트래픽 흐름을 유지하면서 특정 요청(예: 내부 테스트 도구 또는 베타 사용자의 요청)으로 그린 서비스 개정을 테스트할 수 있습니다.
-
-
(선택 사항) 로그 구성을 지정합니다. 로그 수집 사용을 선택합니다. 기본 옵션은 CloudWatch Logs로 컨테이너 로그를 전송합니다. 다른 로그 드라이버 옵션은 AWS FireLens를 사용하여 구성됩니다. 자세한 정보는 Amazon ECS 로그를 AWS 서비스 또는 AWS Partner로 전송을 참조하세요.
다음은 각 컨테이너 로그 대상에 대한 자세한 설명입니다.
-
Amazon CloudWatch - CloudWatch Logs로 컨테이너 로그를 전송하도록 작업을 구성합니다. 사용자를 대신하여 CloudWatch 로그 그룹을 생성하는 기본 로그 드라이버 옵션이 제공됩니다. 다른 로그 그룹 이름을 지정하려면 드라이버 옵션 값을 변경합니다.
-
Amazon Data Firehose - Firehose로 컨테이너 로그를 전송하도록 작업을 구성합니다. Firehose 전송 스트림으로 로그를 전송하는 기본 로그 드라이버 옵션이 제공됩니다. 다른 전송 스트림 이름을 지정하려면 드라이버 옵션 값을 변경합니다.
-
Amazon Kinesis Data Streams - Kinesis Data Streams로 컨테이너 로그를 전송하도록 작업을 구성합니다. Kinesis Data Streams 스트림으로 로그를 전송하는 기본 로그 드라이버 옵션이 제공됩니다. 다른 스트림 이름을 지정하려면 드라이버 옵션 값을 변경합니다.
-
Amazon OpenSearch Service - OpenSearch Service 도메인으로 컨테이너 로그를 전송하도록 작업을 구성합니다. 로그 드라이버 옵션이 제공되어야 합니다.
-
Amazon S3 - Amazon S3 버킷으로 컨테이너 로그를 전송하도록 작업을 구성합니다. 기본 로그 드라이버 옵션이 제공되지만 유효한 Amazon S3 버킷 이름을 지정해야 합니다.
-
-
-
(선택 사항) 블루/그린 배포를 위한 로드 밸런싱을 구성하세요.
Elastic Load Balancing 유형 단계 Application Load Balancer
-
로드 밸런서 유형으로 Application Load Balancer를 선택하세요.
-
새 로드 밸런서 생성(Create a new load balancer)을 선택하여 새 Application Load Balancer를 생성하거나 기존 로드 밸런서 사용(Use an existing load balancer)을 선택하여 기존 Application Load Balancer를 선택합니다.
-
컨테이너에서 서비스를 호스팅할 컨테이너를 선택하세요.
-
로드 밸런스 이름(Load balancer name)의 고유 이름을 입력합니다.
-
리스너(Listener)에서 Application Load Balancer에 대해 연결 요청을 수신할 포트 및 프로토콜을 입력합니다. 기본적으로 로드 밸런서는 포트 80과 HTTP를 사용하도록 구성됩니다.
-
프로덕션 규칙에 규칙의 평가 순서 및 경로 패턴을 입력하세요.
이 규칙은 프로덕션(블루) 서비스 개정 트래픽에 적용됩니다.
-
테스트 규칙에 규칙의 평가 순서 및 경로 패턴을 입력하세요.
이 규칙은 테스트(그린) 서비스 개정 트래픽에 적용됩니다.
-
-
대상 그룹에서 다음을 구성하세요.
-
대상 그룹 이름(Target group name)에 Application Load Balancer에서 요청을 라우팅할 대상 그룹에 대한 이름과 프로토콜을 입력합니다.
-
프로토콜에서 Application Load Balancer가 요청을 라우팅하는 대상 그룹의 프로토콜을 선택하세요. 기본적으로 대상 그룹은 태스크 정의에 정의된 첫 번째 컨테이너로 요청을 라우팅합니다.
-
등록 취소 지연에 로드 밸런서가 대상 상태를
UNUSED
로 변경하는 데 걸리는 시간(초)을 입력합니다. 기본값은 300초입니다. -
상태 확인 경로(Health check path)에서 Application Load Balancer가 Application Load Balancer와 컨테이너 간의 연결 상태를 확인하기 위해 주기적으로 요청을 보내야 하는 컨테이너 내에 존재하는 경로를 입력합니다. 기본값은 루트 디렉터리입니다(
/
). -
대체 그룹 이름에 테스트(그린) 서비스 개정의 대상 그룹에 대한 그룹 이름을 입력하세요.
-
Network Load Balancer -
로드 밸런서 유형(Load balancer type)에서 Network Load Balancer를 선택합니다.
-
Load Balancer에서 기존 Network Load Balancer를 선택합니다.
-
부하를 분산할 컨테이너 선택(Choose container to load balance)에서 서비스를 호스팅할 컨테이너를 선택합니다.
-
프로덕션 리스너에서 프로덕션 리스너 포트 및 프로덕션 리스너 프로토콜을 선택하세요.
프로덕션(블루) 서비스 개정 트래픽의 리스너입니다.
-
테스트 리스너에서 테스트 리스너 포트 및 테스트 리스너 프로토콜을 선택하세요.
테스트(그린) 서비스 개정 트래픽의 리스너입니다.
-
대상 그룹에서 다음을 구성하세요.
-
Target group name(대상 그룹 이름)에 Network Load Balancer에서 요청을 라우팅할 대상 그룹에 대한 이름과 프로토콜을 입력합니다.
-
프로토콜에서 Network Load Balancer가 요청을 라우팅하는 대상 그룹의 프로토콜을 선택하세요. 기본적으로 대상 그룹은 태스크 정의에 정의된 첫 번째 컨테이너로 요청을 라우팅합니다.
-
등록 취소 지연에 로드 밸런서가 대상 상태를
UNUSED
로 변경하는 데 걸리는 시간(초)을 입력합니다. 기본값은 300초입니다. -
상태 확인 경로(Health check path)에서 Application Load Balancer가 Application Load Balancer와 컨테이너 간의 연결 상태를 확인하기 위해 주기적으로 요청을 보내야 하는 컨테이너 내에 존재하는 경로를 입력합니다. 기본값은 루트 디렉터리입니다(
/
). -
대체 그룹 이름에 테스트(그린) 서비스 개정의 대상 그룹에 대한 그룹 이름을 입력하세요.
-
-
-
(선택 사항) 서비스와 태스크를 식별하려면 태그(Tags) 섹션을 펼친 다음, 태그를 구성합니다.
Amazon ECS에서 새로 시작된 모든 작업에 클러스터 이름과 작업 정의 태그를 자동으로 지정하도록 하려면 Amazon ECS 관리형 태그 켜기를 선택한 다음 작업 전파 시작에서 작업 정의를 선택합니다.
Amazon ECS에서 새로 시작된 모든 작업에 클러스터 이름과 서비스 태그를 자동으로 지정하도록 하려면 Amazon ECS 관리형 태그 켜기를 선택한 다음 작업 전파 시작에서 서비스를 선택합니다.
태그를 추가하거나 제거합니다.
-
[태그 추가] 새로운 태그(Add tag)를 선택하고 다음을 수행합니다.
-
키에서 키 이름을 입력합니다.
-
값에 키 값을 입력합니다.
-
-
[태그 제거] 태그 옆에 있는 태그 제거를 선택합니다.
-
-
생성(Create)을 선택합니다.
- AWS CLI
-
-
다음 콘텐츠가 포함된
service-definition.json
이라는 파일을 생성합니다.모든
사용자 입력
을 사용자의 값으로 바꿉니다.{ "serviceName": "
myBlueGreenService
", "cluster": "arn:aws:ecs:us-west-2:123456789012:cluster/sample-fargate-cluster
", "taskDefinition": "sample-fargate:1
", "desiredCount": 5, "launchType": "FARGATE", "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "subnet-09ce6e74c116a2299
", "subnet-00bb3bd7a73526788
", "subnet-0048a611aaec65477
" ], "securityGroups": [ "sg-09d45005497daa123
" ], "assignPublicIp": "ENABLED" } }, "deploymentController": { "type": "ECS" }, "deploymentConfiguration": { "strategy": "BLUE_GREEN", "maximumPercent": 200, "minimumHealthyPercent": 100, "bakeTimeInMinutes": 2, "alarms": { "alarmNames": [ "myAlarm" ], "rollback": true, "enable": true }, "lifecycleHooks": [ { "hookTargetArn": "arn:aws:lambda:us-west-2:7123456789012:function:checkExample
", "roleArn": "arn:aws:iam::123456789012:role/ECSLifecycleHookInvoke
", "lifecycleStages": [ "PRE_SCALE_UP" ] } ] }, "loadBalancers": [ { "targetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/blue-target-group/54402ff563af1197
", "containerName": "fargate-app
", "containerPort": 80, "advancedConfiguration": { "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/green-target-group/cad10a56f5843199
", "productionListenerRule": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-blue-green-demo/32e0e4f946c3c05b/9cfa8c482e204f7d/831dbaf72edb911
", "roleArn": "arn:aws:iam::123456789012:role/LoadBalancerManagementforECS
" } } ] } -
create-service
을(를) 실행합니다.모든
사용자 입력
을 사용자의 값으로 바꿉니다.aws ecs create-service --cli-input-json file://service-definition.json
또는 로드 밸런서 구성으로 블루/그린 배포 서비스를 생성하는 다음 예제를 사용할 수 있습니다.
aws ecs create-service \ --cluster "
arn:aws:ecs:us-west-2:123456789012:cluster/MyCluster
" \ --service-name "blue-green-example-service" \ --task-definition "nginxServer:1" \ --launch-type "FARGATE" \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12345
,subnet-67890
,subnet-abcdef
,subnet-fedcba
],securityGroups=[sg-12345
],assignPublicIp=ENABLED}" \ --desired-count 3 \ --deployment-controller "type=ECS" \ --deployment-configuration "strategy=BLUE_GREEN,maximumPercent=200,minimumHealthyPercent=100,bakeTimeInMinutes=0" \ --load-balancers "targetGroupArn=arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/MyBGtg1/abcdef1234567890
,containerName=nginx,containerPort=80,advancedConfiguration={alternateTargetGroupArn=arn:aws:elasticloadbalancing:us-west-2:123456789012
:targetgroup/MyBGtg2/0987654321fedcba
,productionListenerRule=arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/MyLB/1234567890abcdef/1234567890abcdef
,roleArn=arn:aws:iam::123456789012:role/ELBManagementRole
}"
-
다음 단계
배포를 시작하도록 서비스를 업데이트합니다. 자세한 내용은 Amazon ECS 서비스 업데이트 섹션을 참조하세요.
-
배포 프로세스를 모니터링하여 블루/그린 패턴을 따르는지 확인합니다.
-
그린 서비스 개정이 생성되고 스케일 업됨
-
테스트 트래픽이 그린 개정으로 라우팅됨(구성된 경우)
-
프로덕션 트래픽이 그린 개정으로 전환됨
-
베이크 소요 시간이 지나면 블루 개정이 종료됨
-