RDS パブリックアクセス変更

By | 2015年12月10日

こんにちわ

最近エンサイマダにはまっている まばお です。

RDSのパブッリクアクセスがコンソールから変更可能になりました!

今までだと起動中のRDSをパブリックアクセス可能/不可能にするには
スナップショットから復元時にパラメータ指定するしかなかったので

嬉しい変更です!

さっそくやってみます!

環境準備

まずVPC上にEC2とRDSの簡単な構成を構築します。

■構成内容
・構成はRDSはプライベートサブネットに配置し外部からアクセスは不可
・EC2はパブリックサブネットに配置しRDSはEC2からのみアクセス可能

変更中の影響確認のためEC2からinsert処理をRDSに行うスクリプトを仕込みます。

AWS構成図_002

ローカル端末からmysqlで接続してみます。

[@localhost]$ mysql -h iesea-rds-devel.cwhlkv7orl4u.us-west-2.rds.amazonaws.com \
-P 3306 -u iesea -D ieseatakumiblog

もちろん応答がありません。

では実際にアクセスするために変更します。
尚、変更に合わせてデータベースの処理に影響はないのかも含め確認していきます。

設定変更

■RDSパブリックアクセス パラメータ変更

[@localhost]$ aws rds modify-db-instance \
--db-instance-identifier iesea-rds-devel \
-publicly-accessible

変更が反映されるまでに2~3分ほどかかります。

これだけではパブリックアクセス可能にはなりません。
RDSは上記構成の通りプライベートサブネットに配置してあるので
パブリックサブネットに変更する必要があります。

■RDS サブネット 関連付けルートテーブル変更
変更対象のassociationID確認 –route-table-idsにはプライベートルートのIDを代入します。

[@localhost]$ aws ec2 describe-route-tables \
--route-table-ids rtb-814245e4 \
| jq -r '.RouteTables[].Associations[].RouteTableAssociationId'
rtbassoc-2846a44c
rtbassoc-2c46a448

ルートテーブル変更

[@localhost]$ aws ec2 replace-route-table-association \
--route-table-id rtb-bb4245de \
--association-id rtbassoc-2846a44c
[@localhost]$ aws ec2 replace-route-table-association \
--route-table-id rtb-bb4245de \
--association-id rtbassoc-2c46a448

次にグローバルIPアドレスから接続許可をするためRDSセキュリティグループを変更します。

■RDS セキュリティグループ変更

[@localhost]$aws ec2 authorize-security-group-ingress \
--group-id sg-bc0632d8 \
--cidr [接続元グルーバルIPアドレス] \
--port 3306 \
--protocol tcp

接続確認

これでアクセスできるようになったので試してみます。

[@localhost]$ mysql -h  iesea-rds-devel.cwhlkv7orl4u.us-west-2.rds.amazonaws.com \
-P 3306 -u iesea - -D ieseatakumiblog
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8697
Server version: 5.6.22-log MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> 

アクセスできました!

念のため変更中にエラーや遅延が発生していなかったかinsert処理結果を確認します。
※17:37:52に変更実施したのでpublic access該当時刻でselect

mysql> select * from test_table where created_at LIKE '%2015-12-09 17:37:5%';
+------+------------+------+--------------------------------+---------------------+
| id   | name       | num  | description                    | created_at          |
+------+------------+------+--------------------------------+---------------------+
| 3101 | e11c7ff91f |  464 | uwyjepgwtunsox17IwcqrjexuPlbge | 2015-12-09 17:37:50 |
| 3102 | a825e4b015 |  382 | fqcvjmredaUqm3ykmEvvam7prhaubz | 2015-12-09 17:37:51 |
| 3103 | 7d3b3dc8b6 |  579 | yKpu0atukjgiswlqehhnwnFhwzs7qw | 2015-12-09 17:37:52 |
| 3104 | 6de7a30830 |  388 | euli2hgkpyzoU4moibooaYuypngfwl | 2015-12-09 17:37:53 |
| 3105 | d2156d67a6 |  614 | akve1sICyporgjwdr7htgteehxomih | 2015-12-09 17:37:54 |
| 3106 | 9f372665bf |  892 | wEmrkwumqhhx4nc0zkfeeqisDdxzih | 2015-12-09 17:37:55 |
| 3107 | 2063e9df83 |  369 | apkt9azhfvm1yrczeepeprhacQhiEe | 2015-12-09 17:37:56 |
| 3108 | 7bdc17b180 |  820 | vL4lnqxqbdphIrq3zjghvxgbknsoyk | 2015-12-09 17:37:57 |
| 3109 | ab89ae006d |  996 | t3ztdsoMdu1bmyoxzyjtbagtyxpaZo | 2015-12-09 17:37:58 |
| 3110 | e42afafd3b |  719 | PQfgecmdbgohrcyslvfnksdi0mafp3 | 2015-12-09 17:37:59 |
+------+------------+------+--------------------------------+---------------------+
10 rows in set, 1 warning (0.13 sec)
mysql>

きっちり一秒毎にinsertされています。
他、ルートテーブル変更時やセキュリティグループ変更時にも
問題なくinsertされてました。

但し、上記検証だけでは影響がないかについては不十分だと思うので
参考程度にとらえていただければと考えています。

参考:既に起動しているAmazon RDSでpublic accessibileの切り替えが可能になりました