Search

Blue/Green - Fargate

appspec.yaml

version: 0.0 Resources: - TargetService: Type: AWS::ECS::Service Properties: TaskDefinition: "<TASK_DEFINITION>" LoadBalancerInfo: ContainerName: "<CONTAINER_NAME>" ContainerPort: <PORT>
YAML
복사

buildspec.yml

version: 0.2 cache: paths: # - "/root/.gradle/caches/**/*" # gradle # - "/root/.m2/**/*" # maven # - "/root/.cache/pip/**/*" # pip # - "/root/.npm/**/*" # npm # - "/root/.nuget/**/*" # nuget # - "/root/.cache/yarn/**/*" # yarn env: variables: AWS_REGION: "REGION" ECR_REPO_NAME: "ECR_REPO_NAME" phases: pre_build: commands: - AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text) - aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com build: commands: - docker build -t $ECR_REPO_NAME . - docker tag $ECR_REPO_NAME:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECR_REPO_NAME:latest - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECR_REPO_NAME:latest - echo "{\"ImageURI\":\"${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPO_NAME}:latest\"}" > imageDetail.json artifacts: files: - appspec.yaml - taskdef.json - imageDetail.json
YAML
복사

taskdef.json (ECS - Task정의 가서 복붙해오기)

{ "taskDefinitionArn": "arn:aws:ecs:ap-northeast-2:362708816803:task-definition/skills-taskdef:96", "containerDefinitions": [ { "name": "skills-app", "image": "<IMAGE_NAME>", "cpu": 0, "portMappings": [ { "name": "skills-app-tcp-8080", "containerPort": 8080, "hostPort": 8080, "protocol": "tcp", "appProtocol": "http" } ], "essential": true, "environment": [], "environmentFiles": [], "mountPoints": [], "volumesFrom": [], "ulimits": [], "systemControls": [] } ], "family": "skills-taskdef", "taskRoleArn": "arn:aws:iam::362708816803:role/ecsTaskExecutionRole", "executionRoleArn": "arn:aws:iam::362708816803:role/ecsTaskExecutionRole", "networkMode": "awsvpc", "revision": 96, "volumes": [], "status": "ACTIVE", "requiresAttributes": [ { "name": "com.amazonaws.ecs.capability.ecr-auth" }, { "name": "com.amazonaws.ecs.capability.task-iam-role" }, { "name": "ecs.capability.execution-role-ecr-pull" }, { "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18" }, { "name": "ecs.capability.task-eni" } ], "placementConstraints": [], "compatibilities": ["EC2", "FARGATE"], "requiresCompatibilities": ["FARGATE"], "cpu": "512", "memory": "1024", "runtimePlatform": { "cpuArchitecture": "X86_64", "operatingSystemFamily": "LINUX" }, "registeredAt": "2024-12-31T01:19:22.385Z", "registeredBy": "arn:aws:iam::362708816803:root", "enableFaultInjection": false, "tags": [] }
JSON
복사
1시간 → 5분으로 변경

배포 구성

CodeDeployDefault.ECSAllAtOne
모든 트래픽을 업데이트된 Amazon ECS 컨테이너로 한 번에 이동합니다.
Canary 배포
카나리아 배포/릴리스를 사용하면 주어진 애플리케이션의 새 버전을 배포한 후 비즈니스 요구에 따라 사용자 정의 백분율 증분으로 트래픽을 전환합니다.
Linear(선형)
카나리아 배포와 유사합니다. 해당 트래픽을 소화하는 만큼의 리소스를 배포하고, 시간에 따라서 Ver2의 배포를 점점 늘리는 형태를 말합니다.
생성 방법은 배포 구성에서 배포 구성 만들기를 선택한다음 만들면 됩니다.