Yuki's Tech Blog

仕事で得た知見や勉強した技術を書きます。

【AWS:ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得】セクション3: 【VPC】ネットワークを構築しようで知らなかったことをざっくりまとめてみた

目次

AWSでインフラを構築する場合、まず何からやるべきか?

AWSでインフラを構築する場合、 まずはネットワークから作成します。 VPCと呼ばれるネットワークを構築し、そのネットワーク環境にEC2インスタンスなどのサーバーを設定します。その後、そのサーバーに必要なアプリケーションをインストールします。

リージョンとは

リージョンとは、 AWSの各サービスが提供されている地域 のことです。 2019年6月時点では、世界中に17のリージョンがあります。

AWSのサービスを利用する場合、まずリージョンを選択します。リージョンごとにネットワークを設定して、サーバーを作って行きます。

(注) リージョンによって使えるサービスが異なるので、自分の使いたいサービスがそのリージョンで使えるかを事前にチェックする必要があります。基本的には最新の機能はアメリカから使えるようになって、徐々に他の地域でも使えるようになります。また、日本でWebサービスを展開する場合、東京リージョンを選択した方がアメリカを選択した場合より、サーバーの応答時間が早くなります。

アベイラビリティゾーンとは

アベイラビリティゾーンとは、 複数のデータセンターを束ねたもの です(AWSは世界各国にデータセンターを持っています)。どのリージョンにもアベイラビリティゾーンは2つ以上存在していて、それぞれ物理的に離れて存在しています。

(※)1つのリージョンに複数のアベイラビリティゾーンがある理由は、1つのアベイラビリティゾーンが利用不可能になっても、それ以外のアベイラビリティゾーンでシステムを稼働できるようにするためです。複数のアベイラビリティゾーンにそれぞれサーバーを設置することで、災害で1つのサーバーがダメになっても、他のサーバーがあるのでシステムを稼働し続けることができます。

VPC(Virtual Private Cloud)とは

VPCとは、 AWS上にプライベートな仮想ネットワークを作成できるサービス のことです。VPCを使うことで、他とは分離されたネットワーク環境を自由に作ることができます。

AWSで作業する場合、まずリージョンの中にVPCを作成します。そのVPCの中で複数のアベイラビリティゾーンを選択することができます。また、VPCの中のアベイラビリティゾーンの中で、プライベートなネットワークやパプリックなネットワークを作ることができます。これらのネットワークはサブネットと呼ばれます。

(注)ややこしいのですが、VPCで作った仮想ネットワークのことをVPCとも呼びます。

サブネットマスク表記とサブネットの違い

この2つの言葉は似ていますが、意味が全く違います。

  • サブネットマスク表記
    サブネットマスク表記とは、IPアドレスのネットワーク部がどこまでかを表す表記法のことです。IPアドレスの範囲を表記する方法とも言えます。
  • サブネット
    サブネットとは、ネットワーク内のネットワークを分割した小さなネットワークのことです。ネットワークを区切りたいときに使用します。 VPCで作ったネットワークは、IPアドレスの範囲が広いので、サブネットを使って小さいIPアドレスの範囲にすることができます。 AWSでサーバーを作るときはサブネットの中に配置します。

(注) サブネットはアベイラビリティゾーンの中に作っていきます。複数のアベイラビリティゾーンにサブネットを作ってそれぞれにサーバーを設置することで、災害で1つのアベイラビリティゾーンがダメになっても、安定してサービスを提供することができます。

VPC内のアベイラビリティーゾーンにサブネットを作るメリット

サブネットを作るメリットは、以下の2点が考えられます。

  1. サブネットを作ることで、VPC内にパブリックな領域とプライベートな領域を作ることができます。

  2. VPC内の異なるアベイラビリティゾーンにサブネットを作ることで、 災害に強いシステム構成を作ることができます。

IPアドレスとは

IPアドレスとは、 インターネット上のコンピュータに割り当てられる識別番号 です。

