はじめに
AWSの勉強を兼ねて、WebアプリケーションをAWS上に構築する備忘録です。
今回はインフラ構築の最初のステップとして、AWS Cloud Development Kit(AWS CDK)を使って以下の構成を作成しました。
- VPC
- Private Isolated Subnet × 2
- 2つのAvailability Zoneを使用
- NAT Gatewayなし
VPCとは
まず、VPCの概要についてです。
Virtual Private Cloud(VPC)は、AWS上に作成できる仮想ネットワークです。
AWS上でEC2やRelational Database Service(RDS)などのリソースを利用する際に、どのネットワークに配置し、どのような通信を許可するかを設計するための土台となります。
VPCを作成する際には、VPC内で使用するIPアドレスの範囲をClassless Inter-Domain Routing(CIDR)形式で指定します。
今回作成するVPCでは、以下のCIDRを設定しました。
10.0.0.0/16
VPCの中には、さらにネットワークを分割したSubnet(サブネット)を作成できます。
VPCが「AWS上に作る大きなネットワークの枠」だとすると、Subnetは「VPCの中を用途ごとに分割したネットワーク」と考えるのが分かりやすいです。
Default VPCとの違い
AWSでは、各リージョンにDefault VPCが用意されています。ただし、Default VPCは削除することもできるため、必ず存在するとは限りません。
今回はこのDefault VPCを変更せず、アプリケーション専用のVPCを新しく作成します。
AWSアカウント
└─ 東京リージョン(ap-northeast-1)
│
├─ Default VPC
│ 172.31.0.0/16
│
│ ├─ Public Subnet
│ ├─ Public Subnet
│ └─ Public Subnet
│
│ ※ AWSによって用意された既存VPC
│
└─ 今回作成したVPC
sesame-admin-vpc
10.0.0.0/16
│
├─ Availability Zone 1
│ └─ Private Isolated Subnet
│
└─ Availability Zone 2
└─ Private Isolated Subnet
↓
RDSなどを配置することを想定
Default VPCは、AWSをすぐに利用開始できるよう、あらかじめ用意されたVPCです。
一方、今回作成するsesame-admin-vpcは、このアプリケーション用にネットワーク構成を自分で定義したVPCです。
今回の構成では、Default VPCはそのまま残し、別のCIDRで新しいVPCを作成しています。
Default VPC : 172.31.0.0/16
sesame-admin-vpc : 10.0.0.0/16
Default VPCを直接変更することなく、アプリケーション専用のネットワーク環境を構築できます。
また、それぞれのVPCは独立した仮想ネットワークとして分離されているため、基本的にVPC同士が直接通信することはありません。
そのため、今回新しくVPCを作成しても、既存のDefault VPCとは分離されたネットワークとして利用できます。
Availability Zone(AZ)とは
次に、今回2つ使用するAvailability Zone(AZ)についてです。
AZは、AWSの各リージョン内に存在する、1つ以上の独立したデータセンターで構成された区画です。
今回使用している東京リージョン(ap-northeast-1)にも、複数のAZが存在します。
東京リージョン(ap-northeast-1)
│
├─ AZ
│ └─ Subnet
│
├─ AZ
│ └─ Subnet
│
└─ AZ
└─ Subnet
AZはそれぞれ物理的に分離されています。
そのため、複数のAZを利用することで、1つのAZで障害が発生した場合でも別のAZを利用できるような、可用性を考慮した構成を取ることができます。
今回の構成では、2つのAZを利用し、それぞれにPrivate Isolated Subnetを1つずつ作成しています。
VPC 10.0.0.0/16
│
├─ AZ 1
│ └─ Private Isolated Subnet
│
└─ AZ 2
└─ Private Isolated Subnet
Private Isolated Subnetとは
Subnetは、VPCのIPアドレス範囲をさらに分割したネットワークです。
AWS CDKでは、用途に応じてPublic Subnet、Private Subnet、Private Isolated Subnetなどを指定できます。
今回使用するPrivate Isolated Subnetは、Internet GatewayやNAT Gatewayを経由してインターネットへアクセスするためのルートを持たないSubnetです。
大まかな違いは以下のようになります。
| 種類 | インターネットへの通信 | 主な用途 |
|---|---|---|
| Public Subnet | Internet Gateway経由で可能 | ALBなど、外部との通信が必要なリソース |
| Private Subnet | NAT Gatewayなどを経由して可能 | アプリケーションサーバーなど |
| Private Isolated Subnet | インターネットへのルートなし | RDSなど、インターネットへの接続を必要としないリソース |
今回のWebアプリケーションでは、後ほどRDSを構築し、データベースエンジンとしてPostgreSQLを利用する予定です。
データベースをインターネットへ直接公開する必要はないため、RDSを配置するSubnetとしてPrivate Isolated Subnetを利用する構成としました。
NAT Gatewayとは
ここまでの説明でNAT Gatewayという言葉が出てきましたが、NAT GatewayはPrivate Subnet内のリソースからインターネットへ通信するために利用できるAWSのサービスです。
例えば、Private Subnetに配置したEC2からOSのアップデートやパッケージのダウンロードなどを行う場合、インターネットへの通信が必要になることがあります。
そのような場合に、NAT Gatewayを経由してインターネットへアクセスする構成を取ることができます。
VPC
│
├─ Public Subnet
│ └─ NAT Gateway
│ │
│ ↓
│ Internet Gateway
│ │
│ ↓
│ Internet
│
└─ Private Subnet
└─ EC2
│
└────→ NAT Gateway
イメージとしては、NAT GatewayがPrivate Subnetからインターネットへ通信するための「出口」のような役割を持っています。
ただし、インターネット側からNAT Gatewayを経由してPrivate Subnet内のリソースへ直接接続するための仕組みではありません。
今回使用しているPrivate Isolated Subnetは、NAT Gatewayなどを経由したインターネットへのルートを持たないSubnetです。
今回はRDSを配置することを想定しており、インターネットへ直接通信するための経路を必要としないため、NAT Gatewayを作成していません。
今回の構成
VPC
│
├─ AZ 1
│ └─ Private Isolated Subnet
│ └─ RDS用
│
└─ AZ 2
└─ Private Isolated Subnet
└─ RDS用
NAT Gateway:なし
インターネットへのルート:なし
また、NAT Gatewayは作成して稼働させると料金が発生します。
今回はインターネットへの通信経路を必要としない構成のため、不要なNAT Gatewayを作成しないことで構成をシンプルにし、コストも抑えています。
なぜPrivate Isolated Subnetを2つ作るのか
今回Private Isolated Subnetを2つ作成しているのは、PostgreSQLを2台構築するためではありません。
RDSで使用するDB Subnet Groupでは、複数のAZにまたがるSubnetを指定する必要があります。
そのため、今回は2つのAZにそれぞれPrivate Isolated Subnetを作成しています。
VPC
│
├─ AZ 1
│ └─ Private Isolated Subnet A ─┐
│ │
└─ AZ 2 ├─ DB Subnet Group
└─ Private Isolated Subnet B ─┘
│
└─ RDS
つまり、今回の構成は以下のような関係になります。
Private Isolated Subnet × 2
↓
異なる2つのAZに配置
↓
DB Subnet Groupとして利用
↓
RDSを配置
最初、自分もなぜSubnetが2つあるのか分からなかったのですが、Subnetが2つあるからといって、RDSが必ず2台作成されるわけではありません。
今回は、後ほどRDSを構築することを想定して、あらかじめ2つのAZにPrivate Isolated Subnetを用意しています。
以上が、今回構築するVPCやSubnetなどの概要になります。
今回は、VPC、Availability Zone、Private Isolated Subnet、NAT Gatewayについて、それぞれの役割と今回この構成にした理由を整理しました。
パート2では、AWS CDKを使って実際にVPCとPrivate Isolated Subnetを構築していきます。
関連記事