TERRAFORM APPLY コース

ECS one-shot task で行う
DB migration

DBスキーマ変更をアプリ起動の副作用にせず、独立したECS taskとして可観測に実行する考え方です。

TL;DR
  1. migrationは一回限りの独立taskにする。
  2. RDSへ届くprivate subnetと最小権限を使う。
  3. schema確認までを実行完了に含める。

01 migration を独立 task にする

ECS taskからRDSへ接続する経路
APIとは別のtaskがprivate network内でRDSを更新する。
APIのデプロイ失敗とmigration失敗を分離する。 失敗時にはtaskの終了状態とログだけを追えばよく、影響範囲を限定できます。

02 実行を可観測にする

実行前後の確認手順
実行前の準備、taskの結果、schemaの確認を一組にする。

taskを起動した事実だけでは不十分です。終了コード・ログ・期待したテーブルやカラムの存在を確認して初めて、変更が適用されたと判断します。

03 互換性を壊さない順序

expand migrate contract の時系列
新旧アプリが同居できる期間を設けて、破壊的変更を後ろへ送る。

まず追加可能なschemaを広げ(expand)、データを移行し、アプリを切り替え、最後に旧schemaを片付ける(contract)。この順ならロールバック余地を保てます。

結論: migrationは、ネットワーク・権限・ログ・schema確認を揃えた独立ジョブとして扱います。