【AWS】VPC・EC2 作成 ハンズオン

2021/6/25　一部修正しました。

#はじめに
今回の記事ではAWS上での基本的なネットワーク環境の作成、EC2インスタンスの作成について記載します。
作成手順がベースとなりますが、随時補足しながら記載していきます。

#作業環境
macOS Big Sur バージョン 11.4

#構成図
以下の図のような環境の構築を目指します。
![diagram01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/4263be0b-f12c-79d5-1fa2-cc825033a32b.png)

※リソースはすべて東京リージョンに作成します。

#VPC作成
#####VPC(Amazon Virtual Private Cloud)とは

* AWSにおけるネットワーク環境を定義する仮想ネットワークのサービス
* このネットワークにEC2などのAWSリソースを配置していく
* VPC自体の作成には料金は発生しない

#####リージョンを選択
Management Consoleにログインし、まずはリージョンを選択します。
画面右上のプルダウンから使用したいリージョンを選択します。
※ここでは「アジアパシフィック（東京）」リージョンを選択します。
![スクリーンショット 2021-05-08 13.10.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/e5fae1b0-67c1-86b8-025c-b578b4306bab.png)

#####VPCを作成
リージョンが選択できたら、VPCの作成に進みます。
画面上部の[サービス]を展開し、"ネットワーキングとコンテンツ配信"内の[VPC]をクリックします。
![スクリーンショット 2021-05-08 12.36.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/d870f82f-f855-6ceb-1f98-d2d4aad7c4ba.png)

【別の方法】
検索バーを使用して、サービスを検索することも可能です。
![スクリーンショット 2021-05-22 11.40.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/8312ebcd-6e13-4f3a-a104-ed94162acece.png)

VPC ダッシュボードが開きます。
画面左メニューで[VPC]をクリックします。
![スクリーンショット 2021-05-08 12.38.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/8dfd0ff6-cfb6-a7f4-9090-6945519fc423.png)

画面右ペインにVPCの一覧が表示されます。
ここで表示されるのは選択しているリージョンに作成されているVPCとなります。
[VPCを作成]をクリックします。
![スクリーンショット 2021-05-08 12.38.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/4eb18a79-6b8f-ba83-2793-ba1d470951ee.png)

VPC作成ウィザードが開きます。
"名前タグ"にVPCの名前、"IPv4 CIDR ブロック"にVPCのIPv4アドレス範囲をCIDR形式で入力します。
![スクリーンショット 2021-05-08 12.51.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/460bcb2e-cf4b-b744-8198-a3302db6a663.png)

"名前タグ"に入力したVPCの名前を値とした「Name」キーのタグが追加されています。
必要に応じてその他のタグを追加し、[VPCを作成]をクリックします。
![スクリーンショット 2021-05-08 12.52.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/0c4c64d3-d783-c039-158e-197d3c9e0f7e.png)

VPCが作成されます。
![スクリーンショット 2021-05-08 13.03.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/0b471e39-e6e4-14b0-7753-653ca946811e.png)

先ほどのVPC一覧画面で作成したVPCが表示されることを確認します。
![スクリーンショット 2021-05-08 13.03.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/9df69bcf-b761-6f3a-cf39-438bfc344615.png)

VPCの作成は完了です。
続いてサブネットを作成していきます。

#パブリックサブネット作成
#####パブリックサブネットとは

* インターネットゲートウェイにルーティングされているサブネット
* VPCに紐づけて作成し、VPCのCIDR範囲内でサブネットのCIDRを指定
* サブネットの作成には料金は発生しない

#####インターネットゲートウェイとは

* VPCとインターネットとの通信を可能にするコンポーネント
* VPCに対して一つだけアタッチすることができる
* インターネットゲートウェイの作成には料金は発生しない

#####サブネットを作成
まずはパブリックサブネットとして構成するサブネットを作成します。
VPC画面の左メニューで[サブネット]をクリックします。
![スクリーンショット 2021-05-22 12.15.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/c8c26e79-ecb9-c85d-d990-989ac2a77f9c.png)

