🧘
RDSでrails db:migrateしてみました
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" \
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