+ 作るログイン
1 / 20
AWS でサービスを作る ― 知識ゼロから、構成を自分で考えられるまで / 全32章

AWS 06:サブネットとルートテーブル

発行
アニメモ公式
版
第2版
改訂
コマ
全20

VPC という敷地を、AZ ごとの「部屋」(サブネット)に分け、部屋ごとに「道案内」(ルートテーブル)を貼ります。公開と非公開の違いは部屋の種類ではなく、道案内に 0.0.0.0/0 → インターネットゲートウェイ の1行があるかどうかだけで決まること、宛先から行を選ぶ「いちばん詳しい行が勝つ」規則、パブリック IP とメインルートテーブルの落とし穴を、同じ舞台の上で小包を動かしながら説明します。

大部屋のままでは、外に開ける範囲を決められない

第5章で、フォトログ用の VPC(10.0.0.0/16)を作りました。自分専用の敷地ができたわけですが、いまの VPC には2つの困りごとがあります。

困りごとどういうことか
外とつながる扉が無い作ったばかりの VPC は、インターネットとまったくつながっていない。利用者が Web サーバーに届かない
中に区別が無い敷地が1つの大部屋なので、扉を付けると Web も DB も同じように外とつながってしまう

図の Web サーバーは、インターネットから届いてほしいものです。利用者はここに写真を見に来ます。一方の DB は、Web サーバーからだけ使えればよく、外からは絶対に届いてほしくないものです。

大部屋のままでは、この「こっちは開けて、あっちは閉じる」ができません。そこで、敷地の中を部屋に分け、部屋ごとに「外へ出られるかどうか」を決められるようにします。

この部屋がサブネット、部屋ごとの外への出方を決めるのがルートテーブルです。この章では、この2つと、インターネットへの扉であるインターネットゲートウェイを作ります。

※2026年9月時点の情報です。画面・料金・細部は変わることがあります。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 1 / 20
  • 大部屋のままでは、外に開ける範囲を決められない
  • VPC 10.0.0.0/16(仕切りのない大部屋)
  • サーバー
  • Web サーバー
  • NG
  • 外とつながる扉がまだ無い
  • インターネット
  • 外から届いてほしい
  • NG
  • NG
  • 扉を付けると DB も一緒に開く
  • インターネット
  • データベース
  • DB
  • 外からは届いてほしくない
  • いまの VPC は、番号の範囲で囲っただけの空き地。中の区別も、外への道も無い
  • Web は外に見せ、DB は隠したい。そのためには中を「部屋」に分ける必要がある
  • ひらめき
  • VPC を作っただけでは中は1つの大部屋。外への扉も無く、付ければ全部が一緒に開いてしまう。

敷地を部屋に分け、部屋ごとに道案内を貼る

たとえ話で全体をつかんでおきましょう。

たとえAWS での名前役目
部屋サブネットVPC の番号の範囲を切り分けたもの。機械はどれかの部屋に置く
部屋に貼る道案内ルートテーブル「この宛先なら、ここへ渡す」を書いた表
敷地の外への扉インターネットゲートウェイVPC とインターネットの境目にある出入り口

図では、VPC の中を2つの部屋に分けました。左の部屋の道案内には「外へは扉から」と書いてあり、右の部屋の道案内には「VPC の中だけ」と書いてあります。

ここでいちばん大事なことを先に言っておきます。「公開の部屋」「非公開の部屋」という種類の部屋があるわけではありません。 AWS の画面でサブネットを作るとき、「公開」「非公開」を選ぶ欄はありません。

部屋はどれも同じ作りで、貼ってある道案内に「外への行」があるかどうかだけが違います。外への行がある部屋をパブリックサブネット(公開サブネット)、無い部屋をプライベートサブネット(非公開サブネット)と呼んでいるだけなのです。

これがわかっていると、「公開のつもりなのに外に出られない」「非公開のつもりなのに外から届いた」というトラブルのときに、まず道案内を見ればいい、とすぐにわかります。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 2 / 20
  • 敷地を部屋に分け、部屋ごとに道案内を貼る
  • VPC:photolog-prod 10.0.0.0/16
  • 公開の部屋(外と行き来できる)
  • 非公開の部屋(外とつながらない)
  • サーバー
  • Web サーバー
  • データベース
  • DB
  • インターネット
  • 外から届いてほしい
  • 外からは届いてほしくない
  • インターネット
  • 道案内:外へは扉から
  • 道案内:VPC の中だけ
  • 部屋=サブネット(VPC の番号を切り分けた範囲)。道案内=ルートテーブル(宛先ごとの行き先の表)
  • 「公開」「非公開」は部屋の種類ではなく、貼ってある道案内の違いで決まる
  • ひらめき
  • 部屋=サブネット、道案内=ルートテーブル。どの部屋から外へ出られるかは、道案内で決まる。

サブネットは、1つの AZ の中に作る

では、部屋を作っていきます。サブネットには、VPC にはない大事な決まりがあります。

置ける場所
VPC1つのリージョンの中。すべての AZ にまたがれる
サブネット1つの AZ の中だけ。AZ をまたぐことはできない

サブネットを作るときは、「どの AZ に作るか」と「VPC の番号のうち、どの範囲を使うか」を必ず指定します。

図では、AZ a と AZ c に、公開と非公開のサブネットを1つずつ、合わせて4つ作りました。番号の範囲は第5章で決めたとおりです。