IPアドレスには「どのネットワークの、どのコンピュータであるか」という情報が書かれています。「どのネットワーク」の部分は「ネットワーク部」、「どのコンピュータ」の部分は「ホスト部」と呼ばれます。 ネットワーク部は固定されていて、ホスト部は可変です。 ホスト部は可変なので、そのネットワーク内で可変に設定できます。

IPアドレスの3つの特徴

  1. 重複しない番号である
  2. 32ビットの整数値で構成されている そのままだと読みにくいので、32ビットのIPアドレスを8ビットずつの4つの組みに分け、ピリオドを入れて10進数で表現します。
  3. IPアドレスとして利用できる範囲は、0.0.0.0 ~ 255.255.255.255までである

パブリックIPアドレスとプライベートIPアドレス

IPアドレスは2種類存在します。 一つがパブリックIPアドレス、もう一つがプライベートIPアドレスです。

パブリックIPアドレスの3つの特徴

  • パブリックIPアドレスとは、インターネットに接続する際に使用するIPアドレスです。
  • 重複すると正しく通信できないので、ICANN(アイキャン)という団体が管理しています。
  • プロパイダーやサーバー事業者から貸出されます(AWSを使用する場合、AWSから貸出される)。

プライベートIPアドレスの3つの特徴

  • ブライベートIPアドレスとは、インターネットで使用されないIPアドレスです。
  • 下記範囲内のアドレスを自由に使用することができます。
  • 社内LANの構築やネットワークの実験時等、インターネットを使用しないときにプライベートIPアドレスを使用します。
プライベートIPアドレスの利用範囲
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255

IPアドレスの範囲を表記する2種類の方法

プライベートIPアドレスの範囲をいちいち10.0.0.0 ~ 10.255.255.255と書くのはめんどくさいです。実はIPアドレスの範囲には2種類の表記法があります。

(注)CIDR表記もサブネットマスク表記のどちらも、IPアドレスの範囲を表記する方法です。あと、この表記法を使う場合、ホスト部は0にします。

表記法1: CIDR表記

CIDR表記とは、ホスト部を0にしたIPアドレスの後ろに/を書き、 ネットワーク部が先頭から何ビット目まで なのかを記載する表記法です。CIDR表記のIPアドレスの範囲のことをCIDRブロックとも呼びます。

例) 192. 168. 128. 0/24

これは192.168.0.0 ~ 192.168.255.255のIPアドレスの範囲をCIDR表記にしたものです。 この場合、ネットワーク部は先頭の24桁で、ホスト部は8桁であることがわかります。つまり、ホスト部が8桁なので、このネットワークでは256個のIPアドレスを使用することができます。

(※)CIDRはサイダーと読みます。

表記法2: サブネットマスク表記

サブネットマスク表記とは、ホスト部を0にしたIPアドレスの後ろに/を書き、ネットワーク部を表すビットを1、ホスト部を表すビットを0にしたものを書く表記法のことです。(10進数に直す)

例) 192.168.128.0/255.255.255.0

これは192.168.0.0 ~ 192.168.255.255のIPアドレスの範囲をサブネットマスク表記はにしたものです。このサブネットマスク表記から、このネットワークで利用できるIPアドレスは256個であることがわかります。

ホストとは

ホストとは、ネットワークに接続されたコンピュータのことです。

インターネットゲートウェイとは

インターネットゲートウェイとは、VPCとインターネットを接続するための仮想のルーターです。 インターネットゲートウェイVPCに設定するものであり、VPCの画面からインターネットゲートウェイを作成できます。

東京リージョンにIPアドレスの範囲が10.0.0.0/16のVPCを作成する

東京リージョンにIPアドレスの範囲が10.0.0.0/16のVPCを作成します。

VPCの作成手順

手順1:
IAMユーザー用のマネジメントコンソールを用います。検索バーにVPCと入力して検索します。この時リージョンを東京リージョンに設定しておきます。左サイドバーの「お使いのVPC」をクリックして、その後、「VPCを作成」をクリックします。 Image from Gyazo