画面右ペインにサブネットの一覧が表示されます。
[サブネットを作成]をクリックします。
![スクリーンショット 2021-05-22 12.16.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/d19c8cf0-a6cb-a0d4-54a0-ab0bea8bcb87.png)

サブネット作成ウィザードが開きます。
"VPC ID"でサブネットを作成するVPCをプルダウンから選択します。
![スクリーンショット 2021-05-22 12.17.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/303cc52c-089c-4901-d5c5-c32a8694fc6b.png)

"サブネット名"にサブネットの名前を入力します。
![スクリーンショット 2021-05-22 12.18.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/33612e80-715a-7aa8-8709-e4286b244163.png)

"アベイラビリティーゾーン"でサブネットを作成するアベイラビリティーゾーンをプルダウンから選択します。
![スクリーンショット 2021-05-22 12.19.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/6f531de7-90bf-e3ed-2761-c5fe10b9999a.png)

【補足】
アベイラビリティーゾーン(AZ)とは複数のデータセンターから構成される単位となります。
各リージョンは複数のAZから構成されることで冗長性を確保しています。
東京リージョンは4つのAZで構成されていますが、通常使用できるのは以下の３つとなります。

* ap-northeast-1a
* ap-northeast-1c
* ap-northeast-1d

"IPv4 CIDR ブロック"にサブネットのIPv4アドレス範囲をCIDR形式で入力します。
IPv4アドレス範囲はVPCのアドレス範囲内となるように指定します。
また、"サブネット名"に入力したサブネットの名前を値とした「Name」キーのタグが追加されています。
必要に応じてその他のタグを追加し、[サブネットを作成]をクリックします。
![スクリーンショット 2021-05-22 12.20.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/0b321495-5ee2-200d-169e-054fc2b71c9d.png)

サブネットが作成されます。
![スクリーンショット 2021-05-22 12.20.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/b6bde8cc-1632-c8af-015f-d13e66e6d81e.png)

#####インターネットゲートウェイを作成・VPCへのアタッチ

サブネットが作成できたら、次にインターネットゲートウェイを作成していきます。
画面左メニューで[インターネットゲートウェイ]をクリックします。
![スクリーンショット 2021-05-22 12.23.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/4fe37ce5-721a-ef47-a736-9aad156788ef.png)

画面右ペインにインターネットゲートウェイの一覧が表示されます。
[インターネットゲートウェイを作成]をクリックします。
![スクリーンショット 2021-05-22 12.24.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/ef48ce29-8aac-5931-91f6-e57dbf6a5b46.png)

インターネットゲートウェイ作成ウィザードが開きます。
"名前タグ"にインターネットゲートウェイの名前を入力します。
"名前タグ"に入力したインターネットゲートウェイの名前を値とした「Name」キーのタグが追加されています。
必要に応じてその他のタグを追加し、[インターネットゲートウェイを作成]をクリックします。
![スクリーンショット 2021-05-22 12.24.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/b677d7c2-9b9c-44b9-d0e7-571f04bc61ec.png)

インターネットゲートウェイが作成されます。
続けてVPCへのアタッチを実施するので、画面上部バーの[VPCへアタッチ]をクリックします。
![スクリーンショット 2021-05-22 12.25.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/3f4ae503-0ef4-f9c4-806d-8917c728b503.png)

"使用可能な VPC"で先ほど作成したVPCを選択し、[インターネットゲートウェイのアタッチ]をクリックします。
![スクリーンショット 2021-05-22 12.25.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/4b0580ae-5c82-6df3-5e93-77feba7f9665.png)

インターネットゲートウェイのアタッチが完了しました。
これでVPCとインターネットゲートウェイの紐付けが完了した状態となりますが、インターネットに接続するためにはサブネットに関連付いたルートテーブルにインターネットゲートウェイへのルートを追加する必要があります。
![スクリーンショット 2021-05-22 12.26.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/db39a259-bf7e-14fa-912a-259ff4c53a3f.png)

#####インターネットゲートウェイへのルートを追加

