AWSでEC2からRDsに接続するのに、結構はまったので、メモ。
AWSでMySQLが使えるAmazonRDSというサービスがあるのだが、デフォルトではDBインスタンスの作成後、どこからも接続ができない状態になっている。
これをEC2から接続できるようにするためには、セキュリティグループの設定が必要。
具体的には、RDsのDBインスタンスのMySQLに接続したい、EC2のセキュリティグループをDBのセキュリティグループに追加するという作業が必要。
その際に、EC2のセキュリティグループとAWSのアカウントIDが必要になる。
アカウントIDは、ログインIDではなく、アカウント毎に別途発行されているIDになるので注意。
A) デフォルトの何も許可されていない状態(AWS Management Console›Amazon RDS > DB Security Groups)
B) EC2のグループを確認する(AWS Management Console > Amazon EC2 > Instances)
C) AWS Account IDを確認する(アカウントアクティビティ > セキュリティ証明書 > アカウント識別子)
D) RDSのセキュリティグループに追加する(AWS Management Console›Amazon RDS > DB Security Groups)
BとCで確認した内容をそれぞれ入力してAddを押す
これでEC2のインスタンスからRDsのインスタンスのインスタンスへ接続が可能になる。
E) 実際に接続するための確認項目
RDsへの接続ホスト名は以下のDB Instancesの画面からインスタンスを選択した際に表示されるEndpointが該当する
mysqlコマンドを利用しての接続例(ENDPOINTを上のものに置き換える)
mysql -h ENDPOINT -P 3306 -u ユーザー名 -pパスワード DB名
おまけ
ちなみに、EC2のセキュリティグループ以外にも特定のIP等を指定する方法もある。
DB Security GroupsのEC2セキュリティグループのところで「 CIDR/IP 」を選択し、xxx.xxx.xxx.xxx/32 のように特定のIPやネットワークを設定すればOK
自分は現在つかっている、さくらのVPSからAWSに移行するために、さくらのVPSのグローバルIPを指定して、ちょくせつ さくらのVPSからAWSにWordpressのDBを移行した。
参考までに、さくらのVPS上で実行したコマンドは以下。
$ mysqldump -u VPS側のDBユーザー名 -pVPS側のパスワード DB名 | \
> mysql -h ENDPOINT -P 3306 -u AWSRDsのユーザー名 -pAWSRDsのパスワード AWSRDsのDB名
パスワードの入力を標準入力でキーボードから打とうとすると、Poderosaだけなのかわからないが、画面がおかしくなってしまったので、コマンド実行時にパスワードも両方記載した。MySQLの場合、パスワードはオプションからスペースをあけずに、つまり、-pに続けて書く必要がある。