AWSを使う前に知っておきたいこと

# 概要
　AWSの説明なんて、あちこちに散在していますが、人に説明する時の為に、書いてみることにしました。
　本の説明をそのまま見せて説明してもわかってもらえないんですよね(経験談)。私の説明が下手なだけかもしれませんが(;^_^A
　今回、特に説明に困るVPC、Availability Zoneについて記載しています。

　ここに書いてあることを知らなくても使い始めることは可能ですが、知らないと後で行き詰まります。

　説明をわかりやすくする為に、たとえ話も多く、丸めて書いたりしていますので、多少正確さにかけるところはありますが、ご了承ください。

# AWSって何？
## 前提
### AWSとは共有オフィスである
　前提として、データセンターというのは、サーバやネットワーク機器を設置する場所を提供し、運用するサービスを行っている場所です。
　そしてAWSはデータセンターです。データセンターは共有オフィスのようなもので、1社だけで占有して使う、なんてぜいたくなことは一般的にはまずなくて、複数の会社が借りて使っています。
　データセンターで説明するとわかりづらいので、ここからは共有オフィスで例えて説明します。

### AWSとは全世界に拠点を持つ共有オフィスである
　AWSのようなクラウドと、サーバを貸してくれるVPSとの違いは、初心者にはよくわかりませんよね。
　実際、明確な違いはありません。

　が、ここであえて違いを述べるなら、その規模です。
　VPCがサーバを貸してくれるサービスとするなら、AWSはデータセンターそのものを貸してくれるサービスです。

　以下の地図を見てください。(図はAWS公式からお借りしています)
　〇はAWSの拠点を表しています。
　この拠点のことをリージョンと呼びます。
　
![AWS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400941/1f859eef-776e-0b09-3f48-16b340e60acc.png)

## リージョンとは
　AWSを利用する際、最初に利用するリージョンを選びます。
　では、リージョンとは何でしょうか。

### リージョンとは地域のこと
　以下の地図を見てください。(図はAWS公式からお借りしています)
　オレンジの〇がリージョンになります。
　このオレンジの〇に、AWSが共有オフィス(データセンター)を構えていると思ってください。
　
![AWS1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400941/28e25e50-d8ef-5376-6de1-4eef3f604f73.png)

### 日本におけるAWSリージョン
　2019年10月時点で、日本にはAWSの拠点が東京と大阪にあります。

　それぞれ
　・東京リージョン
　・大阪リージョン
　と呼びます。 

## VPCとは
　リージョンを選んだら、利用を開始する(サーバを立てる)前に、VPCを作ります。
　なんとなく、で使っている方もいると思いますが、さて、VPCとは何でしょうか。

### VPC＝利用者が利用権利を持つ区画

　以下の地図を見てください。
　こちらの地図の場所が恐らくAWS東京リージョンにおけるデータセンターのあるであろうといわれている場所です。(WikiLeaks調べ)
![AWS地図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400941/16edb07c-ccd6-74b0-338a-0dcb7980dc19.jpeg)

　VPCを作ると、この中の、空いている1つもしくは複数の区画を利用者ごとに割り当てて提供します。
　が、利用者は、どこにあるか、などは意識する必要はありません。

　ここがVPCのわかりづらいところなのですが、ここでも共有オフィスとして例えると、あなたのVPCと呼ばれるものは、あなたが利用権を持つ
　・西東京オフィスの2FのAフロア
　・品川オフィスの5FのCフロア
　・横浜オフィスの3階のDフロア
　の総称となります。

　ただし、あなたが直接その場所に赴くことは100%ありません。
　なので、どこにあるかなんてあなたにとってはどうでもいい情報です。
　
　あくまでデジタルの世界なので、複数の区画であってもまとめて1つの区画のように使えます。
　なので、あなたにとっては、1つの東京オフィスを借りている、ということを知っていればよいのです。

【注釈】
　メモリやストレージのことを知っていればわかりやすいかもしれません。
　メモリやストレージも、内部の複数の個所にデータが保存されますが、利用者からは1か所に保存された1つのデータにしか見えません。
　VPCも同じように考えてください。

### VPCを分ける意味
　あなたが共有オフィスを借りて事業を行ったとします。
　例でいうと、共有オフィス=VPCですが、このままでは、全社員が1つのオフィスで働くことになります。
　それは管理上わかりづらいですよね。
　なので、事業部ごとや管理したいチームごとにオフィスを分ける(VPCをわける)ことになります。

　もちろん、わけても行き来する(データのやり取りや通信を行う)仕組みはAWSに用意されています。

## Subnet(サブネット)とは？
　VPCを作ったら、Subnetを作成します。
　さて、ではSubnetとはなんでしょうか。

### Subnet=あなたのVPC内をさらに区分けしたフロアの事
　さて、あなたが共有オフィスを借りて事業を行ったとします。
　VPCは事業部ごとに分けました。

　AWSを使う場合は、これだけでは不十分で、さらにSubnetと呼ばれるもので分ける必要があります。

### Subnet=フロア
　Subnetは事業部のあるフロアだと思ってください。
　同じVPC内のそれぞれのフロア(Subnet)同士は普通に行き来できますし、通信もできます。
　ですが、外に出ていく場合場合を制限することができます。
　これがSubnetをわける理由になります。

### Subnetの種類
　SubnetはPrivate subnet、Public subnetと呼ばれるものにわけることができます。

### Private subnet
　直接外に出口がないSubnet(フロア)です。
　出口がないということは入り口もないので、外から攻撃を受けることはありません。
　外とやり取りする際は、Public subnetを通じて行うことになります。

　会社で例えると、(社内のお金を管理したり顧客管理を行うなどの)機密情報を扱う、外と直接やり取りする必要のないチーム(システム的に言えばサーバやデータベースなど)は直接外部の人が来た時にやりとりをさせず、必ず受付を通すことで、機密情報を外部に触れないようにします。
　
### Public subnet
　直接外とやり取りができるSubnet(フロア)です。
　基本的には外部とやり取りをしなくてはならないチーム(WEBサーバやメールサーバなど)をここに配置します。

　機密情報を扱うようなチーム(システム的に言えばサーバやデータベースなど)はここに配置しないことを推奨されています。(配置はできます)

### default subnet
　AWSでは、最初からSubnetが用意されています。
　ですが、これは全てPublic subnetです。

　機密情報を扱うシステムを作る際は、Private subnetを作って構築するようにしましょう。

### 他のsubnetとの通信
　やろうと思えば他の事業部(VPC)との通信も可能です。
　インターネット経由も可能ですが、ピア接続と呼ばれるAWSの公式の方法、もしくはVPNと呼ばれる暗号化した通信を利用してください。

【注釈】
　VPNがわからない方は、普通の通信をただのはがきだと思ってください。郵送している最中は誰でも内容を見ることができます。
　ピア接続やVPNを使えば、デジタルデータの上ですが、書留のように封書され、送り主、受取先までのしっかり管理されたやり取りを行うことができる、と考えてください。

## Availability Zone(アベイラビリティゾーン)とは？
　Subnetを作る際、Availability Zone(AZと記述されることも多い)を選択することになります。
　SubnetとAvailability Zoneはセットです。
　さて、ではAvailability Zoneとはなんでしょうか。
　
### Availability Zone=Subnetの場所
　さて、あなたが共有オフィスを借りて事業を行ったとします。
　VPCは事業部ごとに分けました。Subnetも作りましたが、Availability Zoneは考えていませんでした。
　すると、1つのAvailability Zoneに全ての業務が集中することになります。
　このままでは1つの場所にオフィスが集中することになるので、例えば事業部Aのオフィスが停電したり、通信障害を起こすと、事業が止まってしまいます。

　この対策として使われるのがAvailability Zoneとなります。

### SubnetとAvailability Zoneの違い

　Subnetが部屋だとしたら、Availability Zoneというのは、場所の違いです。
　例えばサンプル事業部というVPCがあって、その中でオフィスA、オフィスB、オフィスCというSubnetを作るとします。

　この時、Availability Zoneの中に設置することもできますが、別々の場所に設置するのが推奨されています。

### Availability Zoneが1つだけの場合の例
　以下の図はオフィスとして説明した場合の例ですが、以下のすべてのオフィスが同じVPC(=事業部)にあります。
　また、サンプル事業部というVPCの中にオフィスA、オフィスB、オフィスCというSubnetがあると考えてください。

　例えばオフィスAしかない場合、オフィスAがおかしくなったら、そこで事業は止まってしまいます。
![AZ1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400941/00fd7085-1bea-2f74-c17a-71a7a03e9748.png)

### SubnetごとにAvailability Zoneを分けた場合の例
　別々の場所にあるので、もしオフィスAに何かあっても、オフィスBやオフィスCで事業を継続することができます。
　これがAvailability Zoneです。
![AZ1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400941/00fd7085-1bea-2f74-c17a-71a7a03e9748.png)
![AZ2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400941/b4fe7f15-7f04-3c01-b75d-aec0c10d8475.png)
![AZ3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400941/b6ad0910-84e6-169e-cbf5-9d4db4266d8e.png)

### 注意
　Availability Zoneをわけてオフィスを作ると、確かに障害に強くなりますが、その分賃料もかさむことになります。
　となっては困るものを見極めて、Availability Zoneをわけるとよいでしょう。

## EC2とは
　EC2というのはAWSの利用の基本になるサーバです。
　ただの仮想サーバです。
　ここからは実際に使ってみるべきで、あまり説明することはないのですが、VPCやAvailability Zoneに絡めて、必要最初減のことを説明します。

### EC2=仮想サーバ
　EC2インスタンス(サーバ)は、上記で作ったAvailability ZoneごとSubnetの中に設置します。
　部署ごとに社員を配置するようなものです。

　実際利用したことのある方はEC2インスタンスを作る際にAvailability Zoneを選択する画面があったと思います。
　こんなの↓
![WS000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400941/e3850dec-d166-54e6-b41f-d0c4762961e2.jpeg)

　ここでSubnetとAvailability Zoneを選択することで、指定したSubnet/Availability ZoneにEC2が置かれます。

### EC2のSubnet/Availability Zoneの選択を間違えてしまった場合
　後から移動はできませんので、ご注意ください。
　間違えた場合、バックアップを作って、移動したのち、作り直しとなります。

# まとめ
## 用語
### リージョン
　国。
### VPC
　事業部。
### Subnet
　チームごとのフロア(部屋)。
　機密情報を扱うフロア(部屋)はわけて、直接外に出られないようにする。
### Availability Zone
　チームごとのフロアを配置する場所。
　同じ仕事をするチームをわけて、別々の場所で仕事をさせることで、片方のチームが動けなくなっても仕事が止まらない。
### EC2
　実際に働く人(サーバやデータベース)

## 作成の順番
　(1) リージョンを選ぶ。
　(2) VPCを作る。
　(3) 2つ以上のAvailability ZoneにわけてPrivate Subnetを作る。
　(4) 2つ以上のAvailability ZoneにわけてPublic Subnetを作る。
　(5) EC2などのサービスを開始する。
## 注意点
　・Subnetを作る場合はAvailability Zoneで2つ以上にわける。
　・機密情報を扱う場合は、Private Subnetを作って配置する。Public Subnetには極力機密情報は置かない。

# 編集後記
　いやぁ、説明って難しいですね。
　誤記や分かりづらい、こう書いた方がいいよ、みたいなことがあれば教えて頂けると嬉しいです。

　VPCの作り方やSubnetの作り方は、そのうち書こうと思います。

　書きました。

## VPCの作成方法
https://qiita.com/SSMU3/items/534d78eff1ddb1c077e0

## Public subnetの作成方法
https://qiita.com/SSMU3/items/f7458b3cd1d9c6db4339

## Private subnetの作成方法
https://qiita.com/SSMU3/items/9cace69a3bf6b11011d9