AWSのインフラストラクチャ構成

## はじめに
　クラウドサービスがどのようにしてサービスを提供しているのかを知るために、
　AWS(Amazon Web Services)を調べた結果をまとめた記事です。
 
　具体的には、どのような施設や設備が基盤となって構築されているのか、そしてその
　インフラ上に構築される仮想ネットワーク内の環境についてです。

　本記事は、画像を含めAWS公式サイトを参考に作成したものです。そのため、記事内容
　の著作権はAWSに帰属します。また、記事内容は2024年6月時点のものであるため、現
　在のサービス内容との相違が含まれている可能性があります。

## AWSのインフラ
#### リージョンとは
　AWSは世界各地にあるデータセンター群によってサービスを提供している。データ
　センター群はリージョンと呼ばれ、地理的に離れた場所に点在している。
　日本では、東京リージョン(ap-northeast-1)と大阪リージョン(ap-northeast-3)の
　2つが存在している。
 　現存するリージョン数と立地を示す地図は下記URL参照。

 https://aws.amazon.com/jp/about-aws/global-infrastructure/
 
#### AZとは
　リージョン内は3つ以上のアベイラビリティゾーン(AZ)に分割されている。これは、
　通信障害や災害が発生しても影響範囲を限定的にし、システムを継続して稼働でき
　るようにするためである。つまり、AZはリージョンを論理的に分割した範囲である。
 **AZのインフラ**
　AZは1つ以上のデータセンターで構成されている。データセンターやAZ間は専用の
　メトロファイバーで相互接続されていて、通信は全て暗号化されている。
　AZ間は互いに数km～100km(60マイル)以内に配置されている。これは、通信障害や
　災害の影響を最小限に留めるための対策として同期的なレプリケーションを講じて
　いるためであり、その遅延時間を1桁ミリ秒に抑えるためである。
**AZのインターネット接続**
　リージョン内にはAZだけでなく２つのトランジットセンターが存在し、それらは複
　数のTier1プロバイダとピアリングによって繋がっている。AZはトランジットセンタ
　ーを経由することでインターネットに接続している。2つのトランジットセンターが
　存在することで、障害や災害による通信切断を防ぐことができる。

**リージョン内のネットワーク構成図**

<img width="700" alt="availability-zones.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1620826/702723dd-465f-3980-aff9-e2c0c38c5879.png">

**節まとめ**
　AWSは世界各地にある複数のデータセンター群(リージョン)で構成されている。
　リージョンは複数のアベイラビリティゾーン(AZ)で構成されている。
　複数で構成されている理由は、システムの可用性を高めるための施策である。


 
## インフラ内に構築される仮想ネットワーク
### VPCとは
　AWSは様々なクラウドサービスを提供しており、その内の1つにAmazon EC2がある。
　これは仮想サーバーサービスであり、仮想サーバーと仮想ネットワークの構築や仮想
　ファイアウォールなどの機能を提供してくれる。この内の仮想ネットワークのことを
　VPCと呼ぶ。EC2は1つのリージョン内に属するVPCを提供し、利用者はここにネット
　ワーク環境を構築していく。
#### パブリック/プライベートサブネットとは
　VPCにはプライベートIPアドレスが割り当てられる。それをサブネットマスク(CIDRブロ
　ック)を利用することで、VPC内に複数のサブネットを構築することができる。
**2つの違い**
　サブネットには、パブリックとプライベートサブネットの2種類がある。サブネット
　が持つルーティングテーブルにインターネットゲートウェイ(IGW)へのルートがある
　ものをパブリックサブネットと呼び、そうでないものをプライベートサブネットと呼
　ぶ。つまり、インターネットに接続しているかが2つのサブネットの違いである。
**構築場所**
　サブネットは1つのリージョン内であれば、AZをまたいだ構築が可能である。例えば、
　東京リージョンの1a(AZ)にプライベートサブネットを、1c(AZ)にパブリックサブネット
　といった作成ができる。
 **サーバー設置**
