AWS NAT Gatewayのリージョナル版を試してみました

記事タイトルとURLをコピーする

はじめに

AWS NAT Gatewayに新しく、リージョナルNAT Gatewayが追加されました。この機能により、単一のNAT Gatewayを作成するだけで、ワークロードの存在に基づいてVPC内の複数のアベイラビリティーゾーンに自動的に拡張・縮小し、高可用性を維持しながら設定と管理を簡素化できます。

AWS NAT Gateway now supports regional availability - AWS

早速、作成して動作を確認してみました。

リージョナルNAT Gatewayとは

先に簡単に、リージョナルNAT Gatewayで何が変わり、何がよくなるのかをまとめます。

  • マルチAZ自動展開: 複数のAZに自動的にNAT Gatewayを配置。従来ですと、AZごとにNAT Gatewayを作成しルートテーブルを管理する必要がありました
  • 管理の簡素化: 自動で単一のNAT Gatewayが展開されるため、ルートテーブルもAZ毎に異なった宛先にする必要がなくなります
  • セキュリティの強化: パブリックサブネットの作成が不要となり、不用意にパブリックサブネットにリソースが作成されることを防げます
  • IP上限の引き上げ: ゾーンNAT Gatewayに比べ利用可能なIPアドレス数が増えています(8 -> 32)。より多くのクライアントによる接続が可能になります
  • 手動モード: 手動でNAT Gatewayを配置することも可能です。自動で拡張されたくない場合な手動モードで、ゾーンNAT Gatewayのように管理も可能です

実際に試してみる

では、実際に試してみましょう。リリース時点ではCLIもしくはSDKからのみ作成可能で、マネジメントコンソールからは作成不可となっています。

環境情報

$ aws --version
aws-cli/2.32.0 Python/3.13.9 Linux/6.1.156-177.286.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023

リージョナルNAT Gatewayの作成

リージョナルNAT Gatewayを作成するには、--availability-mode regionalオプションを指定します。

aws ec2 create-nat-gateway \
  --vpc-id vpc-073d4c2cf7e2667d5 \
  --availability-mode regional

レスポンス:

{
    "ClientToken": "989c6cc3-5325-470a-9897-7b600bb53a15",
    "NatGateway": {
        "CreateTime": "2025-11-20T00:38:29+00:00",
        "NatGatewayAddresses": [],
        "NatGatewayId": "nat-1138e09e22001462a",
        "State": "pending",
        "VpcId": "vpc-073d4c2cf7e2667d5",
        "ConnectivityType": "public",
        "AvailabilityMode": "regional",
        "AutoScalingIps": "enabled",
        "AutoProvisionZones": "enabled"
    }
}

注目すべきポイントは以下のとおりです。

  • AvailabilityMode: regionalが指定されている
  • AutoScalingIps: enabled - Elastic IPの自動スケーリングが有効
  • AutoProvisionZones: enabled - AZへの自動プロビジョニングが有効

なお、今回は自動モードで作成されていますが、IPやAZへの展開を手動で行う手動モードもあるようです。

マネジメントコンソールでもNAT Gatewayを確認できます。ただ、リージョナルであることの確認やIPアドレスの編集などはまだ未対応です。

作成後の状態確認

少し待ってから状態を確認すると、複数のAZにElastic IPが自動的に割り当てられていることがわかります。

aws ec2 describe-nat-gateways --nat-gateway-ids nat-1138e09e22001462a

レスポンス:

