NATGWを使いプライベートサブネット内のEC2インスタンスでyum updateする

###やること
・パブリックサブネット内のEC2インスタンスを踏み台にしてプライベートサブネット内のEC2インスタンスに接続する。
・NATゲートウェイを使用し、プライベートサブネット内のEC2インスタンス内でyum updateを実行できるようにする。

###注意点
・<font color="Red">**NATゲートウェイは有料のサービスになります。一通り動作を確認した後は削除するのを忘れないように！**</font>
・筆者はwindowsなのでTera Termを使用してインスタンスにssh接続します。
・各サブネット内のEC2インスタンスは便宜上、下記表現に代えさせていただきます。
　**パブリックサブネット内のEC2インスタンス　⇒パブリック1a**
　**プライベートサブネット内のEC2インスタンス⇒プライベート1a**
・プライベートサブネット内からインターネットに接続する方法は他にもあり、今回作成する構成はあまりコスト効率が良くないため機能テストくらいに思っていただけると幸いです。

###事前準備
下記VPC環境が用意できているものとします。
・パブリックサブネットのルートテーブル内にインターネットゲートウェイがルーティングされている。
・パブリック1aにパブリックIPv4アドレスが割り当てられている。
・各EC2インスタンスのセキュリティグループでSSH接続が許可されている。
・各サブネットのネットワークACLでSSH接続が許可されている。
・各EC2インスタンスは同じキーペアを使用して作成する。
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/66ff673a-0177-9b44-611e-3ff8d9b46675.png)

###自分のPC→パブリック1a
![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/1eaabab4-c462-a494-363e-83aaef20ee40.png)
AWSのEC2コンソールからパブリック1aに付与されているパブリックIPv4アドレスをコピー
![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/b8f7f481-9508-d699-8724-aa091b12be39.png)
パブリック1aに付与されているパブリックIPv4アドレスを入力してOKを押下
![図7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/d77fafea-3eae-dae8-971b-549c9403b8e3.png)
ユーザ名に「ec2-user」と入力。
「RSA/DSA/ECDSA/ED25519鍵を使う」にチェック。右の青枠になっている「...」ボタンからインスタンス起動時に適用したキーペアを選択し、OKを押下。
![図8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/032abf31-f30f-c0c2-ec0c-a836a61964a2.png)
パブリック1aに接続できました。
下記コマンドを順に入力してyum updateを行います。

```
①root権限に切り替え
sudo su
②yumアップデート
yum update
```
###パブリック1a→プライベート1a
![図9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/e6ecfbf0-3eef-10b8-bc38-d6c2510c4834.png)
パブリック1aからプライベート1aに接続する際もペアキーが必要なのでパブリック1aに自分のPCに保存しているペアキーを保存する必要があります。
下記コマンドを使いパブリック1a内でnanoエディタを開く。

```
nano キー名.pem
```
![図10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/8c7e2ac2-4fcb-59e8-68f3-86be95c83ffd.png)
ペアキーをテキストエディタで開く。
キーの中身をコピーした状態でnanoエディタ内で右クリック、OKボタンで貼り付けて保存。
下記コマンドで複製したキーへのアクセス権限を設定。

```
chmod 400 キー名.pem
```
![図11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/dd0b935f-94bd-80cd-5d20-f4323b9e030e.png)
AWSのEC2コンソールからプライベート1aに付与されているプライベートIPv4アドレスをコピー。
複製したキーとコピーしたプライベートIPv4アドレスを使用し、プライベート1aにssh接続。

```
ssh ec2-user@コピーしたプライベートIPv4アドレス -i キー名.pem
```
![図12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/fc7a6a2c-8437-5a57-8a29-9f139287bfe3.png)
そして下記コマンドでプライベート1aもyumアップデートしようとすると・・・

```
①root権限に切り替え
sudo su
②yumアップデート
yum update
```
![キャプチャ10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/0d145500-5049-93c5-9e38-a7c4c095c643.png)
このようにエラーになってしまいます。
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/66ff673a-0177-9b44-611e-3ff8d9b46675.png)
最初にある図の通り、パブリックサブネットはインターネットゲートウェイでインターネットに接続しているため、アップデートできました。
しかし、現状プライベートサブネットはインターネットと通信する手段がありません。これによりアップデートしようとしても必要なファイルなどが取得できずエラーになったというわけです。
![図13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/675291fd-bd1c-0452-490c-d5c4d9fddde2.png)
そこで今回はNATゲートウェイを使用し、パブリックサブネットを経由しプライベート1aでインターネットに接続できるよう設定していきます。
![図14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/657ab752-c3bf-0b75-1ba7-285552f137b9.png)
VPCのコンソール←メニューから「NATゲートウェイ」を選択。
画面右上「NATゲートウェイを作成」を押下。
![図15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/c2eec26b-a99c-866f-128f-6d682b04506a.png)
NATゲートウェイの名前を任意で入力。
設置するサブネットを選択。今回はパブリックサブネットを選択。
Elastic IPは、下の「Elastic IPの割り当て」で新規に割り当てるか、使っていないものがあればドロップダウンから選択。
すべて入力できたら、一番下にスクロールし、「NATゲートウェイの作成」ボタンを押下。
![図16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/bce3b256-9918-41ad-894f-36188bf99a01.png)
NATゲートウェイが正常に作成できたら、左メニューの「サブネット」からプライベートサブネットを選択。
ルートテーブルタブ内のIDを押下。
![図17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/ea76b7f6-24aa-f9d6-c337-5eadccbac651.png)
プライベートサブネット内のルートテーブルの設定にジャンプできるので、「ルートを編集」を押下。
![図18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/db94f3e0-52c4-3a5b-563f-dedba93c8f0e.png)
「ルートを追加」ボタン押下。
新しく作成した行の接続先に「0.0.0.0/0」を指定。
ターゲットはドロップダウンない項目にNATゲートウェイがあるので選択。しばらくすると先ほど作成したNATゲートウェイのIDが表示されるので選択。
※ステータスで「ブラックホール」となっているものがあれば削除
右下の「変更の保存」押下。

プライベートサブネットのルートテーブルにNATゲートウェイがルーティングされているのを確認し、再度yum updateを試みると・・・
![キャプチャ16.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529896/e71e56de-c9aa-5a21-08fb-d08b7a571a8a.png)
無事アップデートできました。