🧘

RDSでrails db:migrateしてみました

2023/08/13に公開

RDSデータベースでdb:migrate、db:seedを実行してみた備忘録です。

環境

・ECS(fargate)でrailsコンテナを起動している。
・AWSのRDSを使用。
→RDSの接続設定はおそらくできているけれど、そういえば本番データベースのmigrateをしていないのでは?どうやるんだろう?と疑問に思い調査しました。

ECS Execでコンテナに入る

まずDBの現状を把握するべくECSExecでコンテナに入ります。

aws ecs execute-command --cluster クラスター名 \
    --task タスクARN \
    --container コンテナ名 \
    --interactive \
    --command "/bin/sh" \

https://zenn.dev/shimouta/articles/5e8f947577cfc0

RDSに接続

続いて以下のコマンドでRDSに接続しパスワード入力を求められるので入力

psql -h RDSホスト名(RDSエンドポイント) -U RDSユーザー名 -d RDSデータベース名

するとデータベースがないとのエラー

FATAL: database "RDSデータベース名" does not exist

試しにデータベース名をpostgresとしてみると、

psql -h RDSホスト名(RDSエンドポイント) -U RDSユーザー名 -d postgres

接続が成功しました。
(PostgreSQLのRDSインスタンスを作成する際、デフォルトでpostgresという名前のデータベースが作成されることが多いらしい。)

psql (15.3)
SSL connection (protocol: ~~~, compression: off)
Type "help" for help.
postgres=>

しかし、\lコマンドでデータベース内を表示しても、期待するRDSデータベースは確認できませんでした。
なので、CREATE DATABASEコマンドでデータベースを作成します。

postgres=> CREATE DATABASE "RDSデータベース名";
CREATE DATABASE

CREATE DATABASEと出力されたので成功です。
この後\lコマンドで作成されたデータベースを確認することができました。

db:migrate/db:seedの実行

データベースが作成できたのでdb:migrate/db:seedを実行していきます。
こちらはデータベースの中ではなくコンテナ内で実行しました。
事前にdatabase.ymlに必要なRDSの接続情報を記載しておく必要があると思います。

RAILS_ENV=production bundle exec rails db:migrate
RAILS_ENV=production bundle exec rails db:seed

期待するuserが表示されました。

Discussion