Amazon ECS에서 호스팅되는 서비스에 대해 블루/그린 배포를 수행하려면 어떻게 해야 합니까?
Amazon Elastic Container Service(Amazon ECS)에서 호스팅되는 서비스에 대해 블루/그린 배포를 수행하려고 합니다.
간략한 설명
블루/그린 배포를 수행하는 단계를 따르기 전에 다음 사항이 있는지 확인하십시오.
해결 방법
IAM 서비스 역할 생성
Amazon ECS에서 AWS CodeDeploy의 블루/그린 타입을 배포하려면 먼저 CodeDeploy 서비스에 사용자를 대신하여 ECS 서비스를 업데이트할 수 있는 권한이 있어야 합니다. 이러한 권한을 부여하려면 다음 단계를 완료하십시오.
- AWS Identity and Access Management(IAM) 콘솔을 엽니다.
- 탐색 창에서 Roles(역할)를 선택합니다.
- Create role(역할 생성)을 선택합니다.
- Select type of trusted entity(신뢰할 수 있는 주체 유형 선택) 섹션에서 AWS service(AWS 서비스)를 선택한 다음 CodeDeploy를 선택합니다.
- Select your use case(사용 사례 선택) 섹션에서 CodeDeploy - ECS를 선택하고 Next(다음)를 선택합니다.
참고: 기본 AWSCodeDeployRoleForECS 정책을 유지합니다. 이 정책에는 CodeDeploy가 Amazon ECS 및 기타 서비스와 올바르게 상호 작용하는 데 필요한 권한이 포함되어 있습니다. - Next(다음)를 선택합니다.
- Role name(역할 이름)에 ecsCodeDeployRole을 입력합니다.
- (선택 사항) 태그 추가
- Create role(역할 생성)을 선택합니다.
Application Load Balancer 생성
Application Load Balancer를 생성하려면 다음 단계를 완료하십시오.
- Amazon EC2 콘솔을 엽니다.
- 탐색 창의 Load Balancing(로드 밸런싱) 섹션에서 Load Balancers(로드 밸런서)를 선택합니다.
- Create Load Balancer(로드 밸런서 생성)를 선택합니다.
- Select load balancer type(로드 밸런서 유형 선택) 섹션에서 Application Load Balancer에 대해 Create(생성)를 선택합니다.
- Name(이름)에 로드 밸런서의 이름을 입력합니다.
- Network Mapping(네트워크 매핑) 섹션에서 Amazon ECS 클러스터가 생성된 VPC를 선택합니다. 그런 다음 인터넷에 액세스할 수 있는 서브넷 두 개를 선택합니다.
- 보안 그룹 섹션에서 "새 보안 그룹 생성" 하이퍼링크를 선택합니다.
- Security group name(보안 그룹 이름)에 Sample Security-group을 입력합니다.
- Add Rule(규칙 추가)을 선택합니다.
- Port Range(포트 범위)에 8080을 입력합니다. Source(소스)에 0.0.0.0/0을 입력합니다.
- Create Security Group(보안 그룹 생성)을 선택합니다.
- 로드 밸런서 페이지 보기에서 보안 그룹을 새로 고친 다음 새로 만든 보안 그룹을 선택합니다.
- Listeners and Routing(리스너 및 라우팅) 섹션에서 "대상 그룹 생성" 하이퍼링크를 선택합니다.
- Target type(대상 유형)에서 IP addresses(IP 주소)를 선택합니다.
- Target group(대상 그룹)에 대상 그룹의 이름을 입력합니다.
- Next(다음)를 선택한 후 대상 그룹을 등록하고 IP를 설정합니다.
- Create Target Group(대상 그룹 생성)을 선택합니다.
작업 정의 생성
다음 단계를 완료하십시오.
- Amazon ECS 콘솔을 엽니다.
- 탐색 창에서 Task Definitions(작업 정의)를 선택합니다.
- Create new Task Definition(새 작업 정의 생성)을 선택합니다.
- Fargate를 선택한 후 Next step(다음 단계)을 선택합니다.
- 작업 정의를 구성한 다음 Create(생성)를 선택합니다.
다음 예시 작업 정의는 AWS Fargate 시작 유형과 Docker Hub의 NGINX 이미지를 사용합니다.
참고: 이 예시와 다음 예시에서 account_ID 값을 해당 계정 번호로 바꾸십시오.
{ "executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole", "containerDefinitions": [ { "name": "sample-website", "image": "nginx:latest", "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "256", "memory": "512", "family": "sample-website" }
Amazon ECS 서비스 생성
다음 단계를 완료하십시오.
- Amazon ECS 콘솔을 엽니다.
- 탐색 창의 Amazon ECS에서 Clusters(클러스터)를 선택한 다음 해당 클러스터를 선택합니다.
- Services(서비스) 탭에서 Create(생성)를 선택하여 서비스를 생성합니다.
- Environment(환경) 섹션에서 Launch type(시작 유형)을 선택한 다음 FARGATE를 선택합니다.
- Task Definition(태스크 정의)에서 이전 섹션에서 생성한 작업 정의를 선택합니다.
- Service name(서비스 이름)에 서비스 이름을 입력합니다. 예를 들면 다음과 같습니다. Sample-Website.
- Number of tasks(태스크 수)에 복사하려는 작업 수를 입력합니다.
- Deployment options(배포 옵션) 섹션에서 **블루/그린 배포(AWS CodeDeploy에서 제공)**를 선택합니다.
- Service role for CodeDeploy(CodeDeploy를 위한 서비스 역할)에서 앞서 생성한 ecsCodeDeployRole 서비스 역할을 선택합니다.
- Networking(네트워킹) 섹션에서 클러스터 VPC와 서브넷, 앞서 생성한 보안 그룹을 선택합니다.
- Load balancing(로드 밸런싱) 섹션의 Load balancer(로드 밸런서) 유형에 대해 Application Load Balancer를 선택합니다.
- Load balancer name(로드 밸런서 이름)에서 이전에 생성한 로드 밸런서를 선택합니다.
- Listeners(리스너) 섹션의 Production listener port(프로덕션 리스너 포트)에서 80:HTTP를 선택합니다.
- Add a Test listener(테스트 리스너 추가) 확인란을 선택합니다.
- Test listener port(테스트 리스너 포트)에서 create new(새로 생성)를 선택한 다음 리스너 포트로 8080을 입력합니다.
- Target groups(대상 그룹) 섹션의 Target group 1 name(대상 그룹 1 이름)으로 로드 밸런서를 생성할 때 생성한 대상 그룹을 선택합니다.
- Target group 2 name(대상 그룹 2 이름) 경우 Amazon ECS 콘솔에서 sample-website-tg-2라는 이름으로 새 대상 그룹을 생성합니다.
- Create(생성)를 선택합니다.
이제 하나의 작업이 실행 중인 새로 생성한 서비스를 확인할 수 있습니다.
Amazon ECS 블루/그린 배포가 제대로 작동하는지 확인
블루/그린 Amazon ECS 서비스를 생성한 후, 변경 사항을 반영하여 새 작업 정의 개정을 생성하고 Amazon ECS 서비스를 업데이트하십시오. 이 작업을 수행하면 CodeDeploy 콘솔에 배포가 생성됩니다.
배포가 제대로 작동하는지 확인하려면 다음 단계를 완료하십시오.
-
Amazon ECS 콘솔을 엽니다.
-
탐색 창에서 Task Definitions(작업 정의)를 선택합니다.
-
작업 정의를 선택하고 Create new revision(새 개정 생성)을 선택한 다음 Create(생성)를 선택합니다.
참고: 다음 예에서는 image 속성이 httpd:2.4를 사용하도록 업데이트되었습니다.{ "executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole", "containerDefinitions": [ { "name": "sample-website", "image": "httpd:2.4", "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "256", "memory": "512", "family": "sample-website" } -
탐색 창에서 Clusters(클러스터)를 선택한 다음 Amazon ECS 서비스를 배포한 클러스터를 선택합니다.
-
Services(서비스) 탭에서 Amazon ECS 서비스를 선택한 다음 Update(업데이트)를 선택합니다.
-
Deployment configuration(배포 구성) 섹션의 Task Definition(작업 정의)에서 3단계에서 생성한 최신 개정을 선택합니다.
-
Update(업데이트)를 선택합니다.
-
Deployments(배포) 탭의 Deployment Id(배포 ID) 열에서 배포 ID를 선택하여 CodeDeploy 배포를 확인합니다.

