エラー
AWS CodeBuild上でAurora(MySQL)に接続してrails db:migrateしようとすると、Access Denied。
この問題を解決するのにかなりの時間を費やしたので、メモ + 共有。
検証 + 解決方法
- そもそもDBは起動しているか。
- ネットワークとして、互いに接続できる状態か。(セキュリティグループ設定が正しいか)
- MySQLクライアントでDBに接続できるか。
mysql -h <ホスト> -u <DBユーザ名> --password=<DBパスワード> <DB名>
- DBホストを名前解決できているか。
nsloolup <ホスト>
- DBから応答はあるか。(CodeBuildで実行)
mysqladmin ping -h <ホスト> -u <DBユーザ名> --password=<DBパスワード> <DB名>
私の場合、以上に関しては問題が無かった。
そのため、Railsの設定のどこかが間違っているのだろうと当たりをつけることができた。
- Railsの設定は正しいか。
私の場合は、原因はdatabase.ymlの設定だった。正
のように修正することで解決した。
# 不具合が起こる場合がある書き方
password: <%= ENV['RDS_PASSWORD'] %>
# 正
password: "<%= ENV['RDS_PASSWORD'] %>"
上側の記述方法で何が悪いかというと、下記の記事にもあるように、パスワードの先頭が記号#
だった場合に無効になってしまうこと。
https://taker.hatenablog.com/entry/2020/02/18/000922
今回、パスワードをランダムな文字列で生成するようにしていたため、パスワードの先頭が#
になっていた。
以上