サブネット一覧画面から作成したサブネットを選択し、画面下ペインの[ルートテーブル]タブをクリックします。
その後、表示されたルートテーブルのIDをクリックします。
![スクリーンショット 2021-05-22 12.28.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/9ec34b0e-f8cb-7437-ea0b-8646a62763e9.png)

クリックしたルートテーブルが選択されている状態のルートテーブル一覧画面が表示されます。
画面下ペインで[ルート]タブをクリック後、[ルートを編集]をクリックします。
![スクリーンショット 2021-05-22 12.29.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/088683b5-dcc2-0a65-29f0-81621f3d3c0b.png)

ルート編集画面が開きます。
インターネットゲートウェイへのルートが追加されていない状態なので、追加していきます。
[Add route]をクリックします。
![スクリーンショット 2021-05-22 12.29.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/8c2f4c40-5663-eea0-5c2d-3da05e10be88.png)

新規追加された枠で"Destination"に「0.0.0.0/0」と入力し、"Target"で「Internet Gateway」を選択します。
![スクリーンショット 2021-05-22 12.30.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/970e9d40-3b91-01c6-db5a-8e8ae2f19f4f.png)

自動的に"Target"に「igw-」と入力されるので、選択肢の中から先ほど作成したインターネットゲートウェイを選択し、[変更を保存]をクリックします。
![スクリーンショット 2021-05-22 12.31.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/8dcc04bf-eb21-388e-85b0-d663e0238023.png)

インターネットゲートウェイへのルートが追加されます。
これでパブリックサブネットとして構成され、インターネットへの接続ができる状態となりました。
![スクリーンショット 2021-05-22 12.32.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/f077a513-7346-3cb7-e55c-24727591451b.png)

#####現状の構成図

現状の構成図は以下の通りです。
![diagram02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/622f9741-9d4a-c6b7-0ec8-929bf3e78769.png)

続いてプライベートサブネットを作成していきます。

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

#####プライベートサブネットとは

* インターネットゲートウェイにルーティングされていないサブネット
* インターネットからプライベートサブネットにアクセスすることはできない
* プライベートサブネットからインターネットにアクセスするにはNATゲートウェイを構成する必要がある(NATゲートウェイについては後述する)
* VPCに紐づけて作成し、VPCのCIDR範囲内でサブネットのCIDRを指定
* サブネットの作成には料金は発生しない

#####サブネットを作成

「パブリックサブネット作成」のサブネット作成手順を参照します。
今回はパブリックサブネットと同じアベイラビリティーゾーン(AZ)にプライベートサブネットを作成します。

#####現状の構成図

現状の構成図は以下の通りです。
![diagram03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/0f441fc8-abe5-4c0b-9cb9-1269e017f90b.png)

EC2インスタンスを作成し、まずはパブリックサブネットに配置していきます。

#EC2インスタンス 作成

#####EC2(Amazon Elastic Compute Cloud)とは

* AWSが提供するIaaSサービスで、数分で構築可能な仮想インスタンス
* 作成や削除、スペック変更などを時間をかけずに柔軟に対応することが可能
* スペック(インスタンスタイプ)や購入オプションによって課金額が異なる

#####EC2インスタンスを作成
画面上部の[サービス]を展開し、"コンピューティング"内の[EC2]をクリックします。
![スクリーンショット 2021-06-12 13.37.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/787f0548-54b1-f9c8-2756-1c0b8ca72601.png)

EC2 ダッシュボードが開きます。
画面左メニューで[インスタンス]をクリックします。
![スクリーンショット 2021-06-12 13.38.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/4306a029-a984-cfd6-3d44-76450e115714.png)

画面右ペインにEC2インスタンスの一覧が表示されます。
[インスタンスを起動]をクリックします。
![スクリーンショット 2021-06-12 13.39.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/02b68377-c8dd-1ef2-ec69-66808c44cc47.png)