部屋AZ範囲
公開サブネット aa10.0.1.0/24
公開サブネット cc10.0.2.0/24
非公開サブネット aa10.0.11.0/24
非公開サブネット cc10.0.12.0/24

なぜ AZ ごとに作るのでしょうか。サブネットは AZ をまたげないので、もし公開サブネットを AZ a にしか作らなかったら、AZ a の建物で停電が起きた瞬間に、公開の部屋がまるごと使えなくなります。同じ役目の部屋を AZ ごとに1つずつ用意しておけば、片方が止まっても、もう片方で動き続けられます。第2章で見た「複数 AZ にする理由」が、ここで形になります。

いまは説明のため、サーバーを公開サブネット a に、DB を非公開サブネット a に置いています。最終的な置き場所は、この章の後半で見直します。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 3 / 20
  • サブネットは、1つの AZ の中に作る
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • AZ c
  • 公開サブネット a 10.0.1.0/24
  • 公開サブネット c 10.0.2.0/24
  • インターネット
  • サーバー
  • サーバー
  • インターネット
  • 非公開サブネット a 10.0.11.0/24
  • 非公開サブネット c 10.0.12.0/24
  • データベース
  • DB
  • 1つのサブネットは、必ず1つの AZ に収まる。AZ をまたぐサブネットは作れない
  • AZ a と AZ c に同じ組を作っておけば、片方の建物が止まってももう片方で動ける(第2章)
  • ひらめき
  • サブネットは AZ をまたげない。だから AZ ごとに「公開」と「非公開」を1つずつ、計4つ作る。

サブネットの番号は、5つが予約済み

サブネットの番号について、知っておきたい決まりが1つあります。どのサブネットでも、5つの番号は AWS が使うので、自分の機械には使えません。

公開サブネット a(10.0.1.0/24)を例にすると、次の5つです。

番号使いみち
10.0.1.0部屋そのものを表す番号(ネットワークアドレス)
10.0.1.1VPC のルーター(次で説明)
10.0.1.2DNS(名前から番号を調べる仕組み)のために予約
10.0.1.3将来のために予約
10.0.1.255部屋の最後の番号(ブロードキャスト用。VPC では使わない)

つまり、/24 の部屋で使えるのは 256 − 5 = 251個、範囲は 10.0.1.4 〜 10.0.1.254 です。

この「5つ引かれる」は、小さな部屋ほど効いてきます。AWS で作れる最小の /28 の部屋は16個ですが、使えるのは11個だけです。

サブネットに置くのはサーバーだけではありません。後の章で出てくるロードバランサーやデータベース、コンテナなども、それぞれ部屋の番号を1つ以上使います。自動で台数が増える仕組み(第12章)を使うと、番号の消費は思ったより早く進みます。

部屋は小さく切りすぎない。第5章で VPC を /16 にした理由の1つがこれです。広い VPC なら、部屋を /24 以上にしても余裕があります。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 4 / 20
  • サブネットの番号は、5つが予約済み
  • 公開サブネット a 10.0.1.0/24
  • 10.0.1.0
  • 部屋そのものを表す番号
  • 256 − 5 = 251 個
  • 10.0.1.1
  • VPC のルーター
  • 使えるのは 10.0.1.4 〜 10.0.1.254
  • 10.0.1.2
  • DNS(名前を番号に変える)
  • NG
  • /28 だと 16 − 5 = 11 個だけ
  • 10.0.1.3
  • 将来のために予約
  • OK
  • 小さく切りすぎないのが安全
  • 10.0.1.255
  • 最後の番号(使わない)
  • ひらめき
  • /24 の部屋は256個ではなく、使えるのは251個。先頭の4つと最後の1つは AWS が使う。

VPC の中には、見えないルーターがいる

部屋を作りましたが、部屋どうし、そして部屋の外とは、どうやってデータがやり取りされるのでしょうか。

VPC の中には、画面には出てこないルーターがいます。ルーターは、データを受け取って、宛先を見て、次にどこへ渡すかを決める係です。第5章で見た家のルーターと同じ役目です。

図の真ん中の絵がそのルーターです。どの部屋から出るデータも、いったんこのルーターを通ります。ルーターは、そのデータを出した部屋に貼られている道案内(ルートテーブル)を見て、行き先を決めます。

ルートテーブルは、次のような2列の表です。図の下の帯に出しているのが、いまの状態です。

列意味
宛先(Destination)「この範囲の住所宛てなら」
行き先(Target)「ここへ渡す」

いまの道案内には、10.0.0.0/16 → local という1行だけがあります。「VPC の範囲(10.0.0.0/16)の宛先なら、VPC の中(local)で届ける」という意味です。

VPC を作ると、メインルートテーブルという道案内が1枚自動で作られ、この local の行が最初から入っています。部屋を作っただけの状態では、どの部屋もこのメインの道案内に従います。

