ちょっと話題の記事

【新機能】ついに登場!Amazon VPC NAT GatewayでNATがAWSマネージドに

2015.12.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、せーのです。 今日はついに登場した新サービス「Amazon VPC NAT Gateway」をご紹介します。

AmazonマネージドのNATが登場

今までプライベートなサブネットに立ててあるEC2インスタンスからインターネットに出るにはパブリックなサブネット上に自分でNATインスタンスを立てる必要がありました。 NATが落ちるとプライベートにあるEC2群からは一切インターネットに出ることができなくなるのでNATは冗長化して複数構成にするのが常でした。その結果そんなに使うわけでもないNAT用のEC2インスタンスを最低でも2台立て、しかもこのNATがパフォーマンスのネックにならないようにとある程度大きめのインスタンスタイプを選ばざるを得ないこともあり、コストが大変かかるものでした。 NATが落ちた時の切替も自分でスクリプトを組んで行っていましたが完全なものではありませんでした。

今回満を持して登場した「Amazon VPC NAT Gateway」によりユーザーはNATの管理にとらわれることなく、高可用のNATが安心して使えるようになりました!!

概要

使用できるリージョン

NAT Gatewayが現在使えるリージョンは

  • US East (N. Virginia)
  • US West (Oregon)
  • US West (N. California)
  • EU (Ireland)
  • Asia Pacific (Tokyo)
  • Asia Pacific (Singapore)
  • Asia Pacific (Sydney)

の7つになります。東京入ってますね!!

場所は[VPC]

NAT GatewayはVPCサービスに入りました。EC2ではないんですね。

通すプロトコル

NAT Gatewayを通して行える通信はTCP, UDP, ICMPの3つとなります。IPSecは入っていないようです。

ネットワーク性能

NAT Gatewayのネットワーク性能はNAT Gateway一つあたり10Gbps(バースト時)となります。これ以上のバーストが欲しい場合はNAT Gatewayを複数立てることで対応できます。

Elastic IP

GatewayにはElastic IP(EIP)を当ててパブリックなIPを確保します。一度割り当てたEIPは取り外しできませんので違うEIPを付けたい場合はNAT Gatewayを削除して、新たに作る必要があります。 またNAT Gatewayを削除してもこのElastic IPは自動では消えません。NAT GatewayにつけるEIPはVPCのEIPとは別個の管理となり、maxは5つです。これ以上必要な場合はAWSへ上限緩和申請が必要となります。

セキュリティグループ

NAT Gatewayとセキュリティグループを関連付けることはできません。セキュリティ要件を満たすにはプライベートサブネットのインスタンスに関連付けたセキュリティグループで調整します。

NACL

一方NACLによるサブネット上での制御はNAT Gatewayにも適用されます。

通さないアクセス

いくつかNAT Gatewayへのアクセスができない通信経路があります。まずClassicLinkを通じてのNATアクセスはできません。次にVPCエンドポイント、VPN接続、AWSダイレクトコネクト、またはVPCピアリングからのアクセスもできなくなっています。

アクセス制限

NAT Gatewayはひとつにつき同宛先、同プロトコルで同時65000接続が最大となっています。これ以上の同時接続が起きる場合はNAT Gatewayをもう一つ立てる必要があります。

タイムアウト

NAT Gatewayを通じての通信がなくなってアイドル時間が5分以上になると自動でタイムアウトします。ただしTCP KeepAliveを使用すると5分以上でも繋ぎ続ける事ができます。

料金

NAT Gatewayのお値段ですが、課金対象となるのはNATがプロビジョニングされ有効となっている期間のみ1時間単位での計算となります。 東京リージョンの場合は$0.062/時となります。これにプラスして通信料として1GB毎に$0.062の通信料がかかります。

やってみた

