🚀
ECSへデプロイ完了タイミングについて考える
背景
ECS上のコンテナが Running
になってから通知やECS Execを行いたかった
ただ「ECSサービスを更新リクエストしたタイミング」と「ECSサービスの更新が完了(新規追加されたコンテナがRunningになる)タイミング」は異なる
ECSサービスの更新が完了してから後続の処理(job)を実行するために必要だったことを残す
前提
- 事前にECSサービスが構築されている
- CircleCIからはECSに対して更新だけを行うため
使うもの
- CircleCI
- CircleCI Orb
パイプラインの中身
パイプラインは以下のような中身になる
- イメージをビルド
- イメージをプッシュ
- タスク定義を更新
- サービスを更新
- コンテナへ処理(ECS Exec)をしたければここ
- デプロイ完了通知
CircleCIでは1,2についてはECR Orbを使用すれば構築できる
3,4はECS Orbを使用すれば構築できる
問題は5,6になる
ECS Orbを単純に構築して利用すると ECSサービスへ更新リクエスト
がされたらjob successとなってしまう
それは verify_revision_is_deployed
がfalse(デフォルト値)になっている可能性が高い
verify_revision_is_deployed
の値をtrueにすると、更新されたタスク定義(新しいリビジョン)から実行されたタスクが、ECSサービスに適応されて完全に切り替わるまでjobがpenddingされる
例えばデプロイ完了通知などもこれにより「完全にデプロイされたタイミング」でslackへ通知を送ることができる
他に追加されたコンテナに対して操作を行いたい(ECS Exec)時にも有効な手段となる
Discussion