DBを丸ごとstgへコピーしたのではありません。ローカルで安全に試した「構造変更の設計図」を、ECRとECSを経由してstg RDSへ一度だけ適用する課題です。
dump.sqlはローカル練習環境の再現用。stgの上書きには使わない。descriptionカラムだけ追加した。ローカルで適当なデータを作り、ECR経由でstgを正規データに上書きする。
ローカルで変更SQLを検証し、ECSからstgへ「カラム追加の差分」だけ適用する。
同じDBをコピーする流れではなく、検証済みの変更命令を運ぶ流れ。
今回のゴール:stgのworkspacesテーブルへdescriptionカラムを1本追加すること。データベース全体を入れ替えることではありません。
| 場所 | 役割 | 今回したこと |
|---|---|---|
| ローカルPostgres | 安全な予行演習場 | restore、migration実行、TablePlus確認、dump |
| ECR | 実行物の倉庫 | db-migrator-stg:22b3bf3を保存 |
| ECS | 一回限りの実行場所 | イメージを起動してmigrationを実行 |
| stg RDS | 実際の変更対象 | descriptionカラムを追加 |
どちらもSQLだが、目的と使われる場所が違う。
| dump.sql | migration SQL | |
|---|---|---|
| 正体 | DB全体のスナップショット | 変更差分の命令書 |
| 主なコマンド | make restore / make dump | make up / ECS run-task |
| 今回の対象 | ローカルPostgres | ローカルPostgresとstg RDS |
| stg既存データ | 今回restoreしない | 残したままカラムだけ追加 |
-- stgで実際に適用された差分 ALTER TABLE workspaces ADD COLUMN description TEXT;
別操作に注意:TablePlusでstgへ追加したmigration-test行は、dumpやECRから投入されたseedではありません。確認のためstgへ直接INSERTしたデータです。
保管・指定・実行を分けることで、どの変更をどこで動かすかを固定する。
22b3bf3の内容をDockerイメージ化してECRへpush。22b3bf3、Secrets、ネットワーク、ARM64を固定。aws ecs run-taskで単発タスクを1つ起動。db/slack_metrics/migrationsをm.Up()で適用して終了。既存行を残したまま、テーブル構造とmigration履歴だけが進んだ。
| 確認場所 | 確認できたこと | 意味 |
|---|---|---|
| CloudWatch | finish to apply migrations | ECS上のdb-migratorがエラーなく完了 |
| schema_migrations | 20260603225644 / dirty=false | そのversionまで正常適用済み |
| TablePlus Structure | description / text / nullable | 課題どおりのカラム構造 |
| TablePlus Data | description testを保存 | stgへの読み書きも確認。ただしmigrationとは別操作 |
重複防止:同じイメージを再実行しても、schema_migrationsが適用済みversionを管理するため、同じADD COLUMNを繰り返さずNo Changeとして終了します。