何が書いてある記事なのか?
Heroku上に構築したアプリケーションから、AWS RDS上に構築したデータベースへ接続する手順について。
Heroku→RDS(MySQL)への接続方法
前提条件
- AWS RDS上にデータベース(MySQL)を構築済みであること
- GitHubからデプロイされたHerokuアプリケーションが存在すること
- MySQL 5.x にて確認
手順
1. Herokuへデプロイ済みのGitHubリポジトリに、AnazonRDS CA証明書(*.pem)ファイルを追加する
# 対象リポジトリのディレクトリへ移動
$ cd hoge_repo
# リポジトリのconfigディレクトリにCA証明書をダウンロード
$ curl https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem > ./config/amazon-rds-ca-cert.pem
# リポジトリにプッシュする
$ git push origin main
$ git push heroku main
2. Herokuアプリの環境変数DATABASE_URL
にデータベース情報を反映する
# <username> DBユーザ名
# <password> DBパスワード
# <hostname> ホスト名(RDSデータベースのエンドポイント名)
# <port> ポート番号
# <database> データベース名
# <herokuapp> 対象のHerokuアプリケーション名
$ heroku config:set DATABASE_URL="mysql2://<username>:<password>@<hostname>:<port>/<database>?sslca=config/amazon-rds-ca-cert.pem" -a <herokuapp>
3. RDSのセキュリティグループ設定を選択し、インバウンドルールを変更する
RDSのWeb管理画面にて設定する。ここでは、ソースを0.0.0.0/0
とし、どのIPからでも接続できるように設定する。
ただし、本番環境などでは、セキュリティを考慮した上で正しく設定すること。
4. 必要に応じて、MySQLのデータベースに対して、ユーザーの全接続に対してSSLを求めるように設定する
# 対象データベースにてSQLクエリを発行
GRANT USAGE ON *.* TO '<username>'@'%' REQUIRE SSL;