{
    "NatGateways": [
        {
            "CreateTime": "2025-11-20T00:38:29+00:00",
            "NatGatewayAddresses": [
                {
                    "AllocationId": "eipalloc-04f5a2cfa401a958c",
                    "PublicIp": "xxx.xxx.xxx.xxx",
                    "AssociationId": "eipassoc-038e876386b490d73",
                    "Status": "succeeded",
                    "AvailabilityZone": "us-east-1b",
                    "AvailabilityZoneId": "use1-az4"
                },
                {
                    "AllocationId": "eipalloc-06aa94792ae563af2",
                    "PublicIp": "x.x.x.x",
                    "AssociationId": "eipassoc-007fcef17b2311e27",
                    "Status": "succeeded",
                    "AvailabilityZone": "us-east-1a",
                    "AvailabilityZoneId": "use1-az2"
                }
            ],
            "NatGatewayId": "nat-1138e09e22001462a",
            "State": "available",
            "VpcId": "vpc-073d4c2cf7e2667d5",
            "Tags": [],
            "ConnectivityType": "public",
            "AvailabilityMode": "regional",
            "AutoScalingIps": "enabled",
            "AutoProvisionZones": "enabled",
            "RouteTableId": "rtb-0835fb1922839075e"
        }
    ]
}

注目すべきポイントは以下のとおりです。

  • NatGatewayAddressesに2つのエントリが存在
  • それぞれ異なるAZ(us-east-1aus-east-1b)に配置
  • 各AZに独自のElastic IPが自動的に割り当てられている

ルートテーブルの確認

リージョナルNAT Gatewayは、専用のルートテーブルに関連付けられます。

aws ec2 describe-route-tables --route-table-ids rtb-0835fb1922839075e

レスポンス:

{
    "RouteTables": [
        {
            "Associations": [
                {
                    "Main": false,
                    "RouteTableAssociationId": "rtbassoc-042d2c2ae45a9e2c5",
                    "RouteTableId": "rtb-0835fb1922839075e",
                    "GatewayId": "nat-1138e09e22001462a",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-0835fb1922839075e",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.20.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                },
                {
                    "DestinationCidrBlock": "0.0.0.0/0",
                    "GatewayId": "igw-0198cc91057a8853e",
                    "Origin": "CreateRoute",
                    "State": "active"
                },
                {
                    "DestinationIpv6CidrBlock": "2600:1f18:640c:7e00::/56",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                }
            ],
            "Tags": [],
            "VpcId": "vpc-073d4c2cf7e2667d5",
            "OwnerId": "xxx"
        }
    ]
}

ルートテーブルのAssociationsを見ると、GatewayIdにNAT GatewayのIDが関連付けられていることがわかります。これはリージョナルNAT Gateway専用のルートテーブルです。

サブネットルートテーブルの編集

既存のサブネットのルートテーブルへ、今回作成したリージョナルNAT Gatewayへのルートを追加します。

これで、リージョナルNAT Gatewayを利用してインターネットへの接続が可能になりました。異なるAZに複数サブネットがある場合も、宛先としては同一のNAT Gatewayを指定できます。

ENIを追加してAZ拡張が実施されるか確認してみる

ドキュメントには、以下のとおりENIの検知を契機にAZに対してNAT Gatewayが追加されるとあります。

When you launch resources in a new Availability Zone, the regional NAT gateway detects the presence of a network interface (ENI) in that Availability Zone and automatically expands to that zone. Similarly, the NAT Gateway contracts from the Availability Zone that has no active workloads.

試しにENIのみを作成(EC2にアタッチなし)したところ、しばらくして追加のIPが付与されていることが確認できました。ドキュメント通りにENIを検知して、NAT Gatewayが拡張されています。

aws ec2 describe-nat-gateways --nat-gateway-ids nat-1138e09e22001462a
{
    "NatGateways": [
        {
            "CreateTime": "2025-11-20T00:38:29+00:00",
            "NatGatewayAddresses": [
                {
                    "AllocationId": "eipalloc-04f5a2cfa401a958c",
                    "PublicIp": "x.x.x.x",
                    "AssociationId": "eipassoc-038e876386b490d73",
                    "Status": "succeeded"
                },
                {
                    "AllocationId": "eipalloc-06aa94792ae563af2",
                    "PublicIp": "x.x.x.x",
                    "AssociationId": "eipassoc-007fcef17b2311e27",
                    "Status": "succeeded"
                },
                {
                    "AllocationId": "eipalloc-0533efd69df1d20e0",
                    "PublicIp": "x.x.x.x",
                    "AssociationId": "eipassoc-038332dda73b1df6f",
                    "Status": "succeeded"
                }
            ],
            "NatGatewayId": "nat-1138e09e22001462a",
            "State": "available",
            "VpcId": "vpc-073d4c2cf7e2667d5",
            "Tags": [],
            "ConnectivityType": "public"
        }
    ]
}

手動モードでの作成

手動モードでは、EIPの割り当てと、どのAZに対してNAT Gatewayを展開するかを手動で指定することが可能です。

NAT Gatewayを作成する際に、以下の様にオプション--availability-zone-addressでEIPやAZを指定します。

$ aws ec2 create-nat-gateway \
     --vpc-id vpc-073d4c2cf7e2667d5 \
     --availability-mode regional \
     --availability-zone-address '[
         {
             "AvailabilityZone": "us-east-1a",
             "AllocationIds": ["eipalloc-0002c72e76b2b1523"]
         },
         {
             "AvailabilityZone": "us-east-1d", 
             "AllocationIds": ["eipalloc-0178da0daa7b001cf"]
         }
     ]'

