最近AWSで使えるようになったNAT Gateway。これまで外部直結のネットワークインターフェースを待たない(持たせたくない)DBインスタンスを構築した場合は「NATインスタンス」を1台構築する必要があった。これだとインスタンスを1台余計に管理しなくちゃだけど、NAT Gateway機能を使えばそれも必要なくなるので置き換え作業したときのメモ。
NAT Gateway導入イメージ
VPC環境に2つのSubnetが存在。Subnetの詳細は以下の通り。
Subnet 1 (Public Subnet)
Webサーバなど外部ネットワークからアクセスするインスタンスを設置する。
インスタンスはPublic,Privateの両方のIPアドレスを持つ。
Public IPを持っているのでInternet Gatewayを経由して外部ネットワークとのアクセスが可能。
Subnet 2 (Private Subnet)
DBサーバなど外部ネットワークからアクセスする必要のないインスタンスを設置する。
インスタンスはPrivate IPのみ持つ。Public IPを持たないためインスタンスへのログインは一度Public Subnetに 設置されたインスタンスにログインしてからとなる。(踏み台サーバ)
このままではInternet Gatewayを利用できず外部ネットワークに出ることができないのでOSの更新など必要に応じて インターネット抜けができるようにNAT Gatewayを設置する。(NAT GatewayはElastic IPが必要となる)
1. NAT Gatewayの構築
[サービス]->[VPC]->[NATゲートウェイ]->[NATゲートウェイの作成]
サブネット: NAT Gatewayを設置するサブネットを選択
Elastic IP 割り当てID: xxxxx
*NAT Gatewayを利用するのは「Private Subnet」のインスタンスだが、NAT Gatewayを設置するのは「Public Subnet」 であることに注意。
*Elastic IPは事前に払いだしたものが無い場合は「新しいEIPの作成」で新規に払い出す。
2. NAT Gatewayを利用するルートテーブル(経路)の作成
[サービス]->[ルートテーブル]->[ルートテーブルに作成]
ネームタグ: 識別しやすい名前をつけます。
VPC: NAT Gatewayを設置するVPCを選択します。
3. ルートテーブルにNAT Gatewayのテーブル(経路)を追加
新しく作成したルートテーブルを選択し、下段タブの「ルート」をクリックする。
続いて[別ルートの追加]をクリックして
送信先: 0.0.0.0/0
ターゲット: nat-xxxxx <- NAT GatewayのID
を設定して[保存]する。
4. サブネットの関連付け
保存後このルートテーブルに「Private Subnet」を関連付ける。静的ルーティングのイメージ。
[サブネットの関連付け]タブを選択。
[編集]をクリックすると、どのサブネットがこのルーティングテーブルに関連付けられているか表示されます。
最初は関連付けられているサブネットは無い。「Private Subnet」の「関連付け」にチェックを入れて[保存]する。
5. 動作確認
「Private Subnet」に設置されたインスタンスがLinux OSであれば
$ telnet google.com 80
Trying 216.58.220.174…
Connected to google.com.
Escape character is ‘^]’.
応答があればOK。NAT Gatewayを経由してインターネット抜けしたことを確認する場合はcurlコマンドを利用する。
$ curl ifconfig.me
xxxx.xxxx.xxxx.xxxx <- NAT GatewayのElastic IPであることを確認
*curlコマンドは応答までに時間を要することが多い