Amazon VPCとは?AWSのネットワークの基本をやさしく解説
AWSでWebサービスを動かすときは、サーバーを用意するだけでなく、「どの通信を受け付けるか」「サーバー同士をどうつなぐか」も決めます。AWS上でこうしたネットワークを作るサービスが Amazon VPC(Amazon Virtual Private Cloud) です。
身近な例:ネットショップで実現したいこと
Section titled “身近な例:ネットショップで実現したいこと”AWSでネットショップを運営する場面を考えてみます。お客さんには商品を見て注文してもらいたい一方で、注文データを誰でも直接開ける状態にはしたくありません。
そのため、次のようなことを実現したいはずです。
- お客さんにはサイトを公開する。 商品ページや注文画面には、インターネットからアクセスできるようにする。
- 注文データは内部で扱う。 サイトの処理には必要でも、お客さんがデータベースへ直接接続できないようにする。
- サーバーから必要なサービスに接続する。 ソフトウェア更新の配布元や、商品画像を保存するAWSのサービスを使えるようにする。
このように、外へ公開する部分と内部だけで使う部分を分け、どこからどこへ通信できるかを決めたいときにVPCを使います。VPCはネットワークを設計するための土台です。商品ページを表示するプログラムや注文処理そのものは、EC2など別のリソースが動かします。
それぞれの機能は何を担当する?
Section titled “それぞれの機能は何を担当する?”この目的を実現するために、VPCにはどんな機能があるのかを順に見ていきます。
VPC:ネットワーク全体
Section titled “VPC:ネットワーク全体”VPCは、AWS内に作るネットワーク全体の枠です。EC2やデータベースなどのAWSリソースを、このネットワークに接続して使います。
「敷地」にたとえると、VPCは敷地全体、EC2は敷地の中に置くサーバーです。敷地だけあってもサーバーは動かず、サーバーだけあっても接続するネットワークを決める必要があります。
IPアドレスとCIDR:住所の範囲
Section titled “IPアドレスとCIDR:住所の範囲”ネットワーク上のサーバーには、行き先を見つけるためのIPアドレスが使われます。VPCでは、その中で使うIPアドレスの範囲を決め、さらにサブネットごとに範囲を分けます。
範囲は CIDR(サイダー) という書き方で表します。たとえば、次の例ではサブネットの範囲がVPC全体の範囲の中にあります。
VPC全体: 10.0.0.0/16サブネット: 10.0.1.0/24ここでは「VPCやサブネットで使うIPアドレスの範囲を示すもの」と覚えておけば十分です。
サブネット:用途ごとの区画
Section titled “サブネット:用途ごとの区画”サブネットは、VPCの中を用途ごとに分けた小さなネットワークです。ネットショップなら、外からの通信を受ける場所と、注文データを扱う場所を分けるために使います。
- パブリックサブネット: インターネットとの出入口へつながる経路がある
- プライベートサブネット: インターネットとの出入口へ直接つながる経路がない
サブネットは、AWSの場所の単位である アベイラビリティゾーン(AZ) ごとに作ります。複数のAZにサーバーを分けると、1か所の障害に備えやすくなります。
ルートテーブル:通信の行き先案内
Section titled “ルートテーブル:通信の行き先案内”ルートテーブルは、通信の宛先を見て、どこへ送るかを決める案内表です。同じVPC内の相手へ送る通信と、インターネットへ向かう通信では行き先が異なります。ルートテーブルは、そうした行き先を指定します。
サブネットにルートテーブルを関連付けることで、そのサブネット内のサーバーがどの経路を使うかを決めます。
インターネットゲートウェイ:VPCとインターネットの出入口
Section titled “インターネットゲートウェイ:VPCとインターネットの出入口”インターネットゲートウェイは、VPCとインターネットをつなぐ出入口です。パブリックサブネットからインターネットへ通信するために使います。
パブリックサブネットにサーバーを置いただけで、誰でも接続できるわけではありません。サーバーに割り当てるIPアドレスや通信を許可するルールも関係します。
NATゲートウェイ:プライベート側から外へ出るための中継
Section titled “NATゲートウェイ:プライベート側から外へ出るための中継”NATゲートウェイは、プライベートサブネットのサーバーが外部へ通信するときの中継役です。たとえば、サーバーからソフトウェア更新を取得する用途があります。
外部からプライベートサブネットのサーバーへ直接つなぐためのものではありません。サーバー側から始めた通信の返事を受け取れるようにします。
セキュリティグループ:サーバーごとの通信ルール
Section titled “セキュリティグループ:サーバーごとの通信ルール”セキュリティグループは、EC2などのリソースに届く通信や、そこから出る通信を制限するルールです。「注文処理をするサーバーからデータベースへの通信だけを許可する」のように、必要な通信を選んで許可します。
ネットワークの通り道があっても、セキュリティグループで許可されていない通信は通りません。経路と通信ルールの両方が必要です。
VPCエンドポイント:AWSサービスへのプライベートな入口
Section titled “VPCエンドポイント:AWSサービスへのプライベートな入口”VPCエンドポイントは、VPC内のサーバーから一部のAWSサービスへプライベートに接続するための入口です。たとえば、サーバーからAmazon S3を利用するときに使えます。
機能を組み合わせると、どんな構成になる?
Section titled “機能を組み合わせると、どんな構成になる?”最初のネットショップの例を、ここまでに紹介した機能で表してみます。利用者からの通信を受け付けるロードバランサー、サイトを動かすEC2、注文データを保存するデータベースは、VPCの中で使うAWSリソースです。
| 実現したいこと | 機能の使い方 |
|---|---|
| お客さんにサイトを公開する | パブリックサブネットにロードバランサーを置き、インターネットゲートウェイへの経路を用意する |
| 注文データを内部で扱う | EC2とデータベースをプライベートサブネットに置き、セキュリティグループで「ロードバランサーからEC2」「EC2からデータベース」など必要な通信だけを許可する |
| サーバーから更新を取得する | プライベートサブネットからの外向き通信をNATゲートウェイへ送る |
| 商品画像をAmazon S3に保存する | 対応するVPCエンドポイントを使ってS3へ接続する |
flowchart LR
User[お客さん] --> Internet[インターネット]
IGW[インターネットゲートウェイ]
subgraph VPC[Amazon VPC]
subgraph Public[パブリックサブネット]
LB[ロードバランサー]
NAT[NATゲートウェイ]
end
subgraph Private[プライベートサブネット]
App[EC2:サイトの処理]
DB[データベース:注文データ]
end
Endpoint[VPCエンドポイント]
end
S3[Amazon S3:商品画像]
Internet --> IGW --> LB
LB --> App
App --> DB
App --> NAT --> IGW
IGW --> Internet
App --> Endpoint --> S3
図の矢印は、どこからどこへ通信させたいかを示しています。実際には、各サブネットのルートテーブルと各リソースのセキュリティグループなどを設定して、この通信経路と許可範囲を作ります。
- VPCは仮想PCではなく、AWS内のネットワーク
- 仮想サーバーはEC2で、VPCのネットワークにつないで使う
- VPCを使うと、通信を受ける場所と、外部から隠すサーバーの場所を分けられる
- サブネットでネットワークを区切り、ルートテーブルで通信の行き先を決める
- ゲートウェイやセキュリティグループで、通信の通り道と許可範囲を制御する
この記事では機能の役割を説明しました。VPCやサブネットを実際に作り、各設定を行う手順は別の記事で扱います。