　サブネット内には、webやデータベースなどの仮想サーバーを設置することができる。
　仮想サーバーはEC2インスタンスによって構築する。
### EC2インスタンスとは
　EC2が提供する仮想サーバーをEC2インスタンスと呼ぶ。インスタンスは、サーバー
　として機能するのに必要なコンポーネント(OSなど)をパッケージ化したマシンイメ
　ージから生成される。
**IPアドレスとネットワーク機器**
　インスタンス作成時にプライベートIPアドレスを割り当てるが、インターネットに
　接続する場合は別途パブリックIPアドレス(もしくはElastic IPアドレス)の割り当てと
　インターネットゲートウェイが必要である。また、プライベート環境(他のVPCやオ
　ンプレミス)と通信する際はNATゲートウェイが必要である。
### インターネットゲートウェイとは
　インターネットゲートウェイ(IGW)は、VPC内のEC2インスタンスをインターネットに
　接続するためのコンポーネント。IPv4とv6をサポートしている。
**NAT機能の提供**
　IGWは、NAT機能を提供している。インターネットからVPC内のインスタンスに向かう
　通信時には、送信先情報をインスタンスのパブリックIPアドレスからインスタンスのプ
　ライベートIPアドレスに書き換える。一方、インスタンスからインターネットに向かう
　通信時は、送信元情報をインスタンスのプライベートIPアドレスからインスタンスのパ
　ブリックIPアドレスに書き換える。
**利用条件**
　IGWを利用するには、IGWを作成しVPCにアタッチさせる必要がある。またインター
　ネットに接続するインスタンスは、IGWへのルートが設定されたルートテーブルを持
　つサブネット(つまりパブリックサブネット)に属し、かつインスタンス自身にパブリ
　ックIPアドレス(もしくはElastic IPアドレス)が割り当てられている必要がある。
　プライベートサブネットに属していてパブリックIPアドレスが割り当てられていない
　インスタンスがインターネットに接続するには、NATゲートウェイ(もしくはNATイン
　スタンス)を経由してIGWと通信する必要がある。

:::note warn
NATインスタンスはサポートを終了したAMIを使用しているため、AWS公式サイト
ではNATゲートウェイの使用を推奨しています。
:::
 
### NATゲートウェイとは
　NATゲートウェイは、プライベートサブネット内のインスタンスにNAPT機能を提供す
　るサービス。プライベートサブネット内のインスタンスもソフトウェアのインストー
　ルやアップデートなどの理由でインターネット接続する必要がある。
　NATゲートウェイとインスタンスを接続するタイプが、パブリックとプライベートの
　2種類ある。
**接続タイプ**
　パブリックNATゲートウェイの場合、インターネットやプライベート環境(他のVPCや
　オンプレミス)と接続し通信することができる。但し、NATゲートウェイをパブリック
　サブネット内に設置し、かつElastic IPアドレスが割り当てられていなければいけない。
　プライベートNATゲートウェイの場合、プライベート環境と通信できるがインターネッ
　トには接続することができない。こちらの接続タイプでは、設置するサブネットの制限
　はないしElastic IPアドレスを割り当てる必要もない。
　どちらのタイプでもプライベート環境と接続する場合、NATゲートウェイはtransit gateway
　もしくは仮想プライベートゲートウェイ(VGW)を経由してルーティングを行う。VGWは
**NAPT機能**
　パブリックNATゲートウェイの場合、送信元インスタンスのプライベートIPアドレスをNAT
　ゲートウェイのプライベートIPアドレスに書き換える。インターネット接続では、さらに
　IGWがNATゲートウェイのプライベートIPアドレスをElasticIPアドレスに書き換える。プラ
　イベート環境接続では、プライベートIPアドレスで通信する。
　プライベートNATゲートウェイの場合、インスタンスのプライベートIPアドレスをNATゲ
　ートウェイのプライベートIPアドレスに書き換える。そしてそれを使ってプライベート環
　境と通信を行う。
 
**各サブネットからインターネット接続図**

　　　　　　<img width="450" alt="public-nat-gateway-diagram.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1620826/861e04ff-8f48-1138-d913-7087a1a3dfd5.png">

### 節まとめ
　AWSが提供する仮想ネットワーク(VPC)にネットワーク環境を構築していく。
　VPC内に複数のサブネットを作成することができ、インターネットに接続できる方を
　パブリックサブネット、できない方をプライベートサブネットと呼ぶ。
　サブネット内に設置する仮想サーバーをインスタンスという。
　一般家庭におけるルータの役割をVPC内ではインターネットゲートウェイやNATゲート
　ウェイが担っている。



## DNSサービス
### Route53とは
　AWSが提供するクラウドサービスの1つであるドメインネームシステム(DNS)サービスは、
　Amazon Route53が担ってる。Route53はドメイン登録、DNSルーティング、ヘルスチェ
　ックの3つの主要な機能を提供している。
#### ドメイン登録
　Route53を利用してドメイン登録を行うと、Amazon Registrar, Inc.もしくはGandiいずれか
　のレジストラがレジストリに登録申請してくれる。また、ドメイン名と同じ名前のパブリ
　ックホストゾーンが作成され、AWSが保有するRoute53ネームサーバの内のランダムな4つ
　のネームサーバがそれらを管理するようになる。
**ホストゾーンとは**
　ホストゾーンとは各ネームサーバ自身が管理するドメインとそのサブドメインのルーティ
　ング情報(DNSレコード)のまとまりである。例えば、example.comのホストゾーンには、
　example.comを自身が管理しているという情報や、サブドメインであるwww.example.com
　をウェブサーバに、同じくサブドメインのmail.emxample.comをEメールサーバにルーティ
　ングするための情報(レコード)が含まれている。
#### DNSルーティング
　Route53のDNSサーバーは、Route53ネームサーバとRoute53リゾルバで構成されている。
　Route53ネームサーバは、権威DNSサーバーでありパブリックホストゾーンとプライベ
　ートホストゾーンの2種類を管理している。
**2つのホストゾーン**
　パブリックホストゾーンは、パブリックIPアドレスに対するドメイン名のルーティング
　情報(DNSレコード)のまとまりである。プライベートホストゾーンは、プライベートIP
　アドレスに対するドメイン名のルーティング情報(DNSレコード)のまとまりである。1つ
　のサブネット内で通信するときはプライベートIPアドレスを使用するが、異なるサブネ
　ット間ではプライベートドメイン名を使用しRoute53Resolverを経由して通信する。
**Route53Resolver**
　Route53Resolverは、キャッシュDNSサーバーである。VPCは自身のIPアドレスに2加算し
　たアドレス、例えば10.0.0.0なら10.0.0.2をVPCエンドポイント(AWSサービスにプライベー
　ト接続でアクセスするためのコンポーネント)に割り当て、それを経由しRoute53Resolver
　と通信する。
**インターネット通信**
　VPC内のパブリックIPアドレスを持つインスタンスからインターネット上のリソースに通
　信する際、まずRoute53ResolverにDNSクエリを送信する。次にRoute53Resolverは自身が
　持つキャッシュ情報もしくは各ネームサーバに反復問い合わせを行い名前解決する。イン
　ターネット上のリソースがVPC内のドメイン名を持つインスタンスに通信する際は、各ネ
　ームサーバを辿っていきそのドメイン名が所属するホストゾーンを管理するRoute53が名
　前解決する。
**プライベート環境通信**
　オンプレミスや他VPCと通信の際は、エンドポイント(VPC外のリソースとRoute53resolver
　がDNSクエリ送受信するためのコンポーネント)を経由して双方に設置されたDNSリゾルバ
　が名前解決を行う。オンプレミスなどからVPC内にあるインスタンスの名前解決を行う場
　合、VPC内のインバウンドエンドポイントを経由してRoute53ResolverにDNSクエリを送信
　する。Route53Resolverは自身が持つ情報(キャッシュ)もしくはRoute53ネームサーバに問い
　合わせた結果を返す。VPC内のインスタンスからオンプレミスなどにあるリソースの名前
　解決を行う場合、VPC内インスタンスはVPCエンドポイントを経由してRoute53Resolverに
　DNSクエリを送信する。Route53Resolverはアウトバウンドエンドポイントを経由してオン
　プレミス内のDNSリゾルバに問い合わせて結果を受け取る。

**オンプレミス/VPC間の名前解決の流れ図**

<img width="700" alt="Resolver-routing.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1620826/e07d89a1-cf8c-b786-caa2-e520bb350b08.png">

#### ヘルスチェック
　Route53は世界各地にヘルスチェッカーを持っていて、それを用いてユーザが指定したエ
　ンドポイントの通信状況の正常性を確認することができる。具体的には、ウェブやEメー
　ルなどのサーバやアプリケーションといったリソースが正常であるか判断するため、イン
　ターネットを経由して自動リクエストを送信する。そして、連続したヘルスチェックに対
　する応答失敗のしきい値と応答時間の2つの値に基づいて正常性を評価する。ヘルスチェッ
　クによって冗長化されたシステム内の異常な状態のリソースを検知し、それをインターネ
　ットから遠ざけて正常なリソースにルーティングするようなことができる。

### 節のまとめ
　AWSのDNSはAmazon Route53が管理している。
　Route53が提供する主な機能は、ドメイン登録、DNSルーティング、ヘルスチェックの
　3つである。
　Route53はレジストラとしての役割を担っているため、ドメイン名を登録することがで
　きる。また、ネームサーバとしても機能するため、キャッシュDNSサーバーである
　Route53resolverと連動してDNSルーティングを制御している。
　ヘルスチェックは、VPC内のリソースの通信状況を確認するための機能である。



## その他サービス
**Transit Gateway**
　複数のVPCやオンプレミスを接続する中央ハブ。
　各々をピアリング接続する際の手間や煩雑化を解消することができる。

**AWS Direct Connect**
　オンプレミスとVPC間を専用回線で直接接続する。

**VGW**
　VPCがVPNやAWS Direct Connect、Transit Gatewayと接続するために利用する
　ゲートウェイのこと。

**Elastic IP**
　固定(静的)IPアドレス。インスタンスに割り当てられるパブリックIPアドレスは
　起動/停止するたびに変化する動的IPアドレス。




## 参考文献
Amazon Web Services. 「AWS Documentation」. https://docs.aws.amazon.com/, (参照 2024-06-10).