EC2インスタンス作成ウィザードが開きます。
EC2を作成する際にはインストールするOSやアプリケーションが構成されたイメージ(AMI)を選択します。
使用したいAMIイメージの右側の[選択]をクリックします。
![スクリーンショット 2021-06-12 13.40.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/253ff466-ac7b-d070-6722-9398520842f4.png)

次にインスタンスタイプを選択します。
選択するインスタンスタイプによってEC2インスタンスのCPUやメモリなどのスペックが変わります。
使用したいインスタンスタイプを選択し、[次のステップ: インスタンスタイプの詳細の設定]をクリックします。
![スクリーンショット 2021-06-12 13.40.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/2c24ed8d-33bb-5901-4a07-493c12d63e8a.png)

次にインスタンスの詳細設定を行います。
インスタンスについての細かい設定をすることが可能ですが、今回は最低限のネットワーク設定のみ変更していきます。
"ネットワーク"でインスタンスを配置するVPC、"サブネット"でインスタンスを配置するサブネットを選択します。
![スクリーンショット 2021-06-12 13.43.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/1635a23b-1256-172c-7c5f-faf18d1cf268.png)

まずはパブリックサブネットに配置するインスタンスを作成するため、"自動割り当てパブリックIP"で[有効]を選択し、[次のステップ: ストレージの追加]をクリックします。
![スクリーンショット 2021-06-12 14.23.37_002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/3768f948-e419-0e5c-daf7-5dedde28817f.png)

次にストレージの追加画面が表示されます。
今回は特にストレージ追加は実施しないので、[次のステップ: タグの追加]をクリックします。
![スクリーンショット 2021-06-12 13.43.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/c972bdef-ed2f-26f0-3e20-0b5fc6eed086.png)

次にタグの追加を行います。
必須ではありませんが、今回は管理しやすくするためにNameタグを付けます。
[タグの追加]をクリックします。
![スクリーンショット 2021-06-12 13.44.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/aef13254-8b40-1c67-8a5d-ee41d415e920.png)

"キー"に「Name」、"値"にインスタンスの名前を入力し、[次のステップ: セキュリティグループの設定]をクリックします。
![スクリーンショット 2021-06-12 13.45.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/1c93f5bf-f9dc-05cf-0615-8300d0b0c820.png)

次にセキュリティグループの設定を行います。
セキュリティグループとはインスタンスへのトラフィックのアクセス可否を制御するファイアウォール機能を提供するもので、インスタンス単位で適用することが可能です。
今回はハンズオンのため、新しいセキュリティグループを作成し、インターネット経由でSSHで接続できるような設定とします。
[新しいセキュリティグループを作成する]を選択します。
![スクリーンショット 2021-06-25 12.00.44_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/d5d6496e-560b-da22-1536-e02e5d1a306b.png)

必要に応じて"セキュリティグループ名"にセキュリティグループの名前を入力します。
今回は自動で設定された名前を使用します。
また、インターネット(0.0.0.0/0)からのSSHを許可するルールが自動的に追加されており、そのままだとどこからでもSSH接続できるようになっています。
セキュリティ的によろしくないので、"ソース"で「マイ IP」を選択します。
「マイ IP」を選択すると、現在使用している端末がインターネットに接続する際に使用しているグローバルIPアドレスが自動的に入力されます。
※画像ではIPアドレスを塗りつぶしています。
※使用するグローバルIPアドレスが異なるネットワーク環境からのSSH接続はできません。

[確認と作成]をクリックします。
![スクリーンショット 2021-06-25 12.01.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/07a68044-1134-eea3-1e62-1144ebf02db3.png)

今まで設定した内容の確認画面となります。
設定内容を確認し問題なければ[起動]をクリックします。
![スクリーンショット 2021-06-25 12.02.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/d4d3bb10-337a-701f-1cc8-b946c3e19ee9.png)

インスタンスに接続するために必要となるキーペアの作成ウィンドウが表示されます。
キーペアはAWSが保存する「パブリックキー」とユーザーが保存する「プライベートキー」で構成されるものです。
後ほどSSHでインスタンスに接続する際に必要になりますので、新しく作成していきます。
[新しいキーペアの作成]を選択し、<キーペア名>にキーペアの名前を入力します。
![スクリーンショット 2021-06-12 13.47.24_002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/2ae33c6d-7b0e-4740-750f-1c9848542d57.png)

