月別アーカイブ: 2015年12月

マネージドなNATゲートウェイを試してみました

こんちには。船田です。
風邪で寝ている間にマネージドなNATゲートウェイがリリースされていましたので試してみました。
 
 

前提となる構成

踏み台サーバ経由でプライベートサブネット配下のサーバにSSHできるようになっています。
プライベートサブネットからはインターネットに出て行くことができませんので、WindowsUpdateやyum updateなどが行えない状態です。
今までであればCDP:High Availability NATパターンで対応していましたが、今回はNATゲートウェイを使ってみます。

managed-nat-vpc
 
 

NATゲートウェイの作成

マネジメントコンソールのVPCのところに「NATゲートウェイ」という項目が増えています。こちらをクリックします。
create-nat-gateway1
 

「NATゲートウェイの作成」を押下します。
create-nat-gateway2
 

「サブネット」ではNATゲートウェイを配置するサブネットを指定します。
EIPは既存のものを指定することも、新規に取得して指定することも可能です。
create-nat-gateway3
 

作成して少し待つと「利用可能」になります。
create-nat-gateway4
 

続いてプライベートサブネットに割り当てられているルートテーブルのルートを変更します。
localをターゲットとしたVPC内部への経路に加えて、NATゲートウェイへ向けたデフォルトルートを登録します。
create-nat-gateway5

これで作成完了です。
 
 

NATゲートウェイの動作確認

踏み台サーバ経由でプライベートサブネット配下のサーバにSSHでログインし、インターネットに向けてpingを実行してみます。

[root@ip-10-0-2-138 ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=52 time=3.54 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=52 time=3.50 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=52 time=3.20 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2509ms
rtt min/avg/max/mdev = 3.206/3.419/3.547/0.166 ms

問題なく疎通できました。
 

今度はtracerouteしてみます。

[root@ip-10-0-2-138 ~]# traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  * 10.0.0.9 (10.0.0.9)  0.614 ms *
 2  ec2-175-41-192-132.ap-northeast-1.compute.amazonaws.com (175.41.192.132)  1.139 ms ec2-175-41-192-128.ap-northeast-1.compute.amazonaws.com (175.41.192.128)  1.748 ms ec2-175-41-192-134.ap-northeast-1.compute.amazonaws.com (175.41.192.134)  1.267 ms
 3  27.0.0.172 (27.0.0.172)  2.498 ms  2.927 ms 27.0.0.154 (27.0.0.154)  2.518 ms
 4  27.0.0.154 (27.0.0.154)  2.652 ms  2.755 ms  2.752 ms
 5  15169.tyo.equinix.com (203.190.230.31)  4.504 ms  15.033 ms 27.0.0.136 (27.0.0.136)  4.088 ms
 6  216.239.54.11 (216.239.54.11)  4.388 ms 15169.tyo.equinix.com (203.190.230.31)  14.512 ms  4.422 ms
 7  72.14.235.155 (72.14.235.155)  3.645 ms 64.233.174.193 (64.233.174.193)  4.518 ms 209.85.255.147 (209.85.255.147)  4.475 ms
 8  216.239.54.21 (216.239.54.21)  3.634 ms google-public-dns-a.google.com (8.8.8.8)  3.282 ms 209.85.246.75 (209.85.246.75)  4.181 ms

1hop目がNATゲートウェイのプライベートIPアドレスになっています。
 

続いて、グローバルIPを確認してみます。

[root@ip-10-0-2-138 ~]# curl httpbin.org/ip
{
  "origin": "52.192.225.244"
}

NATゲートウェイのEIPになっていることが確認できます。
 
 

金額は?

東京リージョンでは1時間あたり$0.062に加えて、データ転送費用が発生します。
EC2でいうと、t2.smallとt2.mediumの間くらいの料金です。最大10Gbpsまでのトラフィックに対応しているということなので、妥当なところだと思います。
なお、EIPの費用については、NATゲートウェイに関連付けて使用している間は発生せず、NATゲートウェイを削除するなどして関連付けが外れると1時間あたり$0.005が発生します。EC2と同じ扱いですね。
 
 

まとめ

非常に簡単に作成できてとても良い感じです。
CDP:High Availability NATパターンの時はいずれかのAZで障害が発生した場合にルートを書き換えて片寄せしたりと手間がかかっていましたが、NATゲートウェイを使うことでそのあたりの手間をなくすことができます。
 
なお、「ゲートウェイは高可用性のための冗長機能が備わっています。」とありますが、これはあくまでシングルAZ内での冗長性ですので、AZ単位での障害に備えた構成にするには、AZごとに1インスタンスずつNATゲートウェイを作成する必要があります。
 
また、良いなと思った点として、NATインスタンスのEIPが指定ができることがあります。
既存のNATインスタンスから移行する場合、そこで使っていたEIPをそのまま流用できますので、外部連携のあるシステムなどでNATインスタンスのEIPを外部に登録していた場合など、再登録不要でスムーズに移行ができそうです。

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

こんにちわ

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

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の切り替えが可能になりました