それではとりあえず動かしてみましょう。マネージメントコンソールのVPCから[NATゲートウェイ」を開きます。中央のNATゲートウェイの作成、をクリックします。

NATGateway1

まずはNAT Gatewayを置く対象のサブネットとEIPのIDを指定します。今回はpublicのサブネットを指定し、EIPは新規に作ることにします。

NATGateway2

なんと、これで終わりです。なんて簡単。。。

NATGateway3

次にNAT Gatewayを通すルートテーブルを作成します。[ルートテーブルの編集]をクリックし、新規にルートテーブルを作ります。

NATGateway4

出来上がったルートテーブルを編集し、0.0.0.0/0のルーティングにNAT GatewayのIDを指定します。

NATGateway5

そしてプライベートなサブネットのルートを変更し、上で作ったNAT Gatewayへのルーティングを選択します。

NATGateway6

NATGateway7

これでVPC周りは終了です。次にEC2です。

今回はプライベートサブネットにEC2を一台、立てたEC2を操作するためにBastionとしてサーバーをパブリックに一台立てます。

NATGateway8

NATGateway11

手元のマシンの~/.ssh/config ファイルの末尾でBastionを踏み台にしてインスタンスにアクセスできるように設定します。

Host testBastion
  Hostname 52.68.123.35
  User ec2-user
  IdentityFile /Users/Tsuyoshi/dev/key/cm_experimentation.pem
Host test
  HostName 10.0.10.5
  User ec2-user
  IdentityFile /Users/Tsuyoshi/dev/key/cm_experimentation.pem
  ProxyCommand ssh -W %h:%p testBastion

testBastionのHostnameは外部IP、testにはBastionからアクセスされる内部IPを指定します。 これで踏み台の準備は完了。アクセスしてみましょう。

Tsuyoshis-iMac:~ Tsuyoshi$ ssh test
Warning: Permanently added '52.68.123.35' (ECDSA) to the list of known hosts.
Warning: Permanently added '10.0.10.5' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2015.09-release-notes/
11 package(s) needed for security, out of 27 available
Run "sudo yum update" to apply all updates.

[ec2-user@ip-10-0-10-5 ~]$

無事アクセス出来ました。次に疎通確認です。Googleへリクエストを送ってtracerouteで通信経路を見てみましょう。

[ec2-user@ip-10-0-10-5 ~]$ traceroute www.google.com
traceroute to www.google.com (173.194.126.241), 30 hops max, 60 byte packets
 1  * * ip-10-0-0-199.ap-northeast-1.compute.internal (10.0.0.199)  0.484 ms
 2  ec2-175-41-192-128.ap-northeast-1.compute.amazonaws.com (175.41.192.128)  0.812 ms  0.855 ms ec2-175-41-192-132.ap-northeast-1.compute.amazonaws.com (175.41.192.132)  0.902 ms
 3  27.0.0.172 (27.0.0.172)  2.088 ms 27.0.0.154 (27.0.0.154)  2.632 ms 27.0.0.172 (27.0.0.172)  2.168 ms
 4  27.0.0.154 (27.0.0.154)  2.646 ms  2.727 ms  2.732 ms
 5  27.0.0.136 (27.0.0.136)  4.308 ms 15169.tyo.equinix.com (203.190.230.31)  3.556 ms 27.0.0.136 (27.0.0.136)  4.172 ms
 6  72.14.236.82 (72.14.236.82)  4.184 ms  4.011 ms 52.95.30.198 (52.95.30.198)  11.451 ms
 7  72.14.236.82 (72.14.236.82)  3.832 ms 15169.tyo.equinix.com (203.190.230.31)  3.063 ms 72.14.236.82 (72.14.236.82)  3.793 ms
 8  72.14.232.109 (72.14.232.109)  5.493 ms  5.195 ms  5.428 ms
 9  nrt04s08-in-f17.1e100.net (173.194.126.241)  4.175 ms  4.169 ms  4.184 ms
[ec2-user@ip-10-0-10-5 ~]$

最初に通っている「ip-10-0-0-199.ap-northeast-1.compute.internal 」、これがNATになります。 つまりNATを通じて送ることができてますね!

[ec2-user@ip-10-0-10-5 ~]$ traceroute www.google.com
traceroute to www.google.com (173.194.126.241), 30 hops max, 60 byte packets
 1  * * ip-10-0-0-199.ap-northeast-1.compute.internal (10.0.0.199)  0.484 ms
 2  ec2-175-41-192-128.ap-northeast-1.compute.amazonaws.com (175.41.192.128)  0.812 ms  0.855 ms ec2-175-41-192-132.ap-northeast-1.compute.amazonaws.com (175.41.192.132)  0.902 ms
 3  27.0.0.172 (27.0.0.172)  2.088 ms 27.0.0.154 (27.0.0.154)  2.632 ms 27.0.0.172 (27.0.0.172)  2.168 ms
 4  27.0.0.154 (27.0.0.154)  2.646 ms  2.727 ms  2.732 ms
 5  27.0.0.136 (27.0.0.136)  4.308 ms 15169.tyo.equinix.com (203.190.230.31)  3.556 ms 27.0.0.136 (27.0.0.136)  4.172 ms
 6  72.14.236.82 (72.14.236.82)  4.184 ms  4.011 ms 52.95.30.198 (52.95.30.198)  11.451 ms
 7  72.14.236.82 (72.14.236.82)  3.832 ms 15169.tyo.equinix.com (203.190.230.31)  3.063 ms 72.14.236.82 (72.14.236.82)  3.793 ms
 8  72.14.232.109 (72.14.232.109)  5.493 ms  5.195 ms  5.428 ms
 9  nrt04s08-in-f17.1e100.net (173.194.126.241)  4.175 ms  4.169 ms  4.184 ms
[ec2-user@ip-10-0-10-5 ~]$

テキストでも動かせる

当然のようにAPIも用意してあります。 現在は

の3つです。

まとめ

いかがでしたでしょうか。ここ最近新機能、新サービスが毎日のように入ってきてますのでなかなか眠れない日々が続いております。AWSのサービスにも師走とかあるんでしょうか。。。 色々なサービスが日々出ているその中でもこのサービス開始は待ちに待っていた人も多いかと思います。 是非この「NAT Gateway」使ってみてください。

参考リンク