こんにちは、ソーイ株式会社の髙﨑です。
受託開発でAWSの構成を扱う中で、NAT Gatewayの通信経路と料金について調べる機会がありました。
特に、大量のデータをAWS外部のサービスへ送信する場合、どの経路を通って通信しているのかによって、利用するAWSサービスや料金が変わることがあります。
そこで今回は、プライベートサブネットからAWS外部のサービスへ通信する場合を題材に、NAT Gatewayを利用する仕組みや料金、AWS上で通信経路を確認する方法について整理します。
目次
1. プライベートサブネットから外部サービスへ通信する
AWSでは、EC2などのリソースをプライベートサブネットに配置する構成があります。
プライベートサブネットにあるリソースから、AWS外部のサービスへ通信する場合には、外部へ通信するための経路が必要です。
例えば、プライベートサブネットにあるアプリケーションから、インターネット上のAPIやストレージサービスなどへアクセスするケースがあります。
今回のような構成では、プライベートサブネットから外部へ通信するために、NAT Gatewayを利用することがあります。
プライベートサブネットに配置したリソースから外部へ通信するとき、どの経路を利用するかはルートテーブルによって決まります。
では、なぜプライベートサブネットから外部へ通信するときにNAT Gatewayを利用するのでしょうか。
次章では、ルートテーブルとNAT Gatewayの関係について整理します。
2. NAT Gatewayを経由する仕組み
プライベートサブネットにあるリソースから、インターネットなどの外部へ通信する場合、NAT GatewayなどのNATデバイスを利用できます。
今回のような構成では、プライベートサブネットに関連付けられたルートテーブルに、以下のような経路が設定されます。
送信先 ターゲット
0.0.0.0/0 NAT Gateway
ルートテーブルには、通信の「送信先」と、その通信を転送する「ターゲット」が設定されています。
通信の宛先に応じて、どの経路を利用するかが決まります。
0.0.0.0/0は、IPv4のすべてのアドレスを対象とする経路です。
そのため、より具体的な経路が設定されていない外部向けの通信は、0.0.0.0/0のルートに従ってNAT Gatewayへ送られます。
今回の通信経路を整理すると、以下のようになります。
一般的な構成では、NAT Gatewayをパブリックサブネットに配置します。
プライベートサブネットにあるリソースからNAT Gatewayへ通信を送り、NAT GatewayからInternet Gatewayを経由して外部へ通信します。
このように、プライベートサブネットにあるリソースでも、NAT Gatewayを経由することで外部サービスと通信できます。
NAT Gatewayの料金
NAT Gatewayを利用すると、NAT Gateway自体の利用時間に対する料金に加えて、NAT Gatewayが処理したデータ量に応じた料金が発生します。
そのため、通常のアプリケーション通信だけでなく、大量のデータを外部へ送信する処理でもNAT Gatewayの料金を考慮する必要があります。
例えば、短時間に大量のデータを外部サービスへ送信する処理では、NAT Gatewayを通過する通信量も大きくなる可能性があります。
ここで重要なのは、単純に「大量のデータを扱うから料金が高くなる」と考えるのではなく、実際にどの通信がNAT Gatewayを通過するのかを確認することです。
同じAWS上の処理であっても、通信先やルートテーブルの設定によって、利用するネットワーク経路は変わります。
そのため、大量のデータを扱う処理では、アプリケーションの処理だけでなく、AWS上の通信経路まで確認する必要があります。
3. NAT Gatewayを使わない構成を考える
NAT Gatewayを利用しない方法の1つとして、外部へ通信するリソースをパブリックサブネットに配置する構成が考えられます。
3.1 パブリックサブネットから外部サービスへアクセスする
AWSでは、Internet Gatewayへのルートを持つサブネットをパブリックサブネットとしています。
IPv4でインターネットへ通信する場合は、通信元のリソースにパブリックIPv4アドレスなども必要になります。
現在の構成と比較すると、通信経路は以下のように変わります。
この構成ではNAT Gatewayを経由しないため、NAT Gatewayのデータ処理料金は発生しません。
ただし、AWSからインターネットへデータを送信する場合のデータ転送料金は、NAT Gatewayを使わない構成でも発生します。東京リージョンの料金例では、NAT Gatewayのデータ処理料金が1GBあたり$0.062、インターネットへのデータ転送が最初の10TB/月まで1GBあたり$0.114となっています。
そのため、NAT Gatewayを使わない構成に変更しても、削減できるのはNAT Gatewayの料金分であり、インターネットへのデータ転送料金は残ります。大量のデータを送信する場合は、両方の料金を含めてコストを見積もる必要があります。
一方で、リソースをパブリックサブネットに配置することで、プライベートサブネットを利用する構成とはセキュリティ面での考慮点が変わります。
パブリックサブネットに配置したリソースは、インターネットとの通信が可能になるため、セキュリティグループなどのアクセス制御も含めて構成を考える必要があります。
そのため、NAT Gatewayの料金だけを理由にパブリックサブネットへ変更するのではなく、通信するリソースの性質やセキュリティ、運用方法も含めて構成を検討することが重要です。
3.2 S3のゲートウェイエンドポイントを利用する
ここまで、プライベートサブネットからAWS外部のサービスへ通信する場合について説明しました。
一方で、通信先がAmazon S3の場合は、S3のゲートウェイVPCエンドポイントを利用する方法があります。
ゲートウェイVPCエンドポイントを利用すると、プライベートサブネットからS3へ、NAT GatewayやInternet Gatewayを経由せずにアクセスできます。また、ゲートウェイエンドポイント自体に追加料金はかかりません。
ゲートウェイVPCエンドポイントを利用すると、ルートテーブルにはS3のAWS管理プレフィックスリストを宛先とし、ゲートウェイエンドポイントをターゲットとするルートが追加されます。
例えば、以下のような構成です。
送信先 ターゲット
0.0.0.0/0 NAT Gateway
pl-xxxxxxxx vpce-xxxxxxxx
pl-xxxxxxxxは、S3のIPアドレス範囲を表すAWS管理プレフィックスリストです。
このルートは0.0.0.0/0よりもS3に対して具体的な経路となるため、S3宛ての通信はゲートウェイエンドポイントへ送られ、それ以外の外部向け通信はNAT Gatewayへ送られます。
そのため、プライベートサブネットからS3へ大量のデータを送受信する場合は、S3のゲートウェイVPCエンドポイントを利用することで、NAT Gatewayを経由せずに通信できます。
3.3 AWSで通信経路を確認する
AWSの通信経路を調査するときは、まず通信元のリソースがどのサブネットに配置されているかを確認します。
その後、そのサブネットに関連付けられているルートテーブルを確認します。
確認するポイントは以下です。
- 通信元のリソースがどのサブネットにあるか
- そのサブネットにどのルートテーブルが関連付けられているか
-
0.0.0.0/0のターゲットが何になっているか - S3のプレフィックスリストへのルートがあるか
- NAT Gatewayがどのサブネットに配置されているか
- 外部サービスへの通信がどの経路を通るか
- その経路で利用するAWSサービスにどのような料金が発生するか
例えば、ルートテーブルに
0.0.0.0/0 → NAT Gateway
pl-xxxxxxxx → VPC Endpoint
のような設定があれば、S3宛ての通信はゲートウェイエンドポイント、それ以外の外部向け通信はNAT Gatewayへ送られる構成だと判断できます。S3のゲートウェイエンドポイントでは、AWS管理のプレフィックスリストを利用したルートが設定されます。
このように、AWS上の通信経路を調べるときには、0.0.0.0/0のルートだけを見るのではなく、より具体的な経路が設定されていないかも確認することが重要です。
3.4 大量データを扱う処理では事前に確認する
大量のデータを扱う処理では、通常のアプリケーション通信とは異なり、短期間に大量の通信が発生することがあります。
そのため、処理を実装する前に、以下のような点を確認しておくと、必要なAWSサービスやコストを整理しやすくなります。
例えば、AWS外部のサービスへ大量のデータを送信する場合は、
- どのリソースから通信するのか
- そのリソースはどのサブネットにあるのか
- どのルートテーブルを利用するのか
- NAT Gatewayを経由するのか
- どの程度の通信量が発生するのか
- 通信経路上で利用するAWSサービスにどのような料金が発生するのか
といった点を確認できます。
特に、一時的なデータ移行やバックアップなど、短期間に大量のデータを扱う処理では、普段のアプリケーション通信とは異なる通信量になる可能性があります。
そのため、AWSのサービス料金を確認するときには、アプリケーション側の処理だけではなく、その処理によってどのAWSサービスを利用するのかまで確認しておくことが重要です。
4. まとめ
今回は、プライベートサブネットからAWS外部のサービスへ通信する場合を題材に、NAT Gatewayの仕組みと料金について整理しました。
NAT Gatewayを利用する構成では、ルートテーブルの設定によって外部向けの通信がNAT Gatewayへ送られます。
また、NAT Gatewayでは利用時間だけでなく、処理したデータ量も料金に関係するため、大量のデータを扱う処理では通信経路を事前に確認しておくことが重要です。
次回、大量データを扱う処理を設計するときは、通信元のサブネットやルートテーブル、NAT Gatewayの有無を確認し、通信経路上で利用するAWSサービスまで含めてコストを見積もるようにします。
参考
- NAT gateways - Amazon VPC
- NAT ゲートウェイの料金 - Amazon VPC
- Configure route tables - Amazon VPC
- Amazon VPC の料金 - AWS
お知らせ
技術ブログを週1〜2本更新中、ソーイをフォローして最新記事をチェック!
https://qiita.com/organizations/sewii


