壊れないネットワークの作り方:NATゲートウェイと「郵便局」の意外な共通点
こんにちは!SREの現場で日々ネットワークのトラブルと格闘しているエンジニアです。
皆さんは、AWSやGCPでインフラを組むとき、「マルチAZ(可用性ゾーン)」という言葉を聞いたことはありますか? 「なぜわざわざお金をかけて、複数のゾーンに分ける必要があるの?」と思う方も多いはずです。
今日は、そんなインフラ構築の登竜門であり、本番環境の生命線でもある「NATゲートウェイの冗長化」について、難しい専門用語はなるべく置いておいて、身近な「郵便局」に例えて解説していきます。
—
NATゲートウェイは「外の世界へつながる唯一の郵便局」
まず、NATゲートウェイ(NAT GW)の役割をイメージしてみましょう。
プライベートサブネットにあるサーバーたちは、セキュリティのために「引きこもり」状態です。外から直接アクセスできない代わりに、自分たちからも外の世界(インターネット)へ直接出ていくことはできません。でも、アップデートのパッチをダウンロードしたり、APIを叩いたりしたい時はありますよね。
そこで登場するのが、NATゲートウェイです。これは、プライベートなエリアにあるサーバーが、外へ手紙(パケット)を出すための「郵便局」です。
- プライベートサブネット: 住民しかいない住宅街
- NATゲートウェイ: 外の世界へ手紙を届けてくれる郵便局
- インターネットゲートウェイ: 郵便局から外の世界へ続く、唯一の幹線道路
この郵便局がないと、住宅街の住人は外の世界から隔離されてしまいます。だからこそ、この「郵便局」が止まってしまうと一大事なのです。
—
なぜ「1つ」ではダメなのか?:ゾーン障害の恐怖
もし、郵便局が1つしかなかったらどうでしょう?
その郵便局がある場所で地震(=AZ障害)が起きたら、もうその住宅街からは手紙が出せなくなります。サービス全体がストップしてしまう、これが「単一障害点」の怖さです。
これを防ぐために、各AZに個別のNATゲートウェイを配置するという設計が、プロの現場では「当たり前」の選択になります。
- AZ-aの郵便局は、AZ-aの住人の手紙を運ぶ
- AZ-bの郵便局は、AZ-bの住人の手紙を運ぶ
こうすれば、仮にAZ-aで災害が起きても、AZ-bの郵便局は元気に稼働しているので、サービス全体の停止を防げるのです。これが「冗長化」の基本戦略です。
—
現場で使う構成:ルートテーブルによる「交通整理」
さて、実際にどうやって「各AZの郵便局」を使わせるのか、その仕組みを見てみましょう。ここで主役になるのが「ルートテーブル」です。
ルートテーブルは、いわば住民に配られる「地図」です。「外へ行くなら、この郵便局を通ってね」と書かれた案内図ですね。
# AZ-aのサブネット向けルートテーブル(例)
宛先: 0.0.0.0/0 (インターネット全般)
ターゲット: nat-0123456789abcdef (AZ-aにあるNATゲートウェイ)
# AZ-bのサブネット向けルートテーブル(例)
宛先: 0.0.0.0/0 (インターネット全般)
ターゲット: nat-9876543210fedcba (AZ-bにあるNATゲートウェイ)
もしAZ-aが全滅したとしても、AZ-bのルートテーブルは「AZ-bの郵便局」を指し示しているため、通信は影響を受けずに走り続けます。これが、マルチAZ構成の真骨頂です。
—
実践:TerraformでNATゲートウェイを構築するヒント
実際にインフラをコードで書く(IaC)場合、以下のようにAZごとにNATゲートウェイを定義します。
# AZ-a用のNATゲートウェイ
resource "aws_nat_gateway" "nat_a" {
allocation_id = aws_eip.nat_a.id
subnet_id = aws_subnet.public_a.id # AZ-aのパブリックサブネットに配置
tags = { Name = "nat-gateway-az-a" }
}
# AZ-b用のNATゲートウェイ
resource "aws_nat_gateway" "nat_b" {
allocation_id = aws_eip.nat_b.id
subnet_id = aws_subnet.public_b.id # AZ-bのパブリックサブネットに配置
tags = { Name = "nat-gateway-az-b" }
}
このように、「サブネット」と「NATゲートウェイ」を同じAZで揃えることが、ネットワーク設計の鉄則です。これを怠ると、ゾーンをまたぐ通信が発生して「AZ間転送コスト」がかさんだり、通信が遅延したりする原因になります。
—
最後に:完璧なシステムなんてない、だから備える
「NATゲートウェイを全AZに置くのはコストがかかる」という意見もあります。確かに、NATゲートウェイは維持費がかかるサービスです。
しかし、障害が起きた時に「通信が全滅して、深夜に叩き起こされる」というリスクと、コストを天秤にかけてみてください。ビジネスを止めないための「保険」として、この設計は非常にコスパが良い投資だと私は考えています。
ネットワークは目に見えませんが、郵便局の例えのように、パケットたちは今日もどこかで、誰かが作った地図(ルートテーブル)に従って、せっせと手紙を届けています。
もし今度、クラウドの管理画面を開いたら、「この郵便局はどこに立っているのかな?」と想像してみてください。きっと、より頼もしいアーキテクチャが描けるはずですよ!
それでは、また次回のブログでお会いしましょう。ハッピーなクラウドライフを!
コメント