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)

DBSecurityGroup Default

B)  EC2のグループを確認する(AWS Management Console > Amazon EC2 > Instances)

EC2SecurityGroup

C) AWS Account IDを確認する(アカウントアクティビティ > セキュリティ証明書 > アカウント識別子)

AWSのアカウントIDの確認

D) RDSのセキュリティグループに追加する(AWS Management Console›Amazon RDS > DB Security Groups)

BとCで確認した内容をそれぞれ入力してAddを押す
EC2のグループを追加する画面
これでEC2のインスタンスからRDsのインスタンスのインスタンスへ接続が可能になる。

E) 実際に接続するための確認項目

RDsへの接続ホスト名は以下のDB Instancesの画面からインスタンスを選択した際に表示されるEndpointが該当する

DBインスタンス

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に続けて書く必要がある。