Codepipeline using ECR to deploy ECS

  1. Source stage 選 ECR 及對應的 registry
    Source stage 會產生 artifact imageDetail.json
  2. Build stage 選 CodeBuild
    CodeBuild 的 buildspec 如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    version: 0.2
    phases:
    build:
    commands:
    - ContainerName="[CONTAINER_NAME]"
    - ImageURI=$(cat imageDetail.json | jq -r '.ImageURI')
    - printf '[{"name":"CONTAINER_NAME","imageUri":"IMAGE_URI"}]' > imagedefinitions.json
    - sed -i -e "s|CONTAINER_NAME|$ContainerName|g" imagedefinitions.json
    - sed -i -e "s|IMAGE_URI|$ImageURI|g" imagedefinitions.json
    - cat imagedefinitions.json

    artifacts:
    files:
    - imagedefinitions.json
    這是把 Source 產生的 imageDetail.json 產生 imagedefinitions.json。要把其中的 [CONTAINER_NAME] 改成 container 名稱。
  3. Deploy stage 選 ECS,選擇對應的 cluster 跟 service
  4. 調整 ECS minimum healthy percentage 跟 maximum percentage 的值以及 cluster 內 EC2 instance 的數量,沒調整好 deployment 可能會卡住。
  5. 可以從 ECS service deployment 看 deploy 的狀況。