手順2:
名前タグにはVPCを識別するための名前を入力します。その後、IPv4 CIDR ブロックにVPCで使えるIPアドレスの範囲を設定します。IPv6 CIDR ブロックをなし、テナンシーをデフォルトにします。最後に「VPCを作成」をクリックします。 Image from Gyazo (※)テナンシーとは物理ハードウェアを占有するためのオプションです。

マネジメントコンソールを見ると、blog-test-vpcという名前のVPCが作成されていることがわかります。 Image from Gyazo

VPC内のアベイラビリティゾーンにサブネットを作る

サブネットの作成手順

手順1:
IAMユーザー用のマネジメントコンソールで 、VPCの設定画面を開きます。その後、「サブネット」をクリックして、「サブネットを作成」をクリックします。

Image from Gyazo

手順2:
サブネットを作成したいVPCを選択します。名前タグにはサブネットを識別する名前をつけます。blog-test-subnet-1aという名前にしました(アベイラビリティゾーンには1aを選択しようと思うので、名前の語尾に1aをつけてます)。次にサブネットを作るアベイラビリティゾーンを指定します。今回はap-northeast-1aにします。CIDRブロックには、サブネットで使えるIPアドレスの範囲を指定します。今回は10.0.10.0/24にします。その後、「サブネットを作成」をクリックします。これでVPC内のap-northeast-1aというアベイラビリティゾーンにサブネットを作成できました。

Image from Gyazo

プラベートサブネットを作りたい場合、同様の手順でプラベートサブネットも作ります。プライベートサブネットなので、サブネット名をblog-test-private-subnet-1aにしました。 サブネットを作成しただけだと、サブネットはインターネットに接続できるようになっていません。サブネットをインターネットに繋げればパブリックなサブネットになりますし、つなげなかったら、プライベートなサブネットになります。サブネットをインターネットにつなげたい場合、VPCにインターネットゲートウェイを設置して、デフォルトルートのターゲットがインターネットゲートウェイであるようルートを持つルートテーブルを作成して、そのルートテーブルをサブネットに関連づける必要があります。

ルーティングを設定する

パブリックサブネットがインターネットに接続できるようにするために、ルーティングを設定します。

ルーターとは

ルーターとは、 ネットワークとネットワークを接続する機械 のことです。 ルーターIPアドレスがどのデバイスと紐づいているのか、IPアドレスがどのネットワークに所属しているのかを管理しているデバイスです。

ルーティングとは

ルーティングとは、ルーターが正しい宛先に導く作業のことです。

(※)インターネット上にはルーターと呼ばれるものがあります。ルーターはルートテーブルを持っており、そこにはどのネットワークがどのIPアドレスを持っているかが書かれています。

ルートテーブルの設定方法

ルートテーブルは、「宛先のIPアドレス」と「次のルーター(AWSではターゲットと呼ぶ)」という書式で設定します。

宛先IPアドレス 次のルーター(AWSではターゲット)
10.0.1.0/24 local
10.0.2.0/24 ルーターB
0.0.0.0/0 ルーターC

(※)localとは自身のネットワークのことです。また、 0.0.0.0/0はデフォルトルートと呼び、ルートテーブルのどのIPアドレスにも当てはまらない場合に選択される経路です。

パブリックサブネット用のルートテーブルを作成して、インターネットゲートウェイと接続するようなルーティングを作成する

(※)インターネットゲートウェイを作成してないので、インターネットゲートウェイを作成してVPCに設置します。

(注) ルートテーブルはVPCと各サブネットに設定できます。サブネットごとにルーティングの設定をします。ルートテーブルを作成するときは必ずVPCを指定するので気をつけましょう。また、サブネットに対してルートテーブルを作成すると暗黙的にサブネットに対応するルーターを設置したことになります。

ルーティングの作成手順

手順1:
IAMユーザー用のマネジメントコンソールでVPCの設定画面を開き、左サイドバーにあるインターネットゲートウェイをクリックします。その後、「インターネットゲートウェイの作成」をクリックします。

Image from Gyazo

手順2:
名前タグにインターネットゲートウェイの名前を入力して、作成をクリックします(blog-test-igwという名前にしました)。 Image from Gyazo

