AWS初心者による、SAA取得に向けた学習の記録①

※記事について著作権等で問題がありましたら、お手数ですがコメントいただけると幸いです。<br>早急に修正か、必要に応じて記事を削除いたします。

# はじめに

10月にAWSソリューションアーキテクトのアソシエイトを受けることに決めた私が、
これから日々学んだことを記録していきます。
が、非常に基礎的なことを書き残すので、熟練者の方にとっては退屈な内容になるかと思います、、、

私は業務でEC2やS3、Cognitoといった片手で数えられる程度のサービスしか触ったことがないため、ほぼ初心者状態です。

サービスの概要や機能について読み返すために、個人的にメモとして残すことが目的ではあるのですが
同じSAAを受ける予定のある方や、これから勉強しようと考えている方にとって、書いた記事が少しでもお役に立てればと思います。（当然まだ受かっていないので説得力はないですが、、）

今回学習に使う書籍は 
[AWS認定資格試験テキスト AWS認定ソリューションアーキテクト・アソシエイト 改訂版第2段](https://www.amazon.co.jp/dp/B08MVXRFFN?
tag=maftracking339397-22&linkCode=ure&creative=6339) 
になります。

こちらは2020年3月から改定されたAWSソリューションアーキテクト アソシエイトの試験の新版「SAA-C02」の出題内容に対応しているようで、
私の場合はこの教材で基礎を固めた後で、問題集をひたすら解く予定です。

問題集に入るまでの期間に学んだ、各サービスの機能やサービス同士の結びつきなどについて書いていこうと思います。


<br>

他の記事はこちらからどうぞ。

* AWS初心者による、SAA取得に向けた学習の記録①
* [AWS初心者による、SAA取得に向けた学習の記録②](https://qiita.com/t17_hr/items/e8d6d6e97b8b7487a5a4)
* [AWS初心者による、SAA取得に向けた学習の記録③](https://qiita.com/t17_hr/items/5b85d13db5fb4044c01d)
* [AWS初心者による、SAA取得に向けた学習の記録④](https://qiita.com/t17_hr/items/f35cb0e313fd7863afb6)
* [AWS初心者による、SAA取得に向けた学習の記録⑤](https://qiita.com/t17_hr/items/ce20a44f1c586c145da3)
* [AWS初心者による、SAA取得に向けた学習の記録⑥](https://qiita.com/t17_hr/items/cbdc5c053a7bf63fa2a6)


# 本題

ここからは各サービスについて書きます。

## リージョンとアベイラビリティゾーン

### リージョン

* AWSがサービスを提供している拠点（国と地域）のこと
* リージョン同士は地理的に離れた場所に配置されている

### アベイラビリティゾーン（Az）

* リージョン内に複数存在する
* 一つのAZは複数のデータセンターから構成される

![リージョンとアベイラビリティゾーン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021235/2419632d-db19-18d4-6122-99f0aab8e457.png)

画像引用元：[サーバー構築と設定 ～初心者にも分かりやすく解説～](https://xn--o9j8h1c9hb5756dt0ua226amc1a.com/?p=3793)

それぞれのAZは、地理的・電源的に独立した場所に配置されているため
災害によるAZへの障害に対して別のAZが影響されなくなり、信頼性の向上につながっています。

複数のAZを利用してシステムを構築することで、可用性の向上につながります。（**マルチAZ**）

## VPC

* AWSのネットワークサービスの中核となるサービス
* 利用者ごとのプライベートなネットワークをAWS内に作成
* インターネットゲートウェイ（IGW）と呼ばれるインターネット側の出口をつけることで、直接インターネットに出ていくことが可能になる

また、オンプレミスの各拠点をつなげるために、仮想プライベートゲートウェイ（VGW）を出口として
Direct ConnectやVPN経由で直接インターネットに出ることなく、各拠点と接続が可能になります。

![VPC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021235/d484f434-1c10-4d68-61bc-28b1e4518263.png)

## IPアドレス

* VPCには自由なIPアドレス（CIDRブロック）を割り当てることが可能
* CIDRブロックは/16から/28までの範囲で作成可能

仕様可能なIPアドレスになります。

* クラスA（10.0.0.0 ～ 10.255.255.255）
* クラスB（172.16.0.0 ～ 172.31.255.255）
* クラスC（192.168.0.0 ～ 192.168.255.255） 

## サブネット

EC2インスタンスなどを起動するための、VPC内部のアドレス範囲のことです。

* VPCに設定したCIDRブロックの範囲に収まる小さなCIDRブロックを割り当てることが可能<br>（VPCと同様に、16ビットから4ビットまで）
* 個々のサブネットには一つの仮想ルータがあり、<br>そのルータがルートテーブルとネットワークACLの設定を持ち、サブネット内のEC2インスタンスのデフォルトゲートウェイとなっている
* サブネットごとにルートテーブルとネットワークACLを指定する必要がある
* 一つのVPC内に作成できるサブネットの数は200個だが、リクエストにより拡張可能
* サブネットの最初の4つおよび最後の1つのアドレスは予約アドレスのため使用不可<br>（24ビットマスクのサブネットでは0、1、2、3、255）
* サービスの中にはIPアドレスの確保が必要なサービスが存在する（ELBの場合IPアドレスが8個必要）

## サブネットとAZ

サブネットの作成はEC2やRDSの作成時にAZをまたいで構築するなど
同一の役割を持つサブネットを複数のAZに割り振ることで、AZ障害に対して耐久性の高い設計にすることができます。

![マルチAZ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021235/d64221da-0279-8d16-c650-3f9f3d7e296c.png)

画像引用元：[AWSで大規模障害発生時に被害を最小限にする方法](https://public-cloud-pci-dss.jp/aws/402/)

## ルートテーブル

アドレス設計の次はルーティング設計です。

* AWSのルーティング要素はルートテーブルと各種ゲートウェイ
* ルートテーブルは、パケットの転送先を決める
* 通信経路（送信先とターゲット）を設定する
 * 送信先：パケットに指定された宛先IP
 * ターゲット：実際の転送先
* ルートテーブルはサブネットに一つ
* 一つのルートテーブルを複数のサブネットで共有はできるが、一つのサブネットに複数のルートテーブルの設定は不可
* VPCにはメインルートテーブルがあり、これがサブネット作成時に指定しない場合のデフォルトのルートテーブルとなる

ルートテーブルに記載がないところへパケットを送信することはできません。

![ルートテーブル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021235/e3a49f22-21ba-950e-fd4e-df2568b6a918.png)

画像引用元：[ルーティングオプションの例](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/route-table-options.html)

## セキュリティグループとネットワークACL

VPCの通信制御の役割を担います。

### セキュリティグループ

* EC2やELB、RDSなど、インスタンス単位の通信制御に使用
* インスタンスには少なくとも一つのセキュリティグループをアタッチする必要がある
* 以下、インバウンド（内向き）とアウトバウンド（外向き）に指定可能な制御項目
 * プロトコル（TCP、UDP）
 * ポート範囲
 * 送受信先のCIDRかセキュリティグループ
 * セキュリティグループはデフォルトでアクセスを拒否し、設定された項目のみ許可する


### ネットワークACL（アクセスコントロールリスト）

* サブネットごとの通信制御に使用
* セキュリティグループと同様に、インバウンドとアウトバウンドの制御、送受信先のCIDRとポートの指定が可能
* セキュリティグループと違い、送受信先にはセキュリティグループの指定は不可
* デフォルトの設定ではすべての通信を許可

また、セキュリティグループとネットワークACLの違いは「状態」を保持するかどうかになります。

セキュリティグループ

* ステートフルで、応答トラフィックはルールに関係なく通信が許可される

ネットワークACL

* ステートレスで、応答トラフィックであろうと明示的に許可しないと通信が拒否される
* そのため、エフェメラルポート（1025～65535）を許可指定しないと帰りの通信が遮断される

※エフェメラルポートは、特定の用途やプロトコルによって固定的に使用することが想定されておらず、どのようなソフトウェアやプロトコルからも自由に利用することができるポートのこと

## ゲートウェイ

VPCの内部と外部との通信をやり取りする出入口になります。

* インターネットと接続する「インターネットゲートウェイ」
* VPNやDirect Connectを経由してオンプレのネットワーク基盤と接続する「仮想プライベートゲートウェイ」

### インターネットゲートウェイ（IGW）

* VPCとインターネットとを接続するためのゲートウェイ
* 各VPCに一つだけアタッチする
* ルートテーブルでIGWをターゲットに指定すると、その宛先アドレスとの通信はIGWを通してインターネットに向けられる
 * 多くの場合、デフォルトルート（0.0.0.0/0）を指定
* パブリックサブネットの条件の一つは、ルーティングでIGWに向いていること
* プライベートサブネットはその反対で、ルーティングでIGWに向いていない必要がある
* EC2インスタンスがインターネットと通信するにはパブリックIPを持つか、NATゲートウェイを経由する必要がある
* NATゲートウェイはネットワークアドレス変換機能を持ち、プライベートIPをNATゲートウェイが持つグローバルIPに変換し、外部との通信を実現する

※NATゲートウェイは、VPC内に構成した「プライベートサブネット」からインターネットに接続するためのゲートウェイのこと。プライベートサブネット（インターネットに接続できないサブネット）の中に配置したシステムが、これを経由することでインターネットに安全に出れるようになる

引用元：[【ネットワーク】 脱・知ってるつもり！AWSのネットワーク関連用語を基礎からおさらい](https://www.bit-drive.ne.jp/managed-cloud/column/column_31.html#:~:text=%E3%81%A0%E3%81%9D%E3%81%86%E3%81%A7%E3%81%99%E3%80%82-,NAT%20Gateway,%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82)


### 仮想プライベートゲートウェイ（VGW）

* VPCがVPNやDirect Connectと接続するためのゲートウェイ
* 各VPCに一つだけアタッチする
* 一つしか存在しないが、複数のVPNやDirect Connectと接続が可能
* ルートテーブルからVGWをターゲットに指定すると、その宛先アドレスとの通信はVGWから、VPNやDirect Connectを通してオンプレのネットワーク基盤に向けられる
* オンプレネットワークの宛先は、ルートテーブルに静的に記載する方法と、ルート伝播（プロパゲーション）機能で動的に反映する方法がある

![仮想プライベートゲートウェイ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021235/d82e445e-5c29-3b39-f3f1-645821c4befb.png)

画像引用元：[[Amazon VPC] ハードウェアVPN接続についてまとめてみた](https://dev.classmethod.jp/articles/vpc-connect-hardware-vpn/)

## VPCエンドポイント

VPC内からインターネット上のAWSサービスに接続する方法は、インターネットゲートウェイを利用する他に
VPCエンドポイントと呼ばれる特殊なゲートウェイを利用する方法があります。

* S3やDynamoDBと接続する際に利用する「ゲートウェイエンドポイント」
* それ以外の大多数のサービスで利用する「インターフェースエンドポイント（AWS PrivateLink）」

![VPCエンドポイント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021235/8d38f556-59a5-880a-a23f-97d5a653695e.png)

画像引用元：[AWS VPCエンドポイントを利用したHAクラスターの構築を試してみました (Windows/Linux)](https://jpn.nec.com/clusterpro/blog/20180115.html)

### ゲートウェイエンドポイント

* ルーティングを利用したサービス
* エンドポイントを作成しサブネットと関連付けると、そのサブネットからS3、DynamoDBへの通信はインターネットゲートウェイではなくエンドポイントを通じて行われる
* 経路の安全性を考慮した場合、インターネットを経由せずにエンドポイントを使用することが重要になる


## ピアリング接続

VPCピアリングは、2つのVPC間でプライベート接続を実現するための機能です。
同一AWSアカウントのVPC間のみではなく、アカウントをまたがっての接続が可能になります。

* VPCピアリングの通信相手は、VPC内のEC2インスタンス等
* IGWやVGWなどへの接続は不可
* 相手先のVPCがピアリングしている別のVPCへの推移的な接続は不可

![ピアリング.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021235/6d70dddb-1b4f-3357-9f10-1b41e33b2406.png)

画像引用元：[VPCピアリング越しのRDSエンドポイント接続についての考察](https://dev.classmethod.jp/articles/endpoint-connecting-on-vpcpeering/)


## VPCフローログ

VPC内の通信の解析に使用します。
VPCフローログは、AWSでの仮想ネットワークインターフェースカードであるENI（Elastic Network Service）単位で記録されます。

記録内容

* 送信元・送信先アドレス
* ポート
* プロトコル番号
* データ量
* 許可/拒否の区別

![VPCフローログ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021235/a2f5ef5e-291e-5c18-d8e9-556fd74e691c.png)

画像引用元：[VPC Flow Logs で Peering したVPC間のトラフィックを監視してみる](https://dev.classmethod.jp/articles/vpc-flow-logs-via-peering/)


## Direct ConnectとDirect Connect Gateway

AWSとオフィスやデータセンターなどの物理拠点とを専用線でつなげたい場合、AWS Direct Connectを使用します。

* VPNと比べて遅延やパケット損失率が低下し、スループットが向上する
* アウトバウンドトラフィックの料金が、Direct Connect経由の方が安価に設定されている
　* ネットワーク品質が重要になる場合や、大量のデータをやり取りする場合に使用
* 複数のAWSアカウントやVPCを利用することが一般的になってきている現在、Direct Connect Gatewayを使用すると、一つのDirect Connect接続で拠点と複数のAWSアカウントやVPCへの接続が可能
* 複数のVPCとオンプレネットワークを、中央ハブを介して接続する「AWS Transit Gateway」というサービスも存在する

![DirectConnect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021235/847ecfbb-d76b-1739-8f10-0bfc5e05d702.png)

画像引用元：[AWSを専用線で直結する『AWS Direct Connect』を利用するためのノウハウを記したホワイトペーパーを公開](https://cloudpack.jp/info/20160613-cloudpack-directconnect-white-paper-has-been-published.html)

![DirectConnectGateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1021235/791f9024-edac-8bec-5bcc-1dc7855b1449.png)

画像引用元：[Direct Connect ゲートウェイ](https://docs.aws.amazon.com/ja_jp/directconnect/latest/UserGuide/direct-connect-gateways-intro.html)


# 終わりに

一旦、現在読み進めているところまでまとめましたが、明日以降に続きを書いていきます。
AWSに関しては、ここまで嚙み砕いて解説してくれている教材に触れたことが今までなかったので、初心者にとっても非常に入りやすい内容になっているのかと思いました。

最後まで読んでいただきありがとうございました。

※関連記事へのリンク

* AWS初心者による、SAA取得に向けた学習の記録①
* [AWS初心者による、SAA取得に向けた学習の記録②](https://qiita.com/t17_hr/items/e8d6d6e97b8b7487a5a4)
* [AWS初心者による、SAA取得に向けた学習の記録③](https://qiita.com/t17_hr/items/5b85d13db5fb4044c01d)
* [AWS初心者による、SAA取得に向けた学習の記録④](https://qiita.com/t17_hr/items/f35cb0e313fd7863afb6)
* [AWS初心者による、SAA取得に向けた学習の記録⑤](https://qiita.com/t17_hr/items/ce20a44f1c586c145da3)
* [AWS初心者による、SAA取得に向けた学習の記録⑥](https://qiita.com/t17_hr/items/cbdc5c053a7bf63fa2a6)

※参考書籍
[AWS認定資格試験テキスト AWS認定ソリューションアーキテクト・アソシエイト 改訂版第2段](https://www.amazon.co.jp/dp/B08MVXRFFN?
tag=maftracking339397-22&linkCode=ure&creative=6339)