본문 바로가기

CICD/ECS

ECS CICD Automation - 11. ECS Canary Deployment

이전 포스트에서 말씀 드렸듯이, 블루그린 배포 스크립트에서

Deploy CLI --deployment-config-name CodeDeployDefault.OneAtATime 옵션 부분을 수정해서

마지막 Deploy Script만 다음과 같이 고치면, Canary로 할 것인지 Linear로 할 것인지 정할 수 있습니다.

withAWS(credentials:"$AWS_CREDENTIALS") {
    sh"""
        aws deploy create-deployment \
        --application-name AppECS-${CLUSTER_NAME}-${SERVICE_NAME} \
        --deployment-config-name ECSCanary10Percent1Minutes \
        --deployment-group-name DgpECS-${CLUSTER_NAME}-${SERVICE_NAME} \
        --region ap-northeast-2 \
        --s3-location bucket=cb-test-deploy,bundleType=YAML,key=${env.JOB_NAME}/${env.BUILD_NUMBER}/appspec.yaml \
        --output json > DEPLOYMENT_ID.json
    """
}

 

기본 옵션이 5분 간격이기 때문에 빠른 배포테스트를 위해 1분마다 10%씩 트래픽을 옮기도록 하겠습니다.

 

 

배포가 알맞은 방법으로 수행되었고 테스트해보도록 하겠습니다.

 

선형이나 카나리 모두 블루그린 처럼 모든 동일한 개수의 서비스를 띄우는 것을 확인할 수 있었습니다.

 

 

이번에는 좀 머리를 써서 10% 트래픽에 대한 체크를 해보도록 하겠습니다.

 

 

어쩌다가 한번씩 Canary에 대한 새로운 서비스가 호출되는 것을 확인할 수 있습니다.

그러나 배포가 1분에 10%씩인데, 3분만에 100%까지 트래픽이 모두 옮겨진 것을 확인할 수 있었습니다.

 

음 아무래도 제가 AWS에서 정의하는 Linear와 Canary에 대한 방법에 대한 이해가 조금 더 필요할 것 같습니다.

하지만, ECS에서도 이제 안전하게 서비스를 배포하기 위해서 트래픽을 일부만 조금씩 보내면서

테스트하며 배포하는 방법이 구현되었으므로, 한층 더 서비스의 안정성을 높일 수 있게 된 것 같습니다.