Amazon RDS
最終更新日 2024年04月29日(月)
この記事では、Amazon RDS データベースを使用するように Heroku アプリを設定する方法について説明します。
Amazon RDS は別途購入してプロビジョニングする必要があります。
RDS インスタンスへのアクセスの承認
Heroku dyno に RDS インスタンスへのアクセスを許可する必要があります。アクセスを許可するための方法として、承認されたユーザーからの SSL 暗号化接続のみを受け入れるように RDS インスタンスを設定し、適切な IP アドレスからの ingress を許可するようにインスタンスのセキュリティグループを設定することを推奨します。
以前の Heroku では、Amazon RDS インスタンスへのアクセスを許可する方法として、Heroku の AWS アカウント ID とセキュリティグループ名を公開していました。これは推奨されなくなりました。
MySQL RDS インスタンスを使用するように Heroku Ruby アプリを設定する
Heroku Ruby アプリから MySQL RDS インスタンスにアクセスするには、以下のステップに従います (Stackoverflow の回答)より改変)。
まず、Amazon RDS CA 証明書をダウンロードします。
$ curl https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem > ./config/amazon-rds-ca-cert.pem
中間 AWS 証明書をダウンロードして結合することが必要な場合もあります。
証明書ファイルをアプリの Git リポジトリに追加し、Heroku に再デプロイします。
DATABASE_URL
環境設定を更新して、リポジトリ内の証明書ファイルを指す sslca
パラメータを含めます。
heroku config:set DATABASE_URL="mysql2://username:password@hostname/dbname?sslca=config/amazon-rds-ca-cert.pem" -a <app_id>
証明書ファイルへの相対パスは重要です。
SSL を要求する
ユーザーのすべての接続に SSL を要求するよう MySQL を設定します。
GRANT USAGE ON *.* TO 'username'@'%' REQUIRE SSL;
以上で、Ruby アプリから SSL 経由で RDS MySQL データベースにアクセスできるようになります。
追加リソース
RDS データベースで SSL 接続を使用する方法、およびデータベースセキュリティグループのアクセスを承認する方法についての詳細は、関連する AWS および MySQL のドキュメントを参照してください。
- AWS: MySQL DB インスタンスで SSL を使用する
- AWS: Require DB instance only accept encrypted connections (暗号化接続のみを受け入れるよう DB インスタンスに要求する)
- AWS: Using SSL with a SQL Server DB Instance (SQL Server DB インスタンスで SSL を使用する)
- MySQL: Using Encrypted Connections (暗号化接続を使用する)
- AWS: IP 範囲からのネットワークアクセスを DB セキュリティグループに許可する
ClearDB に関する Dev Center の記事で、MySQL データベースへの接続時に SSL 証明書を使用する方法について詳しく説明しています。