クラウド初心者のAWS入門(第8回)

#第8回 プライベートサブネットの構築
今回はインターネットとは直接的に接続しない、プライベートサブネットの構築を行います。

|![システム構成図_第8回目.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626270/cda31bb9-0568-86b2-29ba-1ac2709884ed.png)
|:-:|

以下の順番にて進めていきますので、よろしくお願いします！

+ [プライベートサブネットの構築](#プライベートサブネットの構築)
  - [アベイラビリティゾーンの確認](#アベイラビリティゾーンの確認)
  - [プライベートサブネットの作成](#プライベートサブネットの作成)
  - [ルートテーブルの確認](#ルートテーブルの確認)
+ [インスタンスの作成](#インスタンスの作成)
  - [インスタンスの設定](#インスタンスの設定)
  - [セキュリティグループの作成](#セキュリティグループの作成)
+ [動作確認](#動作確認)
  - [セキュリティグループの設定変更(ICMP用)](#セキュリティグループの設定変更)
  - [pingによる疎通確認](#pingによる疎通確認)

## プライベートサブネットの構築
パブリックサブネットと同じアベイラビリティゾーンに、プライベートサブネットを構築します。
異なるリージョンに配置した場合、課金されてしまうとのことです。
(料金についても勉強しないと・・ソリューションアーキテクト資格の勉強で出てきますかね？)

***
### アベイラビリティゾーンの確認
***

「VPCマネジメントコンソール」から、「サブネット」を選択し、パブリックサブネットのゾーンを確認します。

|<img width="1609" alt="1_アベイラビリティゾーンの確認.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626270/3c918ea6-bfee-aa64-2142-998f7dfcf0eb.png">
|:-:|

アベイラビリティゾーンは「ap-northeast-1d(apne1-az2)」でした。

***
### プライベートサブネットの作成
***

上記で確認したアベイラビリティゾーンと同じ場所に、プライベートサブネットを構築していきます。

|<img width="1660" alt="2_プライベートサブネットの作成.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626270/dab3d9ac-10db-b490-30dd-6df5cfaa39ec.png">
|:-:|

できました！

|<img width="969" alt="3_サブネット作成できた.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626270/bd9b7062-6a65-fac3-13f8-4211d5908ea0.png">
|:-:|

***
### ルートテーブルの確認
***

>
サブネットを作成した直後には、VPCに対して設定されている「メインルートテーブル」が適用されています。

[出典：Amazon Web Services 基礎からのネットワーク&サーバー構築](https://shop.nikkeibp.co.jp/front/commodity/0000/231260/)

とのことですので、メインルートテーブルを見て、必要に応じて設定を変更します。

|<img width="1655" alt="5_メインルートを確認する2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626270/f52e205f-34ab-533b-642e-5c6ff95a1b62.png">
|:-:|

いくつかあるルートテーブルの中で、どれがメインなのかは以下の２項目を確認することで判定可能です。

+ 「VPC ID」列を確認
  - 「vpc-xxxxx | VPC_AREA」のように、**"|"(パイプ区切り)で「VPC名」が表示されているもの**を選別する。VPC名が表示されていないルートはデフォルトルート

+ 「メイン」列が「はい」

メインのルートテーブルを確認した結果、下表のようになっていました。
(これが作成したプライベートサブネットに割り当てられたルートテーブル)

|送信先|ターゲット|
|:----:|:----:|
|10.0.0.0/16|local|

このルートテーブルは、プライベートサブネットに必要な以下の条件を満たすため、特に設定をいじることはしません。

+ インターネットには繋がない
  - インターネットゲートウェイがルートテーブルの宛先に入っていないこと。

+ 内部通信だけできれば良い
  - パブリックサブネット(10.0.1.0/24)とプライベートサブネット(10.0.2.0/24)間で通信できればOK。

ということで、確認だけして次に進みます。

<details>
<summary>補足</summary>
デフォルトルートとはなんぞやと調べたところ、とてもわかりやすい解説がありましたため、リンクを掲載させていただきます。
大変参考にさせていただきました。ありがとうございます。
[tkj06さんの記事](https://qiita.com/tkj06/items/3ee317b548fad49c6e6d)
</details>

## インスタンスの作成

作成したプライベートサブネット内にインスタンスを作成します。
基本は前回作成したインスタンスと同様に進めていきますので、差異がある点のみ記載します。

[参考：インスタンス作成の記事](https://qiita.com/Jerid/items/12566ac83301e8f32c30)

***
### インスタンスの設定
***

「インスタンスタイプの選択」までは前回同様です。

+ サブネット
  - 先ほど作成した「Private_Subnet」を選択
+ 自動割り当てパブリックIP
  - 「サブネット設定を使用(無効)」を選択(「無効」でも良い)

|<img width="1647" alt="9_インスタンス作成.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626270/4a221371-ee37-8931-4caa-e677bff24c15.png">
|:-:|

+ プライマリIP
  - 「10.0.2.10」を入力

|<img width="1655" alt="10_インスタンス作成のコピー.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626270/cc7dfe97-b9fd-1158-aaa6-3616616bc8c5.png">
|:-:|

ストレージの設定をおえたら(デフォルトですが)、インスタンスの名前を設定します。

+ キー
  - 「Name」を入力(固定)
+ 値
  - 「DBserver」を入力(任意)

|<img width="1329" alt="12_インスタンス作成.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626270/2c1ce6bc-00a9-bad5-4216-daaa89836517.png">
|:-:|

***
### セキュリティグループの作成
***

今後、プライベートサブネットにはDBを配置するので事前準備をしておきます。
具体的には、DBサーバが使用するポート3306番を、セキュリティグループに許可設定します。

セキュリティグループを新しく作成したら、3306番の許可設定をします。(図中③)

+ タイプ
  - 「MySQL/Aurora」を選択
+ プロトコル
  - 「TCP」を選択(固定)
+ ポート範囲
  - 「3306」(固定)
+ ソース
  -- 「任意の場所」

|<img width="1659" alt="14_インスタンス作成.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626270/dcf697ee-3a68-5f42-d6bf-1eb7308d718a.png">
|:-:|

ソースとして選択した「任意の場所」ですが、設定を行うと以下の2つが許可されます。

- 「0.0.0.0/0」・・IPv4の許可
- 「::/0」・・IPv6の許可

[参考文献：VPCのセキュリティグループ](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_SecurityGroups.html)

画面に従いインスタンスの作成を終えます。
**キーファイル紛失注意です!!**

## 動作確認

プライベートサブネット内にインスタンスの作成を行なったので、pingによる応答確認を実施していきたいと思います。

なお、今回確認するルートは下表となります。

|送信元|送信先|
|:---|:---|
|パブリックサブネット内のインスタンス(**10.0.1.10**)|プライベートサブネット内のインスタンス(**10.0.2.10**)|

内部通信として「10.0.0.0/16」の通信を「local」へ通信させるルートは存在しているため、セキュリティグループの設定だけでOKです!!
[ルートテーブルの確認](#ルートテーブルの確認)

***
### セキュリティグループの設定変更
***

セキュリティグループでは、デフォルトではping通信が許可されてません。
そのため、ping通信(ICMP)を許可設定してあげます。
具体的には下図の設定を加えます。

|<img width="1349" alt="22_sg調整.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626270/380033fa-a817-c091-25ad-581e9f579b96.png">
|:-:|

[設定変更手順はこちら->セキュリティグループの穴あけ](https://qiita.com/Jerid/items/075092451420451bc4e9#セキュリティグループのポート開け)

***
### pingによる疎通確認
***

パブリックサブネット内のインスタンス(10.0.1.10)にSSHで接続し、
プライベートサブネット内のインスタンス(10.0.2.10)へpingによる疎通確認を行います。

|<img width="572" alt="24_pingによる応答確認.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626270/e7d89d80-d3c0-f585-aaa5-ca14adbead4f.png">
|:-:|

画面はmacなのですが、TeraTerm等のターミナルで接続しても同じです。
[設定変更手順はこちら->TeraTermでインスタンスへログイン](https://qiita.com/Jerid/items/075092451420451bc4e9#TeraTermでインスタンスへログイン)

無事に疎通が取れることが確認できました。
今回は以上となります、長々とお付き合いいただきありがとうございました。

### 参考文献
[Amazon Web Services 基礎からのネットワーク&サーバー構築](https://shop.nikkeibp.co.jp/front/commodity/0000/231260/)