ECSへの自動デプロイは、ツールが違っても「ビルド、DBマイグレーション、サービス更新、通知」という順序に収束します。順番の理由と責務分離を掴みます。
ビルド → DBマイグレーション → ECS更新 → 通知。

DockerイメージをECRへpushし、その新版のdb-migratorを単発実行する。成功して初めてサービスを新タスク定義へ更新し、最後に結果を関係者へ知らせる。
| 順番 | 実行すること | 次へ進む条件 |
|---|---|---|
| 1. build | イメージをECRへpush | 新タグが確定 |
| 2. migration | 単発ECSタスクでDB更新 | 終了コードとログが成功 |
| 3. deploy | 新タスク定義でサービス更新 | ローリング開始 |
| 4. notify | 結果を共有 | 成功・失敗を明記 |
DBマイグレーションを通さずにサービスを更新しない依存関係が、アプリとスキーマの不整合を防ぐ。
古いdb-migratorを走らせても、新しいmigrationファイルは反映されない。

先にイメージをビルドしてタグを確定し、そのタグを参照する単発ECSタスクでマイグレーションを実行する。失敗時にサービスを更新しない依存関係が安全弁になる。
| 順番 | 理由 | 失敗時の扱い |
|---|---|---|
| build → migration | 新しいmigrationを含むイメージを使う | サービス更新を行わない |
| migration → deploy | スキーマを先に整える | 原因を修正して再実行 |
| deploy → notify | 完了結果を確認してから伝える | 失敗通知で調査を開始 |
db-migratorも新イメージで実行する。古いイメージでは追加したmigrationを反映できない。
基盤の安定した変更と、イメージタグのように頻繁な変更を同じapplyに載せない。

TerraformはVPC・IAM・ECRなど基盤を管理する。ecspressoはSSMからイメージタグを読み、ECSタスク定義とサービスのデプロイに集中する。
| 管理対象 | 主担当 | 変更頻度 |
|---|---|---|
| Terraform | VPC・IAM・ECRなどの基盤 | 低い |
| ecspresso | ECSタスク定義・サービス更新 | 高い |
| SSM Parameter Store | イメージタグ等の受け渡し | デプロイごと |
頻繁に変わるアプリのデプロイを、基盤全体のterraform applyに巻き込まない。