https://immersed-in-knowing.com/?p=133 の続きです。
前回作成したVPCにパブリックサブネットを作成します。
そのあとにVPCにインターネットゲートウェイを設定してインターネットに接続します。
まだ、ネットワークの下準備ですね。
本記事でやること
- パブリックサブネット作成
- インターネット接続設定
- ルーティング設定
1.パブリックサブネット作成
インターネットからアクセスするためのパブリックサブネットを作成します。
作成したVPC領域「10.0.0.0/16」のプライベートなネットワークのVPC領域をサブネット(256個のサブネット「/24」)に分割します。
将来的にこのサブネットにwebサーバーを配置する予定です。
AWSのマネジメントコンソールにログイン後、VPC機能よりサブネットを選択、「サブネットを作成」を押下します。
サブネット一覧にはデフォルトで3つくらいありますが使用しないので無視してください。

IPv4 VPC CIDRブロックは前回作成した分割対象の10.0.0.0/16を指定します。IPv4 サブネット CIDRブロックを「10.0.1.0/16」として作成を押します。数分でサブネットが作成されます。
アベイラビリティゾーンは1a, 1bなど選べますが1aにしています。(他のゾーンでもOK)
パブリックサブネットを作成しましたが、インターネットから隔離したサブネットをプライベートサブネットといいます。データベースなどを配置する際に使用します。データベースには顧客情報などを保存するのでインターネットからアクセスできない箇所に配置することでセキュリティを高めることができます。
将来的に作成しますがいったんwebサイトを表示するだけなのでここでは作成しないです。
2.インターネット接続設定
Internet Gatewayを用いてVPCをインターネットに接続します。
将来的にwebサーバーをネットに公開できるようにするためですね。
AWSのマネジメントコンソールのVPCよりインターネットゲートウェイを選択、「インターネットゲートウェイの作成」を押下します。VPCのコンソールでの作成ですので右上にあるボタンです。(↓の画像のボタンとは別ですね)

「インターネットゲートウェイの作成」を押下します。
インターネットゲートウェイに作成したVPCをアタッチします。

「vpcにアタッチ」を押下します。

使用可能なVPCに作成したVPCを指定して「インターネットゲートウェイのアタッチ」を押下してアタッチします。
3.ルーティング設定
ルーティングとは
ネットワークにデータを流すために「ルーティング情報」と呼ばれる設定が必要です。
インターネットで使われているTCP/IPプロトコルではパケット単位でデータが送受信されますが、パケットのヘッダー情報とデータの1つに宛先IPアドレスがあります。TCP/IPではルーターが宛先IPアドレスに近い方にパケットを転送していき最終目的地までパケットを到達させます。
ここで、どちらのネットワークに宛先IPアドレスが近いかをルーターが知っている必要があるため、その設定がルートテーブルに当たります。
ルートテーブルは「宛先アドレス」「流すべきネットワークの入り口となるルーター」という書式で設定します。
宛先アドレスをdestination、流すべきネットワーク先はtarget, next hopと呼びます。(VPCはtargetです)
ルートテーブル
サブネットにルートテーブルを設定します。Amazon VPCではサブネットとインターネットゲートウェイの間にルーターの役割を果たすソフトウェアが動いています。

VPC領域のCIDRブロック「10.0.0.0/16」に含まれるIPアドレス宛てのパケットであればVPC領域のルーターに接続されている相手への通信なのでローカルネットワークにパケットを転送する設定です。
今のところルートテーブルには1つの設定しかないため10.0.0.0/16の範囲外の宛先のパケットはすべて破棄されます。つまりこの設定のままではインターネット接続はできません。
こちらは厳密にいえば、10.0.0.0/16へのアクセス以外は破棄させず別のルーター(インターネットゲートウェイ)に流すのがネットワークにつながるという解釈です。
そのため、0.0.0.0/0(すべてのIPアドレス)の範囲の宛先パケットはインターネットゲートウェイに転送するという設定をルートテーブルに追加します。0.0.0.0/0に対するtarget設定は「転送先が何も設定されていないときのデフォルトの転送先」を指します。このデフォルトの転送先をデフォルトゲートウェイといいます。
デフォルトゲートウェイをインターネットに向ける
デフォルトゲートウェイをインターネットゲートウェイに設定します。
AWSのマネジメントコンソールのVPCよりルートテーブルを選択、「ルートテーブルの作成」を押下します。

「public_route_table」を入力しVPCを指定してルートテーブルを作成します。
作成したルートテーブルにデフォルトゲートウェイを設定します。

作成したルートテーブルを選択し、ルートを編集を押下します。

送信先を0.0.0.0/0に設定し、ターゲットにインターネットゲートウェイを指定します。
変更を保存を押下します。
デフォルトのルートテーブルを修正してしまうとVPC領域に設定されている他のサブネットにも影響を与えてしまうため新規で作成しています。

ここまで作成したアーキテクチャはこんな感じです。
追記

ここまでの設定では不十分でした。
ルートテーブルの設定が「明示的な関連付けがないサブネット」になっていました。
対象のルートテーブルに設定を変えないと、EC2にSSHができなくなってしまいます。
「サブネットの関連付けを編集」を押下します。

チェックを入れて関連付けを保存を押下します。