🚀

ECSへデプロイ完了タイミングについて考える

2023/09/18に公開

背景

ECS上のコンテナが Running になってから通知やECS Execを行いたかった
ただ「ECSサービスを更新リクエストしたタイミング」と「ECSサービスの更新が完了(新規追加されたコンテナがRunningになる)タイミング」は異なる
ECSサービスの更新が完了してから後続の処理(job)を実行するために必要だったことを残す

前提

  • 事前にECSサービスが構築されている
    • CircleCIからはECSに対して更新だけを行うため

使うもの

  • CircleCI
  • CircleCI Orb

パイプラインの中身

パイプラインは以下のような中身になる

  1. イメージをビルド
  2. イメージをプッシュ
  3. タスク定義を更新
  4. サービスを更新
  5. コンテナへ処理(ECS Exec)をしたければここ
  6. デプロイ完了通知

CircleCIでは1,2についてはECR Orbを使用すれば構築できる
https://circleci.com/developer/ja/orbs/orb/circleci/aws-ecr

3,4はECS Orbを使用すれば構築できる
https://circleci.com/developer/ja/orbs/orb/circleci/aws-ecs

問題は5,6になる
ECS Orbを単純に構築して利用すると ECSサービスへ更新リクエスト がされたらjob successとなってしまう
それは verify_revision_is_deployed がfalse(デフォルト値)になっている可能性が高い
verify_revision_is_deployed の値をtrueにすると、更新されたタスク定義(新しいリビジョン)から実行されたタスクが、ECSサービスに適応されて完全に切り替わるまでjobがpenddingされる

例えばデプロイ完了通知などもこれにより「完全にデプロイされたタイミング」でslackへ通知を送ることができる
他に追加されたコンテナに対して操作を行いたい(ECS Exec)時にも有効な手段となる

Discussion