AWS の画面でも表の列は「送信先」「ターゲット」のように表示されます。表の読み方がわかれば、どの部屋からどこへ届くのかを、画面から自分で読み取れるようになります。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 5 / 20
  • VPC の中には、見えないルーターがいる
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • AZ c
  • 公開サブネット a 10.0.1.0/24
  • 公開サブネット c 10.0.2.0/24
  • インターネット
  • サーバー
  • サーバー
  • ルーター
  • インターネット
  • 非公開サブネット a 10.0.11.0/24
  • 非公開サブネット c 10.0.12.0/24
  • データベース
  • DB
  • 場所
  • どの部屋にも道案内が1枚
  • 宛先(どこ宛なら)
  • 10.0.0.0/16
  • 行き先(どこへ渡す)
  • ルートテーブル
  • local(VPC の中へ)
  • ひらめき
  • 部屋から出るデータは全部 VPC のルーターを通る。ルーターは部屋ごとの道案内を見て行き先を決める。

1行目は local:VPC の中なら、どの部屋へも届く

local の行をもう少し見ておきます。

図では、公開サブネット a のサーバーから、AZ c の非公開サブネットにある予備の DB へ、データを送っています。宛先は 10.0.12.x です。これは 10.0.0.0/16 の範囲に入っているので、local の行に当てはまり、ルーターが VPC の中で届けてくれます。

local の行の性質意味
自動で入るVPC を作ると、どの道案内にも最初から入っている
消せない間違えて消してしまう心配はない
AZ をまたいで届く同じ VPC の中なら、別の AZ の部屋にも届く

つまり、同じ VPC の中の部屋どうしは、何もしなくてもお互いに届くのが基本です。公開の部屋のサーバーから非公開の部屋の DB に届くのも、この local の行のおかげです。

「全部届いてしまうなら、非公開の部屋の DB も、公開の部屋の機械からは叩き放題なのでは?」と心配になるかもしれません。その通りで、道案内は道があるかどうかを決めるだけです。「その道を通ってきた相手を、扉の前で通すかどうか」は、別の部品であるセキュリティグループが決めます。これは第8章で扱います。

ネットワークの守りは、この「道(ルート)」と「門番(セキュリティグループ)」の2段で考えるのが基本です。この章では道を作ります。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 6 / 20
  • 1行目は local:VPC の中なら、どの部屋へも届く
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • AZ c
  • 公開サブネット a 10.0.1.0/24
  • 公開サブネット c 10.0.2.0/24
  • インターネット
  • サーバー
  • サーバー
  • ルーター
  • インターネット
  • 非公開サブネット a 10.0.11.0/24
  • 非公開サブネット c 10.0.12.0/24
  • データベース
  • DB
  • データベース
  • DB(予備)
  • 場所
  • どの部屋にも道案内が1枚
  • 宛先(どこ宛なら)
  • 10.0.0.0/16
  • 行き先(どこへ渡す)
  • ルートテーブル
  • local(VPC の中へ)
  • ひらめき
  • local の行は自動で入っていて消せない。だから同じ VPC の中なら、AZ が違っても届く。

外への扉:インターネットゲートウェイ

次は、敷地の外へ出る扉です。

インターネットゲートウェイ(IGW)は、VPC とインターネットの境目に付ける扉です。図では、VPC の左端に IGW が付き、その先にインターネットがつながりました。

項目内容
数VPC に1つだけ付けられる
作り方IGW を作り、VPC に「アタッチ」(取り付け)する
止まる心配AWS が自動で冗長化しており、自分で2つ用意する必要はない
料金IGW そのものに料金はかからない(通信には課金される)

IGW は、AZ ごとに作る必要がありません。VPC に1つ付ければ、どの AZ の部屋からでも使えます。壊れたときに備えて複数用意する、ということも不要です。

ただし、ここが大事なところです。IGW を付けただけでは、まだどの部屋も外に出られません。

扉が付いても、部屋に貼ってある道案内に「外宛てはこの扉へ」と書かれていなければ、ルーターは外宛てのデータをどこへ渡せばいいかわからないからです。いまの道案内は local の1行だけなので、VPC の外の宛先に当てはまる行がありません。

扉をどの部屋に使わせるかを、次で道案内に書き込みます。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 7 / 20
  • 外への扉:インターネットゲートウェイ
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • AZ c
  • 公開サブネット a 10.0.1.0/24
  • 公開サブネット c 10.0.2.0/24
  • インターネット
  • サーバー
  • サーバー
  • ルーター
  • インターネット
  • IGW
  • 非公開サブネット a 10.0.11.0/24
  • 非公開サブネット c 10.0.12.0/24
  • データベース
  • DB
  • IGW(インターネットゲートウェイ)は VPC とインターネットの境目に付ける扉。VPC に1つだけ
  • 扉を使えるのは、道案内に「外へはこの扉から」と書いた部屋だけ。書かなければ誰も通れない
  • ひらめき
  • IGW は VPC に1つだけ付ける、インターネットへの扉。付けただけでは、まだどの部屋も使わない。

0.0.0.0/0 → IGW:この1行で部屋が「公開」になる

公開用の道案内を新しく1枚作り(名前は rtb-public)、次の行を足します。

宛先行き先意味
10.0.0.0/16localVPC の中宛ては、中で届ける(自動で入る)
0.0.0.0/0igw-0abcそれ以外は全部、IGW へ渡す

0.0.0.0/0 を読んでみましょう。第5章で、/ の後ろの数字は「頭から何桁を固定するか」だと説明しました。/0 は1桁も固定しない、つまりすべての住所という意味です。インターネット上のどの宛先も、この範囲に入ります。

この道案内を、公開サブネット a と c に関連付け(この部屋はこの道案内に従う、と結び付けること)ます。すると、この2つの部屋から出る外宛てのデータは、IGW を通ってインターネットへ出ていけるようになります。帰りのデータも、同じ IGW を通って戻ってきます。