手順3:
インターネットゲートウェイを作成しただけでVPCとデタッチの状態なので、アタッチします。VPC設定画面の「インターネットゲートウェイ」をクリックして、VPCにアタッチさせたいインターネットゲートウェイを選択します。その後、アクションをクリックして、「VPCにアタッチ」をクリックします。インターネットゲートウェイをアタッチさせたいVPCを選択して、インターネットゲートウェイのアタッチをクリックしたらアタッチ成功です。 Image from Gyazo

手順4:
次にパブリックサブネット用のルートテーブルを作成します。パブリックサブネット用のルートテーブルを作成して、パブリックサブネットに紐づけます。VPC設定画面から「ルートテーブル」をクリックします。その後、ルートテーブルの作成をクリックします。 ルートテーブルの名前はblog-test-public-routeにします。その後、ルートテーブルを紐づけるVPCを選択して「ルートテーブルを作成」をクリックします。

Image from Gyazo

手順5:
VPCに関連づけたルートテーブルをVPC内のパブリックサブネットにも関連づけます。先ほど作成したルートテーブルを選択して、画面下のサブネットの関連づけをクリックします。

Image from Gyazo

手順6:
「サブネットの関連付けを編集」をクリックします。ルートテーブルと関連づけたいサブネットを選択して保存をクリックします。 Image from Gyazo

手順7:
ルートを編集したいルートテーブルをクリックして、「ルート」をクリックします。その後、「ルートの編集」をクリックします。デフォルトルート(0.0.0.0/0)の場合、ターゲットがインターネットゲートウェイになるようなルートをルートテーブルに設定します。その後、「変更を保存」をクリックします。

Image from Gyazo

以上で、パブリックサブネットにデフォルトルートのターゲットがインターネットゲートウェイであるようなルートテーブルを紐づけることができました。これによりパブリックサブネットからインターネットに接続できます。

VPC設計の3つのポイント

  1. VPCにはプライベートIPアドレスの範囲を指定する
    VPCはプライベートな仮想ネットワークなので、パブリックIPアドレスを指定することもできますが、プライベートなIPアドレスの範囲を指定します。
  2. IPアドレスの範囲はVPC作成後には変更できないので、初めから大きめに指定する
    /16が推奨です。
  3. オンプレミスとIPアドレスが重複しないようにする

VPCを分けるか、アカウントを分けるか

異なるシステムの場合、1つのアカウント内で管理していると煩雑になるので、アカウントを分けた方が良いです。同一システムで環境が異なる場合(テスト環境、本番環境)、同一アカウントで環境ごとにVPCを作成します。

サブネットの設計の2つのポイント

  1. 将来的に必要なIPアドレス数を見積もる
    後で足りなくなると困るので、やや広めに取ります。/24が標準的です。
  2. サブネットの分割はアベイラビリティゾーンとルーティンポリシーを基準に行う
    サブネットに割り当てられるルートテーブルは一つです(逆に一つのルートテーブルは複数のサブネットに割り当てることができます)。 それを考慮してインターネットアクセスの有無や拠点アクセスの有無などのルーティングポリシーに応じて分割します。また、耐障害性を考えて別のアベイラビリティゾーンにWebサーバーを立てたい場合、各アベイラビリティゾーンにサブネットを作成します。

パブリックサブネットを別のアベイラビリティゾーンに追加で作成し、そのパブリックサブネットに今回作成したルートテーブルをアタッチする

アベイラビリティゾーンは、ap-northeast-1cにしました。 パブリックサブネットにルートテーブルをアタッチすることで、 作成後、以下のようなネットワーク構成になりました。 Image from Gyazo

参考記事

AWS:ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得 | Udemy

AWS再入門2022 Amazon VPC編 | DevelopersIO

IPアドレス

AWS Internet Gatewayとは?初心者にもわかりやすく説明します | FEnet コラム for AWS

ルーター

ルーティング

ルートテーブルを設定する - Amazon Virtual Private Cloud

AWSのネットワーク構成&ルーティングについて - Qiita