Search
moon
sun

Blue/Green - EC2

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의 배포를 점점 늘리는 형태를 말합니다.
생성 방법은 배포 구성에서 배포 구성 만들기를 선택한다음 만들면 됩니다.