안녕하세요. 오늘은 베스핀글로벌 D&A실 김동규 님이 작성해 주신 ECS CodePipeline 설정(블루/그린)에 대해 알아보겠습니다. 쉽게 따라하실 수 있게 되어있으니 끝까지 읽어주세요!
궁금하신 부분은 언제든 댓글을 달아주세요 🙂
1. 사전 준비 사항
- ECR : Docker Image 를 push할 저장소가 사전에 구성되어 있어야 합니다.
- ECS : 클러스터, 태스크(작업정의), 서비스(블루/그린) 등 배포 대상이 구성되어 있어야 합니다.
- S3 : 아티팩트 저장용 S3 Bucket 생성 및 접근 설정이 필요합니다.
2. 배포 구성
- CodeBuild : 블루/그린 배포에서는 파이프라인 작동시 기본 생성되는 imagedetail.json 파일을 그대로 사용하며Docker Image 생성 및 push 는 Github에서 이뤄지므로 CodeBuild 과정 자체가 생략됩니다.
- CodePipeline : ECR에 Docker Image가 push 될 때 또는 CodeCommit에 taskdef.json, appspec.yaml 이 푸쉬될 때 이벤트를 받아 파이프라인이 작동하며 ECS에 신규 버전을 배포하게 됩니다.
3. Blue / Green 배포 개념
중요 가이드
https://docs.aws.amazon.com/ko_kr/codepipeline/latest/userguide/tutorials-ecs-ecr-codedeploy.html
4. CodePipeline 설정
- 파이프라인 이름을 정하고 서비스역할은 처음에는 생성, 이미 만들어져 있을 경우 기존 서비스 역할을 선택합니다.
4-1. CodePipeline 설정 (고급설정)
- 파이프라인 동작시 아티팩트가 저장될 S3 버킷을 설정합니다.
- 기본 위치일 경우 새로운 S3 버킷이생성되며 별도로 관리하고 싶으면 수동으로 기생성된 S3 버킷을 선택합니다.
4-2. 소스 스테이지(CodeCommit)
- CodeCommit에 appspec.yaml및 taskdef.json푸쉬해 두어야 합니다.
4-3. 배포 스테이지
- 배포 공급자는 Amazon ECS(Blue/Green)를 선택합니다.
4-4. 배포 스테이지
- 블루/그린 서비스 배포시 사용된 애플리케이션, 배포그룹을 선택하고 나머지는 기본 구성으로 둡니다.
파이프라인을 우선 생성한 뒤 ECR 소스 스테이지를 추가하고 배포 스테이지를 수정해야 합니다
4-5. 소스 스테이지 추가
- 파이프라인 생성 후 편집 – 스테이지 편집에서 추가 작업으로 진행
4-6. 소스 스테이지(ECR) 추가
- 파이프라인 생성 후 편집에서 추가 작업으로 다음을 진행합니다.
- 소스 공급자 이름, ECR, 리포지토리 선택, 이미지 태그는 latest, 출력 아티팩트 입력 후 다음을 클릭합니다.
4-7. 배포 스테이지 수정
- 입력 아티팩트에서 앞서 추가한 소스 스테이지 내용 추가한다. 이후 파이프라인 작동은 표준배포(롤링)과 동일합니다.
# 별첨 – taskdef.json
- taskdef.json
- 점선 아래부터 문구를 그대로 복사합니다. Task 정의에서 꼭 필요한 부분만 가져와서 편집하면 됩니다.
————————————-
{
“executionRoleArn”: “arn:aws:iam::911781XXXXXX:role/ecsTaskExecutionRole”,
“containerDefinitions”: [{
“name”: “hello-world”,
“image”: “<IMAGE1_NAME>“,
“essential”: true,
“portMappings”: [{
“hostPort”: 80,
“protocol”: “tcp”,
“containerPort”: 80
}]
}],
“requiresCompatibilities”: [
“FARGATE”
],
“networkMode”: “awsvpc”,
“cpu”: “256”,
“memory”: “512”,
“family”: “hello-world”
}
# 별첨 – appspec.yaml
- appspec.yaml
- 점선 아래부터 문구를 그대로 복사합니다.
————————————-
version: 0.0
Resources:
– TargetService:
Type: AWS::ECS::Service
Properties:
TaskDefinition: <TASK_DEFINITION>
LoadBalancerInfo:
ContainerName: “hello-world”
ContainerPort: 80
# 별첨 – 빌드 프로젝트 생성(Codebuild에서 블루/그린 도커 빌드할 경우)
감사합니다~ 🙂
문의: info@bespinglobal.com | 대표번호: 02-1668-1280