しばらく待つと、指定したEIPとAZでNAT Gatewayが立ち上がります。

$ aws ec2 describe-nat-gateways --nat-gateway-ids nat-12a01e8b84b14c1a6
{
    "NatGateways": [
        {
            "CreateTime": "2025-11-20T06:49:25+00:00",
            "NatGatewayAddresses": [
                {
                    "AllocationId": "eipalloc-0178da0daa7b001cf",
                    "PublicIp": "x.x.x.x",
                    "AssociationId": "eipassoc-07d4f4a5979ff8132",
                    "Status": "succeeded",
                    "AvailabilityZone": "us-east-1d",
                    "AvailabilityZoneId": "use1-az1"
                },
                {
                    "AllocationId": "eipalloc-0002c72e76b2b1523",
                    "PublicIp": "x.x.x.x",
                    "AssociationId": "eipassoc-0fefcd7c3479819ee",
                    "Status": "succeeded",
                    "AvailabilityZone": "us-east-1a",
                    "AvailabilityZoneId": "use1-az2"
                }
            ],
            "NatGatewayId": "nat-12a01e8b84b14c1a6",
            "State": "available",
            "VpcId": "vpc-073d4c2cf7e2667d5",
            "Tags": [],
            "ConnectivityType": "public",
            "AvailabilityMode": "regional",
            "AutoScalingIps": "disabled",
            "AutoProvisionZones": "disabled",
            "RouteTableId": "rtb-0d137aa25841e72bc"
        }
    ]
}

AutoScalingIpsAutoProvisionZonesが無効になっています。

料金体系

リージョナルNAT Gatewayの料金は、従来のNAT Gatewayとは別に料金体系が設定されています。ただし、AZごとに作成された分に費用がかかるという点と、単位あたりの料金は変わっておらず、コスト的にはあまり変化はないでしょう。

以下は、東京リージョンの料金となります。

従来のNAT Gateway料金

  • 時間料金: $0.062/時間
  • データ処理料金: $0.062/GB

リージョナルNAT Gateway料金

  • 時間料金: $0.062/時間/AZ
  • データ処理料金: $0.062/GB

料金計算例

3つのAZに展開されたリージョナルNAT Gatewayを使用した場合:

  • 時間料金: $0.062 × 3 AZ = $0.186/時間
  • データ処理料金: $0.062/GB

従来の3AZ構成(各AZにNAT Gatewayを個別作成)と比較すると、時間料金は同じですが、管理の手間が大幅に削減されます。

まとめ

リージョナルNAT Gatewayは、マルチAZ構成のNAT Gatewayを簡単に実現できる便利な機能です。従来は各AZごとにNAT Gatewayを作成し、それぞれにElastic IPを割り当て、ルートテーブルを設定する必要がありましたが、リージョナル版では1つのコマンドで完結します。

パブリックなNAT Gatewayが必要であれば、ファーストチョイスとしてリージョナルNAT Gatewayを選んで良いのではないでしょうか。

参考

石田順一(記事一覧)

カスタマーサクセス部 CS3課