図では、公開サブネット a に「外へ行ける」の札が付きました。この1行があるかどうかが、公開サブネットと非公開サブネットの違いのすべてです。

非公開サブネットには、この道案内を関連付けません。非公開用の道案内(rtb-private)を別に作り、local の行だけにしておきます。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 8 / 20
  • 0.0.0.0/0 → IGW:この1行で部屋が「公開」になる
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • AZ c
  • 公開サブネット a 10.0.1.0/24
  • 公開サブネット c 10.0.2.0/24
  • インターネット
  • サーバー
  • サーバー
  • ルーター
  • 外へ行ける
  • インターネット
  • IGW
  • 非公開サブネット a 10.0.11.0/24
  • 非公開サブネット c 10.0.12.0/24
  • データベース
  • DB
  • 場所
  • 公開サブネットの道案内
  • 宛先(どこ宛なら)
  • 10.0.0.0/16
  • 行き先(どこへ渡す)
  • ルートテーブル rtb-public
  • local(VPC の中へ)
  • 0.0.0.0/0(それ以外全部)
  • igw-0abc(IGW へ)
  • ひらめき
  • 0.0.0.0/0 は「/0=固定0桁=すべての住所」。VPC の外宛ては全部 IGW へ、という意味。

宛先を見て、道案内の行を選ぶ

道案内が2行になったので、ルーターがどうやって行を選ぶのかを確かめておきます。

図では、公開サブネット a のサーバーが、2通のデータ(小包)を出そうとしています。

小包宛先どんな用事
赤10.0.11.5非公開サブネット a の DB に、写真の情報を保存する
黄203.0.113.9インターネット上の誰かに返事をする

ルーターは、小包の宛先を見て、道案内の表から当てはまる行を探します。

赤の小包(10.0.11.5)はどうでしょう。10.0.0.0/16 の範囲に入っているので、1行目に当てはまります。そして 0.0.0.0/0 はすべての住所なので、2行目にも当てはまってしまいます。

黄の小包(203.0.113.9)は、10.0. で始まらないので1行目には当てはまりません。2行目の 0.0.0.0/0 にだけ当てはまります。

赤の小包のように、2つの行に同時に当てはまることがあります。このとき、どちらの行が選ばれるのでしょうか。答えは次で、小包を動かして確かめます。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 9 / 20
  • 宛先を見て、道案内の行を選ぶ
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • AZ c
  • 公開サブネット a 10.0.1.0/24
  • 公開サブネット c 10.0.2.0/24
  • インターネット
  • サーバー
  • サーバー
  • 10.0.11.5 宛
  • ルーター
  • 203.0.113.9 宛
  • インターネット
  • IGW
  • 非公開サブネット a 10.0.11.0/24
  • 非公開サブネット c 10.0.12.0/24
  • データベース
  • DB
  • 場所
  • 公開サブネットの道案内
  • 宛先(どこ宛なら)
  • 10.0.0.0/16
  • 行き先(どこへ渡す)
  • ルートテーブル rtb-public
  • local(VPC の中へ)
  • 0.0.0.0/0(それ以外全部)
  • igw-0abc(IGW へ)
  • ひらめき
  • サーバーが2通の手紙を出した。1通は VPC の中の DB 宛て、もう1通はインターネットの誰か宛て。

いちばん詳しく一致する行が勝つ

ルーターの規則は単純です。当てはまる行が複数あるときは、いちばん詳しい(範囲が狭い)行を選ぶ。英語では longest prefix match(いちばん長く一致する行)と呼ばれます。

小包当てはまる行選ばれる行行き先
赤 10.0.11.5/16 と /0/16(固定16桁のほうが詳しい)local → DB へ
黄 203.0.113.9/0 だけ/0IGW → インターネットへ

図では、赤の小包が VPC の中の DB へ、黄の小包が IGW を通ってインターネットへ、それぞれ運ばれました。

住所にたとえると、「東京都千代田区宛てはこの配達員」「それ以外は全部あの配達員」という2つの指示があったら、千代田区宛ての手紙は、より詳しい1つ目の指示に従う、ということです。

この規則のおかげで、「VPC の中宛ては中で、それ以外は外へ」という道案内が、たった2行で書けます。行の順番は関係ありません。どの順に並んでいても、ルーターは最も詳しい行を選びます。

後の章では、この表に「S3 宛てはこの専用の通路へ」(第7章)のような行が増えていきます。行が増えても、宛先に当てはまる行のうち、いちばん詳しいものという読み方は変わりません。道案内を読むときは、宛先を1つ決めて、上から当てはまる行を探し、最も狭い範囲の行を選ぶ、と練習してみてください。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 10 / 20
  • いちばん詳しく一致する行が勝つ
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • AZ c
  • 公開サブネット a 10.0.1.0/24
  • 公開サブネット c 10.0.2.0/24
  • インターネット
  • サーバー
  • サーバー
  • ルーター
  • インターネット
  • IGW
  • 非公開サブネット a 10.0.11.0/24
  • 非公開サブネット c 10.0.12.0/24
  • 203.0.113.9 宛
  • データベース
  • DB
  • 10.0.11.5 宛
  • 場所
  • 公開サブネットの道案内
  • 宛先(どこ宛なら)
  • 10.0.0.0/16
  • 行き先(どこへ渡す)
  • ルートテーブル rtb-public
  • local(VPC の中へ)
  • 0.0.0.0/0(それ以外全部)
  • igw-0abc(IGW へ)
  • ひらめき
  • 10.0.11.5 は両方の行に当てはまるが、/16 のほうが詳しいので local。203.0.113.9 は IGW へ。

非公開サブネットの道案内には、外への行が無い

今度は非公開サブネットの側です。非公開用の道案内(rtb-private)は、local の1行だけです。

宛先行き先
10.0.0.0/16local

図では、非公開サブネット a の DB が外へデータを送ろうとしていますが、外宛ての住所に当てはまる行がありません。当てはまる行が無いデータは、どこにも渡されずに捨てられます。

外から来る側も同じです。インターネットから DB に届こうとしても、DB にはパブリック IP も無く、IGW から非公開の部屋への道もありません。

方向非公開サブネットでは
外 → 中届かない。外から見える番号が無い
中 → 外出られない。道案内に外への行が無い
中 ↔ 中local の行で届く

これで、DB を外から絶対に届かない場所に置くという目的が果たせました。わざわざ「外からの通信を禁止する」設定を書いたわけではなく、外への道を書かなかっただけだという点に注目してください。何もしなければ閉じている、というのが安全な作りです。

ただし、「中から外へ出られない」ことは、あとで困りごとになります。これはこの章の最後で触れます。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 11 / 20
  • 非公開サブネットの道案内には、外への行が無い
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • AZ c
  • 公開サブネット a 10.0.1.0/24
  • 公開サブネット c 10.0.2.0/24
  • インターネット
  • サーバー
  • サーバー
  • ルーター
  • インターネット
  • IGW
  • 非公開サブネット a 10.0.11.0/24
  • 非公開サブネット c 10.0.12.0/24
  • NG
  • データベース
  • DB
  • 場所
  • 非公開サブネットの道案内
  • 宛先(どこ宛なら)
  • 10.0.0.0/16
  • 行き先(どこへ渡す)
  • ルートテーブル rtb-private
  • local(VPC の中へ)
  • (外への行が無い)
  • 外へは出られない
  • ひらめき
  • 非公開の部屋は、外への行を書かないだけ。外から来る道も、中から出る道も無い。

公開の部屋でも、パブリック IP が無いと外と話せない

公開サブネットにもう1つ条件があります。部屋に外への道があっても、機械自身がパブリック IP を持っていなければ、外とは話せません。

第5章で、プライベート IP は内線番号で、外では通じないと説明しました。IGW は、機械が持っている中の番号(プライベート IP)と外の番号(パブリック IP)を1対1で付け替える役目も担っています。外の番号を持たない機械は、付け替えるものが無いので、外とやり取りできないのです。

図では、公開サブネット a のサーバーが、中の番号 10.0.1.25 と外の番号 203.0.113.20 の両方を持っています。

条件外と話せるか
公開サブネット + パブリック IP あり話せる
公開サブネット + パブリック IP なし話せない
非公開サブネット(パブリック IP があっても)話せない(道が無い)

パブリック IP の付け方は2つあります。

付け方特徴
サブネットの「パブリック IPv4 アドレスを自動割り当て」を有効にするその部屋に置いた機械に、自動で付く。止めて起動し直すと番号が変わる
Elastic IP を付ける自分のアカウントで持ち続ける固定の番号(第9章)

第5章で触れたとおり、パブリック IPv4 は1個ごとに時間で課金されます。自動割り当ては、本当に外から直接届く必要がある機械を置く部屋だけで有効にしましょう。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 12 / 20
  • 公開の部屋でも、パブリック IP が無いと外と話せない
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • AZ c
  • 公開サブネット a 10.0.1.0/24
  • 公開サブネット c 10.0.2.0/24
  • インターネット
  • サーバー
  • サーバー
  • ルーター
  • 中 10.0.1.25 / 外 203.0.113.20
  • インターネット
  • IGW
  • 非公開サブネット a 10.0.11.0/24
  • 非公開サブネット c 10.0.12.0/24
  • データベース
  • DB
  • 公開サブネットに置いても、パブリック IP が付いていない機械は外と話せない
  • サブネットで「パブリック IPv4 を自動割り当て」を有効にすると、置いた機械に自動で付く(1個ごとに有料)
  • ひらめき
  • IGW は中と外の番号を1対1で付け替える。外の番号(パブリック IP)を持つ機械だけが外と話せる。

道案内を貼り忘れた部屋は「メイン」に従う

道案内には、気をつけたい落とし穴が1つあります。メインルートテーブルです。

VPC を作ると、道案内が1枚自動で作られ、それが「メイン」になります。部屋は、どの道案内にも関連付けていないと、自動的にメインの道案内に従います。

図では、4つの部屋に、それぞれ関連付けた道案内の名前の札を付けました。公開の2部屋は rtb-public、非公開の2部屋は rtb-private です。こうして全部の部屋に明示的に関連付けておくのが基本です。

では、次のような操作をしたらどうなるでしょう。

操作起きること
手早く済ませようと、メインに 0.0.0.0/0 → IGW を足したいまある部屋のうち、関連付けを忘れている部屋が公開になる
その後、新しい部屋を作った何も関連付けなければメインに従うので、知らないうちに公開の部屋になる

新しく DB 用の部屋を作ったつもりが、実は外への道がある部屋だった、という事故がこうして起きます。

防ぎ方は簡単です。

対策理由
メインは local だけにしておく関連付けを忘れても、閉じた部屋になる(安全な側に倒れる)
公開用の道案内は別に作る公開したい部屋にだけ、意図して関連付ける

「忘れたら閉じる」ように作っておくのが、設定ミスに強い作りです。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 13 / 20
  • 道案内を貼り忘れた部屋は「メイン」に従う
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • AZ c
  • 公開サブネット a 10.0.1.0/24
  • 公開サブネット c 10.0.2.0/24
  • インターネット
  • サーバー
  • サーバー
  • ルーター
  • rtb-public
  • rtb-public
  • インターネット
  • IGW
  • 非公開サブネット a 10.0.11.0/24
  • 非公開サブネット c 10.0.12.0/24
  • データベース
  • DB
  • rtb-private
  • rtb-private
  • 部屋ごとに、どの道案内を使うか関連付ける。何も関連付けない部屋は、VPC の「メイン」の道案内に従う
  • メインに IGW への行を足すと、あとで作った部屋が知らないうちに公開になる
  • ひらめき
  • 関連付けていない部屋はメインルートテーブルに従う。メインは local だけにしておくのが安全。

AZ ごとに、公開と非公開を1組ずつ

ここまでの部品で、フォトログの部屋の使い方を決めます。図が、この本で目指す置き方です。

部屋置くもの理由
公開サブネット a・c入口(第11章のロードバランサー)利用者のリクエストを受ける場所だけを外に向ける
非公開サブネット a・cWeb サーバー(第9章)外から直接は届かせない。入口から中継してもらう
非公開サブネット a・cDB(第13章)外から最も遠い場所に置く

ここまでの説明では、わかりやすくするためにサーバーを公開サブネットに置いていました。でも実務では、Web サーバーも非公開の部屋に置くのが一般的です。利用者は公開の部屋の「入口」に届き、入口が中の Web サーバーへ取り次ぎます。こうすると、Web サーバーに直接届く道がなくなり、守る場所を入口の1か所に絞れます。

そして、この組をAZ ごとに1組ずつ用意します。AZ a が丸ごと止まっても、AZ c の入口・Web・DB で動き続けられます。

止まったもの影響
AZ a の WebAZ c の Web が引き受ける
AZ a 全体AZ c の組で動き続ける
IGWAWS が冗長化しているので、自分で備える必要は無い

この「公開2つ・非公開2つ、AZ 2つ」の形は、AWS で最もよく見る基本の形です。コンソールの「VPC など」で作る場合も、既定でこの形が提案されます。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 14 / 20
  • AZ ごとに、公開と非公開を1組ずつ
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • AZ c
  • 公開サブネット a 10.0.1.0/24
  • 公開サブネット c 10.0.2.0/24
  • インターネット
  • ネットワーク
  • 入口
  • ネットワーク
  • 入口
  • ルーター
  • インターネット
  • IGW
  • 非公開サブネット a 10.0.11.0/24
  • 非公開サブネット c 10.0.12.0/24
  • サーバー
  • データベース
  • サーバー
  • データベース
  • Web
  • DB
  • Web
  • DB(予備)
  • 公開の部屋には「入口」(第11章の ALB)だけを置く。Web と DB は非公開の部屋へ
  • 片方の AZ が止まっても、もう片方の組で動き続ける
  • ひらめき
  • 外から直接届くのは公開の部屋の入口だけ。Web と DB は非公開の部屋に置き、AZ ごとに1組ずつ。

作ってみる:部屋・扉・道案内

作る順番は図の左の4段です。コンソールでは VPC の画面の左の一覧から「サブネット」「インターネットゲートウェイ」「ルートテーブル」をそれぞれ開いて作ります。

番号操作ポイント
1サブネットを4つ作るVPC・AZ・番号の範囲・名前(public-a など)を指定
2IGW を作り、VPC にアタッチする作っただけでは付いていない。アタッチを忘れない
3道案内を2枚作るrtb-public に 0.0.0.0/0 → IGW を足す。rtb-private は local のまま
4部屋に関連付ける公開の2部屋に rtb-public、非公開の2部屋に rtb-private

CLI では、図の右のようなコマンドになります(ID は例です)。

bash
aws ec2 create-subnet --vpc-id vpc-0abc \
  --cidr-block 10.0.1.0/24 --availability-zone ap-northeast-1a
aws ec2 create-internet-gateway
aws ec2 attach-internet-gateway --vpc-id vpc-0abc --internet-gateway-id igw-0abc
aws ec2 create-route-table --vpc-id vpc-0abc
aws ec2 create-route --route-table-id rtb-pub \
  --destination-cidr-block 0.0.0.0/0 --gateway-id igw-0abc
aws ec2 associate-route-table --route-table-id rtb-pub --subnet-id subnet-pa

作ったら、VPC の画面の「リソースマップ」を開いてみてください。部屋・道案内・扉のつながりが図で表示され、関連付けの漏れを目で確かめられます。

手で作るのはここまで練習のためです。同じ構成を何度も作るようになったら、第18章の IaC(構成をコードにする)で、このコマンドの列を1つの設計図にまとめます。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 15 / 20
  • 作ってみる:部屋・扉・道案内
  • 部屋(サブネット)を4つ作る
  • AZ と番号の範囲を指定
  • aws ec2 create-subnet --vpc-id vpc-0abc \
  • --cidr-block 10.0.1.0/24 \
  • --availability-zone ap-northeast-1a
  • IGW を作り、VPC に付ける
  • aws ec2 create-internet-gateway
  • VPC に1つだけ
  • aws ec2 attach-internet-gateway \
  • --vpc-id vpc-0abc --internet-gateway-id igw-0abc
  • 道案内を2枚作る
  • aws ec2 create-route --route-table-id rtb-pub \
  • 公開用に 0.0.0.0/0 → IGW
  • --destination-cidr-block 0.0.0.0/0 \
  • --gateway-id igw-0abc
  • aws ec2 associate-route-table \
  • 部屋に関連付ける
  • --route-table-id rtb-pub --subnet-id subnet-pa
  • 公開2つ・非公開2つ
  • ひらめき
  • 部屋を作る → 扉を付ける → 道案内を作って行を足す → 部屋に関連付ける。この4段。

フォトログの部屋と道案内

フォトログの本番 VPC に作ったものを、表にまとめておきます。こうした表は、構成を人に説明するときや、トラブルのときに役立ちます。

部屋の名前範囲AZ道案内
public-a10.0.1.0/24artb-public
public-c10.0.2.0/24crtb-public
private-a10.0.11.0/24artb-private
private-c10.0.12.0/24crtb-private
道案内宛先 → 行き先
rtb-public10.0.0.0/16 → local、0.0.0.0/0 → IGW
rtb-private10.0.0.0/16 → local(外への道は第7章で足す)
メイン10.0.0.0/16 → local のまま。どの部屋も関連付けない

名前の付け方にも決まりを作りました。部屋の名前には「公開か非公開か」と「AZ」を入れ、番号は公開が1桁台、非公開が11からです。AWS の画面では部屋は subnet-0f3a... のような ID で表示されることが多く、名前(Name タグ)を付けておかないと、どれがどの部屋かすぐにわからなくなります。

第4章で触れたコストのタグ(project=photolog など)も、部屋や道案内に付けておくと、後で整理するときに便利です。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 16 / 20
  • フォトログの部屋と道案内
  • 部屋(サブネット)
  • 道案内(ルートテーブル)
  • public-a
  • 10.0.1.0/24 AZ a rtb-public
  • rtb-public
  • public-c
  • 10.0.2.0/24 AZ c rtb-public
  • 10.0.0.0/16 → local 0.0.0.0/0 → igw
  • private-a
  • 10.0.11.0/24 AZ a rtb-private
  • rtb-private
  • 10.0.0.0/16 → local (外は第7章で足す)
  • private-c
  • 10.0.12.0/24 AZ c rtb-private
  • ひらめき
  • 部屋は4つ、道案内は2枚。部屋の名前と番号を見れば、公開か非公開か、どの AZ かがわかる。

部屋と道案内と扉は無料。IP と通信にお金がかかる

この章で作ったもののうち、サブネット・ルートテーブル・インターネットゲートウェイは、作るだけなら無料です。

お金がかかるのは、次のものです。

課金されるもの何に対して気をつけること
パブリック IPv4 アドレス1個ごとに、持っている時間自動割り当てを必要な部屋だけにする
AZ をまたぐ通信GB ごと(行きと帰りの両方)同じ AZ の中どうしの通信は無料
インターネットへ出る通信GB ごと第4章のデータ転送料

2つ目の「AZ をまたぐ通信」は見落としやすい料金です。AZ a の Web サーバーが AZ c の DB と大量にやり取りすると、そのぶん課金されます。複数 AZ にするのは止まらないために必要ですが、「同じ AZ の中で済む通信は同じ AZ の中で済ませる」という考え方は、後の章(ロードバランサーやデータベースの章)でも出てきます。

細かい単価は変わることがあるので、AWS の料金ページ(VPC の料金、EC2 のデータ転送の料金)で確認してください。第4章の Pricing Calculator で、構成全体の見積もりも出せます。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 17 / 20
  • 部屋と道案内と扉は無料。IP と通信にお金がかかる
  • 作るだけなら無料
  • OK
  • サブネット
  • インターネット
  • パブリック IPv4
  • 1個ごとに、持っている時間で
  • OK
  • ルートテーブル
  • 更新
  • AZ をまたぐ通信
  • OK
  • インターネットゲートウェイ
  • GB ごと(同じ AZ の中は無料)
  • アップロード
  • インターネットへ出る通信
  • 単価は料金ページで確認
  • GB ごと(第4章)
  • ひらめき
  • 部屋・道案内・IGW は無料。パブリック IPv4 は1個ごと、AZ をまたぐ通信は GB ごとに課金。

よくある落とし穴

サブネットとルートテーブルのトラブルは、ほとんどが道案内の書き間違いか、関連付けの漏れです。

落とし穴何が起きるか防ぎ方
メインに IGW の行を足した関連付けを忘れた部屋、あとで作った部屋が全部公開になるメインは local だけ
関連付けを忘れた公開のつもりの部屋がメインに従い、外に出られないリソースマップで確認
IGW をアタッチし忘れた道案内に行を足そうとしても IGW が選べない、または外に出られない作ったらすぐアタッチ
部屋を1つの AZ にだけ作ったその AZ が止まると全部止まる同じ役目の部屋を AZ ごとに作る
DB を公開の部屋に置いたパブリック IP が付けば外から届く場所になるDB は非公開の部屋に
自動割り当てを全部の部屋で有効要らない機械にもパブリック IP が付き、課金され、狙われる公開の部屋だけに

「外に出られない」「外から届かない」ときの確かめ方も覚えておきましょう。

順番確かめること
1機械が置かれている部屋はどれか
2その部屋に関連付いている道案内はどれか
3宛先に当てはまる行のうち、いちばん詳しい行の行き先はどこか
4機械はパブリック IP を持っているか

それでも届かないときは、第8章の門番(セキュリティグループ)を疑います。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 18 / 20
  • よくある落とし穴
  • メインに IGW の行を足した
  • あとから作った部屋が全部公開になる
  • 関連付けを忘れた
  • 公開のつもりの部屋がメインに従い、外に出られない
  • 部屋を1つの AZ にだけ作った
  • その AZ が止まると全部止まる
  • DB を公開の部屋に置いた
  • パブリック IP が付けば外から届く場所になる
  • 自動割り当てを全部で有効
  • 要らない機械にもパブリック IP が付き課金される
  • ひらめき
  • 「公開のつもりが非公開」「非公開のつもりが公開」は、ほぼ全部が道案内の書き間違い。

片付け:部屋・扉・道案内の消し方

フォトログの本番用の部屋と道案内は、次の章以降でも使うので残しておきます。練習で別に作った場合は、次の順で消します。

番号操作理由
1部屋の中の機械を消す機械が残っている部屋は消せない
2道案内の関連付けを外す関連付いている道案内は消せない
3自分で作った道案内を消すメインは VPC と一緒に消える
4IGW を VPC から外し(デタッチ)、消す付いたままでは消せない
5サブネットを消す最後に部屋を消す

CLI では、図の下のコマンドのように、外してから消すの順番を守ります。

bash
aws ec2 detach-internet-gateway --internet-gateway-id igw-0abc --vpc-id vpc-0abc
aws ec2 delete-internet-gateway --internet-gateway-id igw-0abc
aws ec2 delete-subnet --subnet-id subnet-0abc

コンソールで VPC ごと「削除」する場合は、部屋・道案内・IGW などをまとめて片付けてくれます。部品を1つずつ消すのが面倒なら、VPC ごと消すのがいちばん確実です。

この章の部品は無料ですが、パブリック IP を付けた機械を残していると、そのぶんは課金され続けます。消し終わったら、EC2 の画面の Elastic IP の一覧に番号が残っていないかも確かめておきましょう。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 19 / 20
  • 片付け:部屋・扉・道案内の消し方
  • 中の機械を消す
  • 関連付けを外す
  • 道案内を消す
  • IGW を外して消す
  • サブネットを消す
  • aws ec2 detach-internet-gateway --internet-gateway-id igw-0abc --vpc-id vpc-0abc
  • aws ec2 delete-internet-gateway --internet-gateway-id igw-0abc
  • aws ec2 delete-subnet --subnet-id subnet-0abc
  • ひらめき
  • 中の機械 → 関連付け → 道案内 → 扉 → 部屋の順。コンソールで VPC ごと消せばまとめて消える。

まとめ:公開か非公開かは、道案内の1行で決まる

この章で見たことをまとめます。

項目内容
サブネットVPC の番号を切り分けた部屋。1つの AZ の中に作る。5つの番号は予約済み
ルートテーブル宛先ごとの行き先の表。部屋ごとに関連付ける
localVPC の中へ届ける行。自動で入り、消せない
インターネットゲートウェイインターネットへの扉。VPC に1つ。無料
公開サブネット0.0.0.0/0 → IGW の行がある部屋。機械にはパブリック IP も要る
非公開サブネット外への行が無い部屋。外からも届かず、外へも出られない
行の選び方当てはまる行のうち、いちばん詳しい行が勝つ
メイン関連付けを忘れた部屋が従う。local だけにしておく

これで、Web と DB を外から届かない非公開の部屋に置けるようになりました。ところが、ここで新しい困りごとが出てきます。

非公開の部屋の機械は、中から外へも出られません。サーバーの OS の更新(セキュリティの修正)を取りに行けない、外部の決済サービスの API を呼べない、同じ AWS の S3 に写真を置きにいくことさえできないのです。

外からは届かせずに、中からだけ外へ出る。この一方通行の道を作るのが、次の第7章「外へ出る道:NAT と VPC エンドポイント」です。

  • AWS でサービスを作る 06 ― サブネットとルートテーブル
  • 20 / 20
  • まとめ:公開か非公開かは、道案内の1行で決まる
  • サブネット
  • VPC の番号を切り分けた部屋。1つの AZ の中に作る
  • ルートテーブル
  • 宛先ごとの行き先の表。部屋ごとに関連付ける
  • local
  • VPC の中へ届ける行。自動で入り、消せない
  • IGW
  • インターネットへの扉。VPC に1つ
  • 公開サブネット
  • 0.0.0.0/0 → IGW の行がある部屋
  • 注意
  • 次の困りごと:非公開の部屋の DB やサーバーが、外の更新や API に届かない
  • ひらめき
  • でも非公開の部屋の機械は、OS の更新すら取りに行けない → 第7章「外へ出る道」へ。

0 件のコメント

読み込み中…

権利侵害・不適切な内容の連絡: [email protected]