はじめに
前回の続きです。
前回は、Terraformをインストールして、.tfにS3を定義し、構築しました。
今回はVPC+EC2を構築していきます。
まずは知識を付けよう
VPC構築して、インターネットゲートウェイをアタッチして、パブリックサブネット、プライベートサブネットを設定して、NAT Gatewayを設定して、セキュリティグループを設定して...
など、中途半端に浅い知識はあるのですが、今一度勉強し直します。
構成
構成は以下のようにします。
踏み台サーバーをパブリックサブネットに配置し、Webサーバーをプライベートサブネットに配置し、ALBを利用した一般的な構成です。

セキュリティグループは全リソースに設定しています。
図では踏み台サーバーのみ表示しています。
それぞれの用途や設定値について学習します。
学習
IPアドレスとは?
- グローバルIPアドレス:世界中で一意のインターネット上で使われる住所
- プライベートIPアドレス:外からは見られない内部で使われる住所
AWSのVPCでは、プライベートIPアドレスを使用します。
CIDR(サイダー)とは?
IPアドレスの範囲。
10.0.0.0/16 の場合、先頭16ビットが固定になります。
10.0.0.0/16
00001010.00000000.xxxxxxxx.xxxxxxxx
←-固定(16ビット)-→ ←-自由(16ビット)-→
= 10.0.0.0 〜 10.0.255.255
= 65,536個のIPアドレスが使える
VPCとは?
AWSの中に作成するプライベートネットワークのこと。
サブネットとは?
VPCの中で用途ごとに区切ったネットワークです。
先程のCIDRの話に戻すと、
VPC(10.0.0.0/16)の場合、各サブネットはVPCの範囲に収めます(例:10.0.0.0/24)
以下の種類があります。
| パブリックサブネット | プライベートサブネット | |
|---|---|---|
| インターネットからの直接アクセス | できる | できない |
| 置くもの | (例)ALB、EC2、NAT Gateway | (例)EC2、DB |
| インターネットの出口 | Internet Gateway | NAT Gateway(→ Internet Gateway) |
AZとは?
Availability Zoneの略称です。
物理的に分けられたデータセンターのことで、各リージョンで複数のAZが存在します。
AZを分ける事で、片方のデータセンターで障害が起きても、切り替えて運用が可能になります。
ALBとは?
Application Load Balancerの略称です。
外からのリクエストを複数のEC2に分散させるサービスのことです。
先程、AZの説明をしましたが、ALBがEC2に対して、ヘルスチェックを行います。この仕組みにより、片方のAZで障害が起きても、切り替えが可能になります。
ALBを構成する要素は主に以下となります。
- ロードバランサー本体:ALBそのものです。2つのパブリックサブネットに跨って配置します
- ターゲットグループ:「どのEC2に振り分けるか」のグループです。プライベートサブネットのEC2をここに登録します
- リスナー:「どのポートで待ち受けるか」のルールです。(例:ポート80で受けたらターゲットグループに転送)
Internet Gatewayとは?
VPCとインターネットを繋げる出入口です。
NAT Gatewayとは?
Internet Gatewayがあっても、プライベートサブネットのEC2はグローバルIPを持っていないため、そのままだとインターネットに出ることができません。
NAT Gatewayとは、パブリックサブネットに配置する、プライベートサブネットのEC2がインターネットに出るための出口です。入口にはならないので、セキュリティ上安全な仕組みです。
AWSが提供する固定のグローバルIP(Elastic IP)を紐づけることで、外部との通信が可能になります。
一般的なHTTPリクエスト・レスポンスはALBが行うため、NAT Gatewayが無いとレスポンスが返せない訳ではありません。
Docker環境を構築する際や外部APIを呼び出すシステムの際は、必要です。
ルートテーブルとは?
通信をどこに流すかを決めるルール表です。
今回の構成では、パブリックサブネット用のルートテーブルと、プライベートサブネット用のルートテーブルを作成する予定です。
パブリックサブネット用
| 送信先 | ターゲット |
|---|---|
| 10.0.0.0/16 | local |
| 0.0.0.0/0 | Internet Gateway |
プライベートサブネット用
| 送信先 | ターゲット |
|---|---|
| 10.0.0.0/16 | local |
| 0.0.0.0/0 | NAT Gateway |
10.0.0.0/16 → VPC内の通信はそのまま内部で転送
0.0.0.0/0 → それ以外(インターネット宛)はInternet Gateway又はNAT Gatewayへ
セキュリティグループとは?
EC2やALBへの通信の許可・拒否ルールを定義するものです。
セキュリティグループはデフォルトで全拒否なので、許可するルールを定義していきます。
インバウンド(外→中)、アウトバウンド(中→外)、それぞれにルール定義が必要です。
踏み台サーバーの役割
プライベートサブネットのEC2に安全にSSH接続するための中継サーバーです。
踏み台が無いと、Webサーバーをパブリックにする必要があるため、セキュリティ上、必要なものとなります。
踏み台EC2(パブリック)→WebサーバーEC2(プライベート)
にすることで、攻撃の入口を一か所に制限し、外から見える事を防ぐことができます。
安全にSSH接続をするために、踏み台サーバーが必要になります。
基本的なHTTP通信は、Internet Gateway→ALB→WebサーバーEC2(プライベート) の通信経路になるため、踏み台サーバーは経由されません。
あくまで開発者が開発・運用する際に、安全なSSH接続を実現するために踏み台を経由します。
最後に
基礎的な知識を付ける事が出来ました。
次回は、これまでの知識を元にTerraformで構築してみます。