NAT Gateway の料金が高い本当の理由 - データ処理料金の仕組みと回避策
NAT Gateway の時間料金とデータ処理料金が高額になるメカニズムを分解し、VPC エンドポイント、NAT インスタンス、IPv6 への移行など、コストを削減する実践的な回避策を解説します。
NAT Gateway の二重課金構造
NAT Gateway の料金は 2 つの要素で構成されます。時間料金は、NAT Gateway が存在する時間に対して課金されます。ap-northeast-1 では 1 時間あたり 0.062 USD で、月額に換算すると約 45 USD です。使用していなくても、存在しているだけで課金されます。データ処理料金は、NAT Gateway を通過するデータ量に対して課金されます。1GB あたり 0.062 USD です。この料金は、通常のデータ転送料金に加算されます。つまり、プライベートサブネットの EC2 インスタンスがインターネット上の API を呼び出すと、NAT Gateway のデータ処理料金 (0.062 USD/GB) + インターネットへのデータ転送料金 (0.114 USD/GB) の合計 0.176 USD/GB が課金されます。マルチ AZ 構成で各 AZ に NAT Gateway を配置すると、時間料金だけで月額 135 USD (3 AZ) になります。NAT Gateway は何もしなくても月額 135 USD かかるため、小規模な環境ではコストの大きな割合を占めます。
データ処理料金が膨らむパターン
NAT Gateway のデータ処理料金が想定外に高額になるパターンがあります。最も多いのは、プライベートサブネットから AWS サービスの API を呼び出すケースです。S3 へのファイルアップロード、CloudWatch Logs へのログ送信、SQS へのメッセージ送信など、AWS サービスへの通信がすべて NAT Gateway を経由すると、データ処理料金が発生します。たとえば、Lambda 関数が VPC 内に配置されており、S3 に 1 日 100GB のデータをアップロードする場合、NAT Gateway のデータ処理料金だけで月額約 186 USD (100GB × 30 日 × 0.062 USD) になります。もう一つのパターンは、AZ をまたぐ NAT Gateway の利用です。AZ-a のインスタンスが AZ-c の NAT Gateway を使用すると、AZ 間のデータ転送料金 (0.01 USD/GB) も追加で発生します。各 AZ に NAT Gateway を配置し、ルートテーブルで同じ AZ の NAT Gateway を使用するよう設定することで、AZ 間転送料金を回避できます。
VPC エンドポイントによるコスト削減
NAT Gateway のコストを削減する最も効果的な方法は、AWS サービスへの通信を VPC エンドポイント経由に切り替えることです。S3 と DynamoDB にはゲートウェイエンドポイントが利用でき、追加料金なしで NAT Gateway を迂回できます。ゲートウェイエンドポイントは、ルートテーブルにエントリを追加するだけで機能し、データ処理料金もかかりません。S3 への大量のデータ転送がある環境では、ゲートウェイエンドポイントの導入だけで NAT Gateway のデータ処理料金を大幅に削減できます。その他の AWS サービス (CloudWatch、SQS、SNS、KMS、ECR など) にはインターフェースエンドポイント (PrivateLink) を使用します。インターフェースエンドポイントは 1 時間あたり 0.014 USD + データ処理 0.01 USD/GB の料金がかかりますが、NAT Gateway のデータ処理料金 (0.062 USD/GB) よりも安価です。データ量が多いサービスから優先的にインターフェースエンドポイントを導入してください。CloudWatch Logs、ECR (コンテナイメージのプル)、Systems Manager が効果の大きいサービスです。
NAT インスタンスという選択肢
NAT Gateway の代わりに、EC2 インスタンスで NAT 機能を実現する NAT インスタンスという選択肢があります。t4g.nano (月額約 3 USD) に NAT の設定を行えば、NAT Gateway の時間料金 (月額 45 USD) を大幅に削減できます。NAT インスタンスにはデータ処理料金がかかりません。通常の EC2 のデータ転送料金のみです。ただし、NAT インスタンスにはデメリットがあります。可用性の管理が自分の責任になります。NAT Gateway はマネージドサービスで自動的に冗長化されますが、NAT インスタンスは単一の EC2 インスタンスであり、障害時の自動復旧を自分で設計する必要があります。スループットも EC2 インスタンスのネットワーク帯域に制限されます。NAT Gateway は最大 100Gbps のスループットを提供しますが、t4g.nano のネットワーク帯域は最大 5Gbps です。開発環境やトラフィックの少ない環境では NAT インスタンスが合理的ですが、本番環境では NAT Gateway の信頼性が必要です。fck-nat という OSS の AMI を使えば、NAT インスタンスのセットアップを簡素化できます。
IPv6 への移行 - NAT Gateway が不要になる未来
IPv6 を使用すれば、NAT Gateway を完全に排除できる可能性があります。IPv6 アドレスはグローバルにユニークであるため、NAT (Network Address Translation) が不要です。プライベートサブネットの EC2 インスタンスに IPv6 アドレスを割り当て、Egress-Only Internet Gateway を使用すれば、インスタンスからインターネットへのアウトバウンド通信が可能になります。Egress-Only Internet Gateway は無料です。ただし、IPv6 への完全移行にはハードルがあります。すべての AWS サービスが IPv6 をサポートしているわけではありません。また、通信先のサーバーが IPv6 をサポートしていない場合、IPv4 での通信が必要です。現実的なアプローチは、デュアルスタック (IPv4 + IPv6) 構成で段階的に IPv6 に移行することです。AWS サービスへの通信は VPC エンドポイント経由、IPv6 対応の外部サービスへの通信は Egress-Only Internet Gateway 経由、IPv4 のみの外部サービスへの通信だけ NAT Gateway 経由、という構成にすれば、NAT Gateway を通過するトラフィックを最小化できます。NAT Gateway のコスト最適化を体系的に学ぶには、専門書籍 (Amazon)が参考になります。