Cloud9 인스턴스의 IDE로 이동
애플리케이션 소스코드의 src/main/java/com/example/demo/DemoApplication.java
파일 열기
31번 라인의 메세지를 원하는 값으로 변경하고 저장
변경 사항을 CodeCommit에 반영
{
cd ~/environment/backend
git add .
git commit -m "update greeting message"
git push
}
Commit ID를 확인하고 환경변수로 지정
{
export COMMIT_ID=$(git rev-parse --short HEAD)
echo $COMMIT_ID
}
컨테이너 이미지 빌드
docker build -t backend:$COMMIT_ID .
위에서 생성한 컨테이너 이미지에 새로운 태그 부여
{
export ECR_REPO=$(aws ecr describe-repositories --repository-name backend \\
--query 'repositories[0].repositoryUri' \\
--output text)
docker image tag backend:$COMMIT_ID $ECR_REPO:$COMMIT_ID
}
컨테이너 이미지를 ECR 리포지토리로 업로드
docker image push $ECR_REPO:$COMMIT_ID
인증 실패로 업로드에 실패할 경우에 ECR 레지스트리에 로그인 후 위의 명령어 재실행
{
export ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
aws ecr get-login-password | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.ap-northeast-2.amazonaws.com
}
이미지가 정상적으로 업로드 되었는지 확인
aws ecr list-images --repository-name backend --no-cli-pager
위에서 업로드한 이미지를 사용하는 태스크 정의 파일 생성
{
export ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
export ECR_REPO=$(aws ecr describe-repositories --repository-name backend \\
--query 'repositories[0].repositoryUri' \\
--output text)
cat <<EOF | tee ~/environment/taskdef.json
{
"family": "backend",
"requiresCompatibilities": [
"EC2",
"FARGATE"
],
"runtimePlatform": {
"cpuArchitecture": "X86_64",
"operatingSystemFamily": "LINUX"
},
"networkMode": "awsvpc",
"cpu": "512",
"memory": "1024",
"executionRoleArn": "arn:aws:iam::$ACCOUNT_ID:role/ecsTaskExecutionRole",
"containerDefinitions": [
{
"name": "backend",
"image": "$ECR_REPO:$COMMIT_ID",
"portMappings": [
{
"containerPort": 8080,
"hostPort": 8080,
"protocol": "tcp"
}
],
"essential": true,
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "true",
"awslogs-group": "/ecs/backend",
"awslogs-region": "ap-northeast-2",
"awslogs-stream-prefix": "ecs"
}
}
}
]
}
EOF
}
태스크 정의 생성
aws ecs register-task-definition \\
--cli-input-json file://~/environment/taskdef.json \\
--no-cli-pager
태스크 정의가 정상적으로 등록되었는지 확인
aws ecs list-task-definitions --family-prefix backend
AWS 관리 콘솔에서 ECS로 이동해서 backend 서비스 클릭
오른쪽 위에 서비스 업데이트 클릭
개정에 **2 (최신)**을 선택 - 만약 최신 개정이 2가 아닐 경우에는 (최신) 태그를 가진 버전 선택
스크롤을 페이지 맨 아래로 내려서 오른쪽 아래에 있는 업데이트 클릭
배포가 완료될때까지 대기
아래와 같이 배포가 완료되었으면 Cloud9 인스턴스 IDE로 이동
애플리케이션 업데이트가 정상적으로 완료되었는지 확인
{
export ALB_DNS=$(aws elbv2 describe-load-balancers --names my-backend-alb \\
--query 'LoadBalancers[0].DNSName' \\
--output text)
curl -w "\\n" $ALB_DNS/api/greeting
}