0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

第3回 Terraform講座 Internet Gateway

0
Last updated at Posted at 2026-08-13

前回は Subnet を作った。

ここまでで、

VPC
└── Subnet
    └── EC2

というAWSネットワークの「中身」ができてきた。

でも、ここで一つ問題がある。

このEC2、どうやってインターネットに出る?

今回から、いよいよネットワークの「外側」を作っていく。


今日のテーマ

Internet Gateway

今回も、ただコードを書くわけじゃない。

目標は、

「なぜInternet Gatewayが必要なのか」

を理解すること。


まず質問

Q1

VPCを作っただけで、

Internet
    ↓
   EC2

この通信はできる?

ちょっと考えてみてほしい。


答えは、

できない。


なぜ?

VPCは、簡単に言えばAWS上に作った自分専用のネットワーク

イメージすると、

マンション

みたいなもの。

マンションを建てただけでは、

マンション
   ↓
道路
   ↓
外の世界

とはつながっていない。

だから、VPCの中にEC2を作っただけでは、インターネットへ出るための経路がない。


そこで登場するのが

Internet Gateway

Internet Gateway、略して IGW

ざっくり言えば、

VPCとインターネットの間をつなぐための出入口

と考えると分かりやすい。

イメージすると、

Internet
    ↓
Internet Gateway
    ↓
   VPC

マンションで言えば、

IGW=玄関

みたいなもの。


Terraformで作ってみる

コードはこれ。

resource "aws_internet_gateway" "igw" {

  vpc_id = aws_vpc.main.id

}

今回も一行ずつ見ていく。


resource "aws_internet_gateway"

これは、

Internet GatewayというAWSリソースを作ります

という宣言。


"igw"

これはTerraform上で付ける名前。

aws_internet_gateway.igw

のように、あとからこのIGWを参照するときに使う。

名前なので、igw じゃなくてもいい。

例えば、

resource "aws_internet_gateway" "main"

でもOK。


vpc_id = aws_vpc.main.id

ここは第2回でやったことと同じ。

つまり、

「このInternet Gatewayを、どのVPCに接続するの?」

を指定している。

今回の場合は、

aws_vpc.main

で作ったVPC。

だから、

vpc_id = aws_vpc.main.id

となる。


ここで問題

VPCとIGWを作った。

構成は、

Internet
    ↓
   IGW
    ↓
   VPC
    ↓
  Subnet
    ↓
   EC2

になった。

じゃあ、

これでEC2はインターネットに出られる?


答えは……

まだ出られない。


なぜ?

ここが今回の一番大事なところ。

IGWは、

「出入口」

を作っただけ。

でも、

EC2からIGWまでの道がない。

例えばEC2が、

8.8.8.8

にアクセスしたいとする。

EC2からすると、

「この通信、どこに送ればいいの?」

となる。

IGWは、

「俺は出入口だけど、どの通信を俺に送るかは決めてないよ」

という状態。

つまり、

Internet
    ↓
   IGW
    ×
   EC2

まだ道がつながっていない。


そこで登場するのがRoute Table

ここで、

Route Table

が必要になる。

Route Tableは、ざっくり言えば

「この通信はどこへ送る?」という案内板


例えば、

0.0.0.0/0
     ↓
    IGW

というルートを設定する。

すると、

EC2がインターネットへ通信

Route Tableを見る

「0.0.0.0/0ならIGWだ」

IGWへ送る

という流れができる。


構成を比較してみる

IGWを作っただけだと、

Internet
    ↓
   IGW


   Route Table


  Subnet
    ↓
   EC2

まだ途中。

Route Tableによって経路を作ると、

Internet
    ↓
Internet Gateway
    ↓
Route Table
    ↓
  Subnet
    ↓
   EC2

という形になる。

これで、

「EC2からインターネットへどうやって行くのか」

が見えてきた。


今日の課題

まずは自分でコードを書いてみる。

resource "aws_internet_gateway" "igw" {

  vpc_id = aws_vpc.main.id

}

もちろん今回もコピペ禁止

一文字ずつ書いてみる。


Q1

なぜ、

vpc_id = aws_vpc.main.id

が必要?

第2回のSubnetと同じ考え方で答えてみよう。


Q2

今回の一番大事な問題。

構成が、

Internet
    ↓
   IGW
    ↓
   VPC
    ↓
  Subnet
    ↓
   EC2

なのに、

なぜEC2はまだインターネットへ出られない?


今回の回答

今回のQ1に対する回答は、

どのVPCの中に作るのかを示すため。

これはそのまま正解。

そしてQ2。

CIDRとかいろいろと分けられてるけど、IGWだけじゃどこに転送すればいいかを決められないから。

これが今回かなり良い回答だった。


Q2のレビュー

普通なら、

「Route Tableが必要だから」

で終わるところ。

でも今回の回答は、

「IGWだけじゃどこに転送すればいいかを決められない」

だった。

ここが重要。

Route Tableが必要なのは、

ただ「Route TableというAWSサービスがあるから」ではない。

EC2から見て、

「この通信を次にどこへ送ればいいの?」

という問題を解決するため。


例えばEC2が、

8.8.8.8

へ通信したい。

すると、

EC2
 ↓
「8.8.8.8ってどこに送ればいい?」
 ↓
Route Table
 ↓
「0.0.0.0/0だからIGWへ」
 ↓
IGW
 ↓
Internet

となる。

つまりRoute Tableは、

通信の行き先を決める案内板

として働いている。


今回分かったこと

今回の内容を整理すると、

VPC

AWS上に作るネットワーク。

Internet Gateway

VPCとインターネットの出入口。

Route Table

通信をどこへ送るか決める経路情報。


だから、

VPC
│
├── Internet Gateway
│
├── Route Table
│
└── Subnet
      │
      └── EC2

という構成になっていく。

そしてTerraformでは、

AWSの構成図にある「リソース」と「リソース同士の関係」をコードで表現している。

ここが今回の一番大きなポイント。


次回:Route Table

次回はいよいよ、

resource "aws_route_table" "public" {

  vpc_id = aws_vpc.main.id

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.igw.id
  }

}

を作る。

そして、

0.0.0.0/0って何?

なぜgateway_idなの?

なぜvpc_idじゃないの?

というところを考える。

ここを理解すると、

EC2
 ↓
Route Table
 ↓
Internet Gateway
 ↓
Internet

という通信経路が、ただの暗記じゃなくて自分の頭の中で説明できるようになる。

第1回でVPCを作り、第2回でSubnetを作り、第3回でInternet Gatewayを追加した。

次回は、その間に**「道」を作る。**

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?