Day 4: サブネット設計の極意:可用性とスケーラビリティを確保
皆さん、こんにちは!「実践!AWSネットワーク構築・運用30日チャレンジ」のDay 4へようこそ!
昨日は、AWSのVPCウィザードを使って、基本的なVPCとパブリックサブネットを作成しました。これで、インターネットに公開するWebサーバーなどを配置できる基盤ができましたね。
今日は、さらに一歩進んで、より堅牢でセキュアなシステムを構築するために不可欠な「プライベートサブネット」の設計に焦点を当てます。データベースサーバーやアプリケーションサーバーなど、インターネットから直接アクセスさせたくない重要なリソースを配置するためのサブネットです。
可用性(Availability)とスケーラビリティ(Scalability)を確保しつつ、セキュリティを最大化するサブネット設計の「極意」を学び、実践していきましょう。
1. 本日のゴールとアーキテクチャイメージ
本日のゴールは、昨日のVPCに加えて、以下の構成を持つより実践的なVPCを構築することです。
- 1つのVPC: (昨日作成済み)
- 2つのパブリックサブネット: (昨日作成済み)
- 2つのプライベートサブネット: データベースやアプリケーションサーバーなど、インターネットから直接アクセスさせないリソースを配置する場所。高可用性のために異なるアベイラビリティゾーン (AZ) に配置します。
- 2つのNATゲートウェイ (NAT Gateway): プライベートサブネット内のリソースがインターネットへアウトバウンド通信(例: OSアップデート、外部APIへのアクセス)を行うためのゲートウェイ。高可用性のために各AZに配置します。
- 追加のルートテーブル: プライベートサブネットからNATゲートウェイを経由してインターネットへルーティングするための設定。
想定するアーキテクチャ
+------------------------------------------------------------------------------------------------+
| VPC (例: 10.0.0.0/16) |
| |
| +-------------------+ |
| | Internet Gateway | |
| +--------+----------+ |
| | |
| | (ルートテーブル経由) |
| | |
| +-----------------------------------------------------------------------------------------+ |
| | アベイラビリティゾーン (AZ) A (ap-northeast-1a) | |
| | | |
| | +---------------------------------------+ +---------------------------------------+ | |
| | | パブリックサブネット A (10.0.1.0/24) | | プライベートサブネット A (10.0.3.0/24) | | |
| | | (Webサーバなど) | | (App/DBサーバなど) | | |
| | +---------------------------------------+ +---------------------------------------+ | |
| | | ^ | |
| | | | | |
| | +-------------------------------------+ | |
| | (NAT Gateway A) | |
| +-----------------------------------------------------------------------------------------+ |
| |
| +-----------------------------------------------------------------------------------------+ |
| | アベイラビリティゾーン (AZ) C (ap-northeast-1c) | |
| | | |
| | +---------------------------------------+ +---------------------------------------+ | |
| | | パブリックサブネット C (10.0.2.0/24) | | プライベートサブネット C (10.0.4.0/24) | | |
| | | (Webサーバなど) | | (App/DBサーバなど) | | |
| | +---------------------------------------+ +---------------------------------------+ | |
| | | ^ | |
| | | | | |
| | +-------------------------------------+ | |
| | (NAT Gateway C) | |
| +-----------------------------------------------------------------------------------------+ |
| |
+------------------------------------------------------------------------------------------------+
2. サブネット設計の「極意」:可用性とスケーラビリティ
昨日のVPC作成で、すでに2つのパブリックサブネットを異なるAZに配置しました。これは「可用性」を確保するための基本的な考え方です。特定のAZに障害が発生しても、他のAZでサービスを継続できるようにするためです。
今日のポイントは、この可用性の考え方をプライベートサブネットにも適用し、さらに「セキュリティ」と「スケーラビリティ」を考慮した設計を行うことです。
なぜプライベートサブネットが必要なのか?
- セキュリティの向上: データベースやアプリケーションサーバーは、インターネットから直接アクセスされる必要がありません。これらをプライベートサブネットに配置することで、外部からの不正アクセスリスクを大幅に低減できます。
- 役割の分離: パブリックサブネットにはWebサーバーなど公開リソース、プライベートサブネットには内部リソースと、役割を明確に分けることで、ネットワーク管理がしやすくなります。
- アウトバウンド通信の制御: プライベートサブネット内のリソースがインターネットにアクセスする必要がある場合(例: OSのアップデート、外部APIへのアクセス、S3バケットからのデータダウンロードなど)、NATゲートウェイを経由させることで、アウトバウンド通信を集中管理し、セキュリティログの取得なども容易になります。
サブネット設計のベストプラクティス
- AZを跨いだ配置: 常に複数のAZにサブネットを配置し、リソースを分散させましょう。これにより、単一障害点(Single Point of Failure)を排除し、システムの可用性を高めます。
-
CIDRブロックの計画:
- VPC全体のCIDRブロック(例:
/16
)から、各サブネットに適切なサイズのCIDRブロック(例:/24
)を割り当てます。 - 将来的なリソースの増加を見越して、十分なIPアドレス空間を確保しましょう。
- パブリックとプライベートでIPアドレス範囲を明確に区別すると管理しやすくなります。
- VPC全体のCIDRブロック(例:
-
役割に応じたサブネット分割:
- Web層(パブリック)、アプリケーション層(プライベート)、データベース層(プライベート)など、役割ごとにサブネットを分割します。
- これにより、セキュリティグループやNACLでよりきめ細やかなアクセス制御が可能になります。
-
NATゲートウェイの配置:
- プライベートサブネット内のリソースがインターネットへのアウトバウンド通信を行う必要がある場合、NATゲートウェイをパブリックサブネットに配置します。
- 高可用性を確保するため、NATゲートウェイも複数のAZに配置し、それぞれのNATゲートウェイに対応するプライベートサブネットのルートテーブルを設定します。
3. プライベートサブネットとNATゲートウェイの作成ステップバイステップ
それでは、Day 3で作成したVPCにプライベートサブネットとNATゲートウェイを追加していきましょう。
事前準備:Elastic IPアドレスの確保
NATゲートウェイを作成するには、固定のパブリックIPアドレスであるElastic IPアドレス (EIP) が必要です。
- VPCサービスの左側ナビゲーションペインから「Elastic IP」をクリックします。
- 「Elastic IP アドレスの割り当て」ボタンをクリックします。
- 「割り当て」ボタンをクリックします。
- これをAZの数分(今回は2つ)繰り返して、2つのEIPを確保しておきましょう。
- 注意: EIPは、インスタンスに関連付けられていないと課金対象となる場合があります。今回はすぐにNATゲートウェイにアタッチするので問題ありませんが、使い終わったら必ず解放しましょう。
3.1. プライベートサブネットの作成
- VPCサービスの左側ナビゲーションペインから「サブネット」をクリックします。
- 「サブネットを作成」ボタンをクリックします。
- 以下の情報を入力して、最初のプライベートサブネットを作成します。
- VPC ID: 昨日作成したVPCを選択します。
-
サブネット名: 例:
my-vpc-private-subnet-a
-
アベイラビリティゾーン: パブリックサブネットAと同じAZを選択します(例:
ap-northeast-1a
)。 -
IPv4 CIDR ブロック: 例:
10.0.3.0/24
(VPCのCIDR10.0.0.0/16
の中から、パブリックサブネットと重複しない範囲を選びます)
- 「サブネットを作成」ボタンをクリックします。
- 同様の手順で、もう一つのプライベートサブネットを作成します。
-
サブネット名: 例:
my-vpc-private-subnet-c
-
アベイラビリティゾーン: パブリックサブネットCと同じAZを選択します(例:
ap-northeast-1c
)。 -
IPv4 CIDR ブロック: 例:
10.0.4.0/24
-
サブネット名: 例:
これで2つのプライベートサブネットが作成されました。
3.2. NATゲートウェイの作成
次に、各プライベートサブネットからのインターネットアウトバウンド通信を可能にするNATゲートウェイを作成します。
- VPCサービスの左側ナビゲーションペインから「NAT ゲートウェイ」をクリックします。
- 「NAT ゲートウェイを作成」ボタンをクリックします。
- 以下の情報を入力して、最初のNATゲートウェイを作成します。
-
名前: 例:
my-nat-gateway-a
- サブネット: パブリックサブネットAを選択します(NATゲートウェイはパブリックサブネットに配置する必要があります)。
- Elastic IP の割り当て: 事前準備で確保したEIPの中から、1つを選択して割り当てます。
-
名前: 例:
- 「NAT ゲートウェイを作成」ボタンをクリックします。
- 同様の手順で、もう一つのNATゲートウェイを作成します。
-
名前: 例:
my-nat-gateway-c
- サブネット: パブリックサブネットCを選択します。
- Elastic IP の割り当て: 残りのEIPを選択して割り当てます。
-
名前: 例:
NATゲートウェイの作成には数分かかります。ステータスが「Available」になるまで待ちましょう。
3.3. プライベートサブネット用ルートテーブルの作成と関連付け
最後に、プライベートサブネットからのアウトバウンド通信をNATゲートウェイにルーティングするためのルートテーブルを設定します。
-
VPCサービスの左側ナビゲーションペインから「ルートテーブル」をクリックします。
-
「ルートテーブルを作成」ボタンをクリックします。
-
以下の情報を入力して、最初のプライベートサブネット用ルートテーブルを作成します。
-
名前: 例:
my-private-rtb-a
- VPC: 昨日作成したVPCを選択します。
-
名前: 例:
-
「ルートテーブルを作成」ボタンをクリックします。
-
作成されたルートテーブルを選択し、「ルート」タブをクリックし、「ルートを編集」ボタンをクリックします。
-
「ルートを追加」をクリックし、以下のルートを追加します。
-
宛先:
0.0.0.0/0
(インターネットへの全てのトラフィック) - ターゲット: 作成したNATゲートウェイAを選択します。
-
宛先:
-
「変更を保存」をクリックします。
-
次に、「サブネットの関連付け」タブをクリックし、「サブネットの関連付けを編集」ボタンをクリックします。
-
作成したプライベートサブネットAにチェックを入れ、「関連付けを保存」をクリックします。
-
同様の手順で、もう一つのプライベートサブネット用ルートテーブルを作成します。
-
名前: 例:
my-private-rtb-c
- VPC: 昨日作成したVPCを選択します。
-
ルート: 宛先
0.0.0.0/0
、ターゲットはNATゲートウェイCを選択します。 - サブネットの関連付け: プライベートサブネットCにチェックを入れます。
-
名前: 例:
これで、プライベートサブネットからインターネットへのアウトバウンド通信が、それぞれのAZに配置されたNATゲートウェイを経由するようになりました。
4. サブネット設計の確認と注意点
- IPアドレスの重複なし: 各サブネットのCIDRブロックがVPC内で重複していないことを確認しましょう。
- AZの分散: パブリックサブネットとプライベートサブネットがそれぞれ異なるAZに分散して配置されていることを確認しましょう。
- ルートテーブルの関連付け: 各サブネットが、意図したルートテーブル(パブリック用またはプライベート用)に正しく関連付けられていることを確認しましょう。
- NATゲートウェイの課金: NATゲートウェイは、稼働時間とデータ処理量に応じて課金されます。不要な場合は停止または削除を検討しましょう。特に、EIPは関連付けられていないと課金対象となるため、NATゲートウェイを削除する際は、EIPも忘れずに解放してください。
5. AI時代におけるサブネット設計の考慮事項
AI/MLワークロードは、大量のデータ処理と高速な通信を要求します。サブネット設計の段階で、これらの要件を考慮することが重要です。
- 高スループットネットワーク: 大規模なデータセットを扱う場合、ネットワークの帯域幅がボトルネックになることがあります。VPCエンドポイント(S3などへのプライベート接続)や、Direct Connect(オンプレミスとの専用線接続)の利用を検討し、データ転送の効率を高めましょう。
- GPUインスタンスの配置: GPUインスタンスは通常、プライベートサブネットに配置し、セキュリティを確保します。学習データへのアクセスは、VPCエンドポイントやプライベート接続を介して行い、インターネットへの露出を最小限に抑えます。
- データレイクとの連携: S3などのデータレイクは、VPCエンドポイントを介してプライベートサブネットから直接アクセスできるように設定することが推奨されます。これにより、データ転送のセキュリティとパフォーマンスが向上します。
- ネットワーク分離: 開発環境、ステージング環境、本番環境など、環境ごとにVPCを分離するか、VPC内でサブネットを厳密に分離し、セキュリティグループやNACLでアクセスを制御することが、AIモデルの安全な運用には不可欠です。
本日のまとめと次へのステップ
今日は、昨日のVPCにプライベートサブネットとNATゲートウェイを追加し、より実践的な多層アーキテクチャを構築しました。これにより、インターネットから直接アクセスさせたくない重要なリソースを安全に配置できる基盤が整いました。
可用性、スケーラビリティ、そしてセキュリティを考慮したサブネット設計は、AWSクラウドで堅牢なシステムを構築する上で非常に重要です。特に、パブリックとプライベートの役割分担、そしてNATゲートウェイによるアウトバウンド通信の制御は、セキュリティのベストプラクティスとして覚えておきましょう。
明日のDay 5では、「インターネットゲートウェイとルートテーブル:外部接続の要」と題して、今日作成したVPCのインターネット接続部分であるインターネットゲートウェイと、その経路を制御するルートテーブルについて、さらに詳細に掘り下げていきます。特に、様々なルーティングシナリオと、それらがどのように機能するのかを理解することで、より複雑なネットワーク設計にも対応できるようになります。
今日のハンズオン、お疲れ様でした!プライベートサブネットとNATゲートウェイの作成が無事にできた方、ぜひ「いいね」👍をお願いします!