[キーペアのダウンロード]をクリックし、プライベートキーファイルをダウンロードします。
![スクリーンショット 2021-06-12 13.47.24_003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/c1cf73d9-5034-7799-091e-902aed64884c.png)

ダウンロードが完了したら、[インスタンスの作成]をクリックします。
※[インスタンスの作成]をクリックするとインスタンス作成が開始し、インスタンスが起動するため、課金が発生します。
![スクリーンショット 2021-06-12 13.48.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/dfc15ccd-0359-abc1-9158-4ef2d832fd14.png)

作成ステータス画面となります。
[インスタンスの表示]をクリックします。
![スクリーンショット 2021-06-12 13.48.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/6c2e1ba8-5d1e-4edd-7907-7fad2ac401ef.png)

インスタンス一覧画面が表示されます。
インスタンスが作成されていることを確認します。
![スクリーンショット 2021-06-12 13.49.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/e09f1eba-59a3-20d3-9b2c-6ab86f8a67df.png)

#####現状の構成図

現状の構成図は以下の通りです。
![diagram04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/7fac2311-42f8-ac49-4371-0cbb120711fe.png)

作成が確認できたら、作成したインスタンスにSSH接続してみます。

#SSH接続
インスタンスにSSH接続をしていきますが、ここではターミナルを使用します。
※SSH接続に使用するのはTera Term等のアプリケーションでも可能です。

まずはインスタンスに割り振られているパブリックIPアドレスをManagement Consoleから確認します。
インスタンス一覧画面でインスタンスを選択し、画面下部で[詳細]タブをクリックし、"パブリック IPv4 アドレス"の値を確認します。
IPアドレスの左のアイコンをクリックすることで、コピーすることも可能です。
![スクリーンショット 2021-06-19 12.59.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/2d5c1ae6-c293-0c56-534f-8c9021ce9d07.png)

ターミナルを開き、SSH接続をしていきます。
キーペア作成時にダウンロードしておいたプライベートキーファイルが必要になりますので、配置したパスを確認しておきます。
また、インスタンスにデフォルトで作成されるユーザーは「ec2-user」となりますので、SSH接続する際に使用するユーザーとして指定します。

```terminal:terminal(PC)
$ cd <プライベートキーファイルを配置したパス>
$ ssh -i <プライベートキーファイル名> ec2-user@<インスタンスのパブリックIPアドレス>
```

実行すると以下のような接続確認をされるので、「yes」と入力し、Enterを入力します。

```terminal:terminal(PC)
The authenticity of host '52.195.6.222 (52.195.6.222)' can't be established.
ECDSA key fingerprint is SHA256:4aV6w2T24e47JztHAm6VhAnwvoQzMXm1y+DjOvXDUnE.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
```

プライベートキーへのパーミッションが緩すぎると以下のような警告が表示され、インスタンスへのSSH接続に失敗します。

```terminal:terminal(PC)
Warning: Permanently added '52.195.6.222' (ECDSA) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'ec2-test.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "ec2-test.pem": bad permissions
ec2-user@52.195.6.222: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
```

今回の場合は「Permissions 0644 for 'ec2-test.pem' are too open.」とあるように、プライベートキーファイル[ec2-test.pem]に対して、パーミッションが「644」では緩すぎるということになります。
ここではパーミッションを「400」に変更し、再度SSH接続をしてみます。

```terminal:terminal(PC)
$ chmod 400 <プライベートキーファイル名>
$ ssh -i <プライベートキーファイル名> ec2-user@<インスタンスのパブリックIPアドレス>

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-0-1-126 ~]$ 
```

インスタンスにSSH接続することができました。
次にインターネット接続ができることを確認していきます。

#インターネット接続確認
www.google.co.jp に対して ping で疎通確認をし、インターネット接続を確認します。
インスタンス上で以下のコマンドを実行します。

```terminal:terminal(PublicEC2)
[ec2-user@ip-10-0-1-126 ~]$ ping www.google.co.jp -c 3
PING www.google.co.jp (172.217.175.227) 56(84) bytes of data.
64 bytes from nrt12s29-in-f3.1e100.net (172.217.175.227): icmp_seq=1 ttl=105 time=3.83 ms
64 bytes from nrt12s29-in-f3.1e100.net (172.217.175.227): icmp_seq=2 ttl=105 time=3.86 ms
64 bytes from nrt12s29-in-f3.1e100.net (172.217.175.227): icmp_seq=3 ttl=105 time=3.79 ms

--- www.google.co.jp ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 3.795/3.830/3.860/0.026 ms
```

疎通が取れ、インターネットに接続できていることを確認できました。

#NATゲートウェイ作成

#####NATゲートウェイとは

* プライベートサブネットからインターネットへのアクセスを可能にするコンポーネント
* NATゲートウェイ自体はパブリックサブネットに配置する
* NATゲートウェイは時間単位、処理データ1GB単位で料金が発生する
    * 1時間あたりの料金：0.045USD (約4.95円)
    * 処理データ1GBあたりの料金：0.045USD (約4.95円)

※1USD = 110円で計算

#####プライベートサブネットにEC2インスタンスを作成

「EC2インスタンス 作成」のインスタンス作成手順を参照します。
以下の設定を確認しながら、プライベートサブネットにインスタンスを作成します。

* サブネット：プライベートサブネットに配置
* 自動割り当てパブリックIP：無効
* セキュリティグループ：パブリックサブネットからのSSH接続を許可するように新規作成
* キーペア：パブリックインスタンスを同じものを使用

#####プライベートインスタンスのIPアドレスを確認

プライベートインスタンスに割り振られているプライベートIPアドレスをManagement Consoleから確認します。
インスタンス一覧画面でプライベートインスタンスを選択し、画面下部で[詳細]タブをクリックし、"プライベート IPv4 アドレス"の値を確認します。
IPアドレスの左のアイコンをクリックすることで、コピーすることも可能です。
![スクリーンショット 2021-06-19 14.49.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/ac1e9d3f-b78d-6543-1533-65462e0b0ac1.png)

#####パブリックインスタンスにプライベートキーファイルを転送

プライベートインスタンスにSSH接続していきます。
パブリックIPアドレスを持っていないため、パブリックインスタンスを踏み台としてSSH接続をする必要があります。

SSH接続をするためにパブリックインスタンスにプライベートキーファイルを転送します。
ここでは「/tmp」にプライベートキーファイルを転送します。

```terminal:terminal(PC)
$ cd <プライベートキーファイルを配置したパス>
$ scp -i <プライベートキーファイル名> <転送するファイル名> ec2-user@<パブリックインスタンスのパブリックIPアドレス>:/tmp/
```

パブリックインスタンスにSSH接続し、/tmp にプライベートアクセスキーが配置されていることを確認します。

```terminal:terminal(PublicEC2)
[ec2-user@ip-10-0-1-126 ~]$ ls /tmp
ec2-test.pem  systemd-private-4e90d1f46c0d400cbabd5392018c68f4-chronyd.service-w4Hijj
```

#####プライベートインスタンスにSSH接続

パブリックインスタンスからプライベートインスタンスにSSH接続をします。
※同じVPC内のサブネット間の通信はデフォルトのルート設定によって許可されています。

```terminal:terminal(PublicEC2)
[ec2-user@ip-10-0-1-126 ~]$ cd /tmp
[ec2-user@ip-10-0-1-126 tmp]$ ssh -i <プライベートキーファイル名> ec2-user@10.0.2.42
The authenticity of host '10.0.2.42 (10.0.2.42)' can't be established.
ECDSA key fingerprint is SHA256:jBtwGNVNXKDEfX/TqiyLUINu10Qq5gc8BLQR+ukt/Xk.
ECDSA key fingerprint is MD5:c3:bf:85:9f:96:3f:c8:ca:5b:cd:84:0f:65:cd:70:1e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.2.42' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-0-2-42 ~]$ 
```

#####インターネット接続を確認
www.google.co.jp に対して ping で疎通確認をし、インターネット接続を確認します。

```terminal:terminal(PrivateEC2)
[ec2-user@ip-10-0-2-42 ~]$ ping www.google.co.jp -c 3
PING www.google.co.jp (172.217.25.99) 56(84) bytes of data.

--- www.google.co.jp ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2040ms
```

現時点でプライベートインスタンスからインターネットにアクセスすることはできません。
NATゲートウェイを作成し、インターネットにアクセスできるようにしていきます。

#####NATゲートウェイを作成

NATゲートウェイを作成していきます。
VPC画面の左メニューで[NAT ゲートウェイ]をクリックします。
![スクリーンショット 2021-06-20 19.52.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/d74fe46f-a560-919e-2b8f-824e5e8aefe3.png)

画面右ペインにNATゲートウェイの一覧が表示されます。
[NAT ゲートウェイを作成]をクリックします。
![スクリーンショット 2021-06-20 19.52.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/583e3c6b-1771-a140-3e24-3f2f314126b2.png)

NATゲートウェイ作成ウィザードが開きます。
"名前"にNATゲートウェイの名前を入力します。
![スクリーンショット 2021-06-20 19.54.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/c37375e9-27d7-72f5-4947-8011f24ce70a.png)

"サブネット"でNATゲートウェイを配置するパブリックサブネットを選択します。
![スクリーンショット 2021-06-20 19.55.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/2d4a544e-6176-0ac3-ecbb-ce86cbda8093.png)

"Connectivity type"はデフォルト値のまま「Public」とします。

"Elastic IP 割り当て ID"で使用するElastic IP アドレスを選択します。
Elastic IP アドレスとは固定で使用できるパブリックIPアドレスです。
事前に作成することも可能ですが、ここでは[Elastic IP の割り当て]をクリックし、自動で作成・割り当てをします。
※Elastic IP アドレスを別途作成する場合はインスタンス等に割り当てしていない状態だと課金されます。
![スクリーンショット 2021-06-20 19.55.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/48ef2210-3c75-29f0-a644-24101bc93797.png)

"名前"に入力したNATゲートウェイの名前を値とした「Name」キーのタグが追加されています。
必要に応じてその他のタグを追加し、[NAT ゲートウェイを作成]をクリックします。
![スクリーンショット 2021-06-20 19.56.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/b5da19e5-37e7-f4af-8697-153d68744dc8.png)

NATゲートウェイが作成されます。
![スクリーンショット 2021-06-20 20.14.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/ade23d4d-b5a7-75b3-de2a-91852c3a50c5.png)

次にプライベートサブネットに関連付いたルートテーブルに対して、NATゲートウェイへのルートを設定します。

#####NATゲートウェイへのルート設定

サブネット一覧画面でプライベートサブネットを選択し、画面下部の[ルートテーブル]タブをクリックします。
パブリックサブネットと同じルートテーブルが関連付けられているため、インターネットゲートウェイへのルートが設定されています。
![スクリーンショット 2021-06-20 20.26.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/26b63736-e520-5459-b17b-740e37bc8549.png)

プライベートサブネット用にルートテーブルを別途作成し、関連付けます。
画面左メニューで[ルートテーブル]をクリックします。
![スクリーンショット 2021-06-20 20.26.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/84be037d-a99e-1379-ee45-6983e8f1a194.png)

画面右ペインでルートテーブル一覧画面が表示されます。
[ルートテーブルを作成]をクリックします。
![スクリーンショット 2021-06-20 20.27.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/f5e6f6dc-fc21-e650-6e02-f4c65d716e9b.png)

"名前"にルートテーブルの名前を入力します。
![スクリーンショット 2021-06-20 20.27.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/44301efc-24fd-9864-8bb7-69135864f69d.png)

"VPC"でルートテーブルを関連付けるプライベートサブネットが所属するVPCを選択します。
![スクリーンショット 2021-06-20 20.27.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/ae1e3e9a-bb77-6452-1d28-fad0493b8dd4.png)

"名前"に入力したルートテーブルの名前を値とした「Name」キーのタグが追加されています。
必要に応じてその他のタグを追加し、[ルートテーブルを作成]をクリックします。
![スクリーンショット 2021-06-20 20.27.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/650e6b7c-2d7b-257d-18c5-654cfbea3655.png)

ルートテーブルが作成されます。
[ルートを編集]をクリックします。
![スクリーンショット 2021-06-20 20.28.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/b5a75b61-de21-d51f-960c-32b322033f66.png)

デフォルトでVPC内通信のためのルートのみが設定されているので、NATゲートウェイへのルートを追加します。
[Add route]をクリックします。
![スクリーンショット 2021-06-20 20.34.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/0e2e2bdd-fef9-29e9-4c7d-a4c72887a232.png)

新規追加された枠で"Destination"に「0.0.0.0/0」と入力し、"Target"で「NAT Gateway」を選択します。
![スクリーンショット 2021-06-20 20.35.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/e282cbbe-af43-dfe2-fbbe-f1fe0acfa119.png)

自動的に"Target"に「nat-」と入力されるので、選択肢の中から先ほど作成したNATゲートウェイを選択し、[変更を保存]をクリックします。
![スクリーンショット 2021-06-20 20.35.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/96fac73a-beb5-e1a7-91b3-ba7201538a32.png)

NATゲートウェイへのルートが追加されます。
次にこのサブネットをプライベートサブネットに関連付けていきます。
![スクリーンショット 2021-06-20 20.36.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/daef88d1-0fb5-0206-b684-e6a13c3972da.png)

サブネット一覧画面でプライベートサブネットを選択し、[アクション]-[ルートテーブルの関連付けを編集]をクリックします。
![スクリーンショット 2021-06-20 20.38.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/2ca2da9c-9c2f-44bf-91dd-7a0169ecabf0.png)

ルートテーブルの関連付け編集画面が表示されます。
"ルートテーブル ID"で先ほど作成したルートテーブルを選択し、[保存]をクリックします。
![スクリーンショット 2021-06-20 20.39.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/650f1dd9-1a80-a358-c3bb-caad1af51eb5.png)

プライベートサブネットに関連付けられたルートテーブルが変更されます。
これでプライベートサブネットからNATゲートウェイへのルートが設定されている状態になります。
![スクリーンショット 2021-06-20 20.40.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/515e8a12-18ce-ad49-487a-23f7faa13e5a.png)

プライベートインスタンスからインターネットアクセスの確認を行います。

#####再度インターネット接続を確認

プライベートインスタンスにSSH接続し、www.google.co.jp に対して ping で疎通確認をしてみます。

```terminal:terminal(PrivateEC2)
[ec2-user@ip-10-0-2-42 ~]$ ping www.google.co.jp -c 3
PING www.google.co.jp (172.217.161.35) 56(84) bytes of data.
64 bytes from nrt12s23-in-f3.1e100.net (172.217.161.35): icmp_seq=1 ttl=103 time=3.06 ms
64 bytes from nrt12s23-in-f3.1e100.net (172.217.161.35): icmp_seq=2 ttl=103 time=2.86 ms
64 bytes from nrt12s23-in-f3.1e100.net (172.217.161.35): icmp_seq=3 ttl=103 time=2.83 ms

--- www.google.co.jp ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 2.836/2.921/3.061/0.108 ms
```

プライベートインスタンスがインターネットにアクセスできるようになりました。

#####構成図

最終的な構成図は以下の通りとなります。
インスタンスがインターネットにアクセスする際の経路も記載します。
![diagram05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1410257/ffab46b6-f793-ebb7-e111-2fce6f188208.png)

#あとがき
この記事は CloudTech の課題として作成しました。
動画やハンズオン等で学習を進めることができるので、AWS初学者にはおすすめです。

https://kws-cloud-tech.com/