AWS基礎から学習①-EC2の環境構築-

今回、AWSの基礎を学び直す目的でEC2の環境構築と接続まで行ったので、その過程と自分なりに気になったポイントを書いていこうと思います。
自分用の備忘録として残していますが、これからAWSの基礎学習を始める方の参考になればと思います。
今回は踏み台用EC2を使って作業用EC2にログインするところまで。

#環境
・MacOS
※macOsとwindowsでは操作方法が異なる部分があるので、ご注意してください。
・AWSサービス(2021/1/22時点)
※各種設定画面は都度アップデートされていますので画像と異なる場合があります。

#目次
[1.VPCの作成](#1VPCの作成)
[2.サブネットの作成](#2サブネットの作成)
[3.インターネットゲートウェイの作成とアタッチ](#3インターネットゲートウェイの作成とアタッチ)
[4.サブネットのルートテーブルの設定](#4サブネットのルートテーブルの設定)
[5.EC2踏み台サーバーの作成](#5踏み台サーバーの作成)
[6.EC2踏み台サーバーに接続](#6踏み台サーバーに接続)
[7.EC2作業サーバーの作成](#7作業サーバーの作成)
[8.EC2作業サーバーの作成](#8作業サーバーに接続)
[9.構成図の拡張](#9構成図の拡張)
[10.まとめ](#10まとめ)

#目標構成図
![aws-test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/5fd08d91-3cea-0ad4-a54e-84380e950c8c.png)

#構成図の概要
今回作成する構成図は踏み台サーバーを使って作業サーバーにログインする構成となっています。この構成のポイントは作業サーバーにアクセスするためには<b>必ず踏み台サーバーを経由</b>しなければならない点です。このサーバーがあると誰がどの作業サーバーにアクセスしたかを監視することができるため、セキュリティを高めることが出来ます。


#1.VPCの作成
まずEC2を起動する場所を確保するため、VPCから作成していきます。
![VPC1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/1036630a-6cd9-0fc3-c5f5-5752339369be.png)
各種設定を行います。
![VPC2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/6d8f432c-7d46-517f-55ee-383befe7a033.png)
名前タグ：作成するVPCに任意の名前を与えます。
例→　test-vpc

IPv4 CIDR ブロック：こちらはAWSが指定する○.○.○.○/16〜○.○.○.○/28のプライベートIPアドレスの範囲で設定します。

■プライベートIPアドレス(○.○.○.○)
・10.0.0.0 - 10.255.255.255 (10.0.0.0/8)
・172.16.0.0 - 172.31.255.255 (172.16.0.0/12)
・192.168.0.0 - 192.168.255.255 (192.168.0.0/16)

※プライベートアドレスを使う理由としてはIPアドレスが競合することを防ぐためです。AWSでもプライベートアドレスを使うことが推奨されているのでこちらに従っていきましょう。

またCIDRについての内容を書いてしまうと長くなってしますので、割愛させていただきますが、AWS内のネットワークから自分が使うVPCのネットワークの範囲を借りるようなイメージです。
![CIDRイメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/d0b8be5b-f3fd-e7f1-9ec1-20497c51529c.png)
以下の記事でわかりやすく解説されているので合わせて確認してみてください。
>https://wa3.i-3-i.info/word11989.html
>引用：「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

#2.サブネットの作成
次にサブネットの作成を行います。
![サブネット１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/306f465c-07f5-773e-c30a-82ff7be9fa14.png)
先程作成したVPCを選択し、「パブリックサブネット」、「プライベートサブネット」の2つのサブネットの各種設定を行います。

・パブリックサブネット…直接インターネット接続可能なサブネット
・プライベートサブネット…直接インターネット接続不可なサブネット

1つ目のパブリックサブネット
![サブネット２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/946332ea-c457-1347-00b9-304c17ca4107.png)
2つ目のサブネット
![サブネット３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/5bd1e091-7d57-1c52-d478-c4e3db075100.png)
サブネット名：任意の名前を設定します
例→　test-public-subnet
アベイラビリティーゾーン(AZ)：アジアパシフィック(東京)/ap-northeast-1aを選択します。

<b>追記：</b>パブリックサブネット、プライベートサブネットの両方を
ap-northeast-1aとしていますが、片方を別AZに設定すると安全性を高められるので安全性を高めたい場合は別AZに設定しましょう。
(こちらご指摘頂きましたので追記致しました。ご指摘頂きありがとうございます。)

IPv4 CIDR ブロック：VPCで指定した範囲内で更に範囲を設定していきます。
サブネットはパブリックとプライベートが判断できる名前としておきましょう。

#3.インターネットゲートウェイの作成とアタッチ
次にサブネットがインターネットに接続できるようするためにインターネットゲートウェイを作成します。
![インターネットゲートウェイ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/cafa4d07-8ebb-278b-73f0-234a9020f6a2.png)
名前タグ：インターネットゲートウェイの名前を設定します。
例→ test-internetgateway

![インターネットゲートウェイ２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/2070c139-b2b4-2611-b87d-3355458546cc.png)
作成後、作成したVPCにインターネットゲートゲートウェイをアタッチ(VPCにインターネットに接続するため入り口を用意)するためにアクションからVPCにアタッチを選択。
![インターネットゲートウェイ３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/4d43c438-41da-9837-3a2b-437c8584da69.png)
作成したVPCを指定し、インターネットゲートウェイにアタッチをクリックする。

![インターネットゲートウェイ４.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/3cd951cf-0a1c-4858-740d-2df94301635d.png)
アタッチ後、状態を確認しアタッチされたことを確認します。

#4.サブネットのルートテーブルの設定
VPCにインターネットゲートウェイをアタッチしてもサブネットはインターネットには接続できませんのでルートテーブルでサブネットがインターネットに接続できるように設定します。
(※自分の経験談ですが、ここを設定し忘れてEC2と接続出来ない！ということが多々あるので忘れないようにしましょう。)
![ルートテーブル１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/858e90b7-e039-62b6-6cd5-8f86209edf6a.png)
パブリックサブネットのルートテーブルタブをクリックし、上記赤枠で囲まれたルートテーブルクリックし、設定画面に移ります。
![ルートテーブル２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/cca6fe09-ec00-8f53-2f31-4fcc48e23cfd.png)
上記ルートタブのルートの編集をクリック。
![ルートテーブル３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/f86e9d09-245d-7fea-fa40-af6867b25b71.png)
送信先：0.0.0.0/0(インターネット)
ターゲット：作成したインターネットゲートウェイを指定
ルートの保存をします。
![ルートテーブル４.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/4bba8ff1-3a92-2be7-a749-7e1a879957a3.png)
ルートテーブルにインターネットゲートウェイが設定されたことを確認。
これでパブリックサブネットがインターネットと接続可能になります。

ここで注意したいのは、先ほど編集したルートテーブルがプライベートサブネットにも適用されてしまう点です。これは各サブネットを明示的に関連付けを行わなかったためです。
そこで
①パブリックサブネット用のルートテーブルの追加
②各ルートテーブルをサブネットの関連付け
を行います。
###①プライベートサブネット用のルートテーブルの追加
![ルートテーブル５.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/1cc4db8f-d7f9-8664-f1db-5a908a3f8bbc.png)
まずはVPCメニューのルートテーブルをクリックし、下記画面のルートテーブルを作成をクリックします。
![ルートテーブル６.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/f2a093c2-faa9-43d2-c088-288ae9de50dc.png)
名前タグ：任意の名前を設定
VPC：作成したVPCを選択
２つの値を設定し、作成ボタンで作成します。
![ルートテーブル７.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/2e4b36a6-36b7-59f7-3f03-13d9263cb378.png)
作成後、最初に作成されたルートテーブル(※パブリックサブネット用)Nameが設定されていないので区別しやすいように設定します。
###②各ルートテーブルをサブネットの関連付け
![ルートテーブル８.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/60f5f95b-26d8-e479-7b21-43be25393c2e.png)
ルートテーブルを作成後、それぞれをサブネットの関連付けを行います。
・パブリックサブネットのルートテーブル
![ルートテーブル９.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/5ff7aa35-75a6-fc10-7832-2f5859f9324c.png)
・プライベートサブネットのルートテーブル
![ルートテーブル１０.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/81ed473f-b5af-cf32-1599-10d4137788bc.png)
それぞれ選択後保存ボタンで設定を保存します。
これでプライベートサブネットのルートテーブルからインターネットへの接続設定がなくなっているかと思います。
![ルートテーブル１１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/a7650503-009f-9560-acaa-251f504a372a.png)

###現時点の構成図
![aws-test_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/67750977-e2d4-9238-2e1e-725176520b85.png)

#5.踏み台サーバーの作成
次は本命のEC2インスタンスを作成を行います。
![EC2_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/6559701e-307a-fcdd-d705-0a7ce4f359d1.png)
AWSのEC2サービス画面からインスタンスの起動ボタンをクリック。
![EC2_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/6469ac71-cc52-dacc-db65-8a69515ed5e7.png)
AMIを選択していきますが、ここではさまざまなOSを選択することが出来ます。
今回は標準のAmazonLinux2を選択します。
![EC2_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/4a10a5f4-e066-e13d-2b1f-f6d5e1a0aa89.png)
次にインスタンスタイプを選択します。
インスタンスタイプは簡単に言うとEC2の性能を選択する画面になります。
今回は無料枠のt2.micro選択します。
その他を選択すると課金対象となってしまうので気をつけてください。
各パラメータの名称は以下の通り

・「t2」部分…インスタンスファミリー
→「t」が各用途に応じて変更する。(機械学習用など)
→「2」世代を表す。値が大きいほど性能の高いものになります。

・「micro」部分…インスタンスサイズ
→EC2のメモリ、vCPUの数を表しており、EC2の性能を表している。
![EC2_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/9ffc7235-7448-116d-ccbd-a674c304ab3f.png)
ネットワーク：作成したVPCを選択
サブネット：パブリックサブネットを選択
自動割り当てパブリックIP：有効

![EC2_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/a6a8bbfa-2b4a-7664-b293-6d40b752c02c.png)
![EC2_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/c46c3090-b408-d7cf-cbf1-e3ef919e4752.png)

その他のパラメータはデフォルトのままとしステップを進めていきます。
![EC2_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/30a0baaa-afbf-b579-4750-4eeffc3fd0bd.png)
ステップ6でセキュリティグループを作成します。
・セキュリティグループ名：任意の名前を設定する。例：test-securitygroup
・タイプ：SSH
・プロトコル：TCP
・ポート範囲：22
・ソース：カスタム、0.0.0.0/0
※今回はどのIPアドレスからでもSSHでアクセスできますが、警告メッセージが推奨するようにアクセスできるIPアドレスを設定するのがおすすめです。例えば自分のPCのみから接続させたい場合はPCのIPアドレスを設定しておきます。
セキュリティグループ作成後、起動ボタンをクリック。
![EC2_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/df915734-3846-f5c6-cc64-558724803540.png)
セキュリティグループでタイプSSHを選択しているためキーペアを作成します。キーペア名を設定しキーペアを任意の場所にダウンロードします。
※キーペアを紛失した場合、再度キーペアの作成と別手順を実施する必要が出てきますので注意してください。
下記参照urlにキーペアを紛失した場合の手順が書かれているので確認してみてください。
>https://aws.amazon.com/jp/premiumsupport/knowledge-center/user-data-replace-key-pair-ec2/
AWSより引用

キーペアダウンロード後、インスタンスを作成します。
![EC2_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/330c5081-05aa-d36b-b635-ac7ebf037583.png)
インスタンスが起動するまで少しかかるのでその間に次のElasticIPの設定を行います。
###ElasticIPの設定
EC2は何も設定をしていないと停止して再起動するとIPアドレスが変更されてしまい、何かと不便になるのでIPアドレスを固定します。
(例：アクセスを制限したいときなど)

EC2メニューのネットワーク&セキュリティ>Elastic IPをクリックします。
![ElastickIP2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/4419a6d9-a3c9-3192-8eb6-40b175928b22.png)
ElasticIPアドレスの割り当てを行います。
![ElastickIP3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/5b99db55-ebe9-8ee9-2d32-60c6f9f24645.png)
ネットワークボーダーグループ：デフォルトの「ap-northeast-1」を設定
おそらく東京リージョンはこの設定になる。
パブリックIPv4アドレスプール：AmazonのIPv4アドレスプールを選択
その他の設定はオンプレミス用途で使われるので一般の人はおそらくあまり使用しないと思います。

![ElastickIP4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/1d27615d-def5-047f-1e73-11c1f14f5305.png)
ElasticIP割り当て後、
アクション>ElasticIPアドレスの関連付けを選択。
![ElastickIP5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/1c09922f-6700-6a51-8d02-1c1c3a628197.png)
インスタンス：起動したEC2を選択。
他はそのままで関連付ける。
ElasticIPアドレスの設定は以上です。

#6.踏み台サーバーに接続
ここで一旦踏み台サーバーに接続できるか確認します。
MacのLaunchpadから
Launchpad>その他>ターミナル　の順でターミナルを開きます。

###キーペアの権限設定
ここで先程ダウンロードしたキーペアのあるフォルダまで移動します。
![キーペア.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/56b0421f-1ea1-0686-abc0-44e725aa8f17.png)
(※すみません、Linuxコマンドについては割愛させていただきます。)
このままEC2に接続をするとキーペアファイルの権限の弱さが原因で接続できないので権限の設定を行います。
ちなみに接続しようとすると下記のように警告されます。
![スクリーンショット 2021-01-23 21.50.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/2b4ef663-9a52-7bbb-cde0-b89f28eea5d7.png)
下記のコマンドでキーペアの権限を変更します。
chmod 400 test-keypair.pem
![キーペア３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/815857a9-0cd1-1fd5-805f-e68bab8a0b57.png)
-rw-r--r--　→　-r-------
に変更しました。
この変更で具体的に
・所有者権限：読み込み、書き込み可→読み込み可
・グループ権限：読み込み可→権限なし
・その他：読み込み可→権限なし
と権限が厳しく設定されました。これでEC2へ接続可能となります。
![接続後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/0ed7f1b0-29d1-23ab-eebb-447c98f4b60e.png)
コマンドで設定したElasticIPアドレスのEC2に接続します。
![EC2_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/ec3411e5-5863-e6a7-ca9d-7ddb9ddeb36e.png)
パブリックIPv4アドレスまたはElasticIPアドレス(両方同じ)をコピーし、
EC2への接続コマンド：
ssh -i [キーペア] ec2-user@[ElasticIPアドレス]
で接続する。

※注意…上図の付与したElasticIPアドレスがタイムラグの関係でパブリックIPv4と同一となっていない場合があります。その場合は一度コンソール画面の更新後、再度確認を行ってください。

![接続後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/0ed7f1b0-29d1-23ab-eebb-447c98f4b60e.png)
上記のようにターミナルでec2-user@〇〇となっていたら接続成功です。
###現在の構成図
![aws-test4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/b1dc3ad9-5ba0-9b5f-0925-8298705173fe.png)


#7.作業サーバーの作成
踏み台サーバーへの接続が確認できた段階で、作業サーバーを作成していきます。
EC2の作成については一度行っているので相違点の部分だけピックアップします。
■サブネットの設定
![EC2_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/e7e1df6f-cb29-0ead-e7c2-e9ff1845016a.png)
・サブネット：作成したプライベートサブネットを指定します。
・自動割り当てパブリックIP：使用しないのでそのままとします。
※インターネットへ接続しないEC2のため今回は無効としています。
■セキュリティグループの設定
![EC2_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/b9a80c34-35b9-eb61-0379-c61cd2433a1b.png)

ここではSSH接続できるIPアドレスを踏み台サーバーのEC2のみに限定しています。○.○.○.○/32でアクセス可能にしたいIPアドレスを指定することが出来ます。
アクセス可能なIPアドレスを指定することでその他のアクセスを拒否しセキュリティを高めます。
※IPアドレスは同じVPC内からのアクセスのため作業サーバーのプライベートIPアドレスを指定します。
プライベートIPアドレスはEC2インスタンス設定画面の下記通りに確認。
![EC2_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/9066dccc-27e6-f9ff-2991-50e3d41eb8e1.png)


その他の設定はデフォルトです。
キーペアも同じものを使用します。(新しく作成しても構いません。)

#8.作業サーバーに接続
作業サーバーのEC2が起動出来たら、次に踏み台サーバーから作業サーバーに接続するためのキーペアをローカルのPCから踏み台サーバーに置きます。
再度ターミナルでキーペアのあるフォルダまで移動し、下記コマンドでキーペアを踏み台サーバーにコピーします。
![コマンド１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/aa7dfac2-4644-ef2e-15d0-5393069e0b76.png)
コマンド：
scp -i [キーペア] [キーペア] ec2-user@[ElasticIPアドレス]:/tmp/
これで踏み台サーバーからキーペアを使って作業サーバーにアクセス出来ます。
![コマンド２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/497e9deb-daa6-fafd-70b2-3c81f5f5e848.png)
そして先程と同じように踏み台サーバーにアクセスします。
ssh -i [キーペア] ec2-user@[ElasticIPアドレス]
![コマンド４.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/a3592ff2-b6d7-154d-3ee2-1457045b1a07.png)
そして今度は作業用サーバーから踏み台サーバーにアクセスします。
キーペアがある場所に移動：
cd /tmp/
作業サーバーへ接続：
ssh -i [キーペア] ec2-user@[作業サーバープライベートIPアドレス]

これで踏み台サーバーから作業サーバーへのアクセスが出来ました。
###最終的な構成図
![aws-test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/a49b6465-7bb5-85b9-b742-5b5052012ffc.png)

#9.構成図の拡張
①今回作成した作業サーバーは一つだけでしたが、複数台の作業サーバーを使う場合は下図のようになって一つの踏み台サーバーから各作業サーバーにログインできるように構成していきます。
あとは踏み台サーバーに監視用のソフトウェアをインストールすることで誰がどの作業サーバーにアクセスしたか確認できるようになると実際のシステム運用に近づいて面白そうですね。
![aws-test2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/65c7366c-95d0-e116-a344-47b6292c6556.png)

②作業サーバーはインターネットにアクセスできないようになっています。完全なオフラインでの作業サーバーの作成の業務場面は少ないと思います。作業サーバーにもインターネットに接続できる構成にする際は下記のようにNATゲートウェイを採用し、内部からインターネットに接続は可能として、外部からのアクセスは遮断する構成が一般的なので実運用に近づけるなら抑えておきたい構成の一つです。
![aws-test3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/4ff3b5af-ed20-1c1d-3c29-9f177076dc73.png)

#10.まとめ
以上が今回の踏み台サーバーと作業サーバーのEC2環境構築でした。
基本的な構成でしたが、自分としてはこの環境構築でVPC、EC2の基礎をかなり勉強できたなと感じています。
最初に試したときは、VPCのところでインターネット接続するためにサブネットのルートテーブルの設定を行いますが、あまり理解していない状態で設定したら案の定、インターネットに繋がらなかったりで大変でした。。

ですが改めて環境構築してみてAWSで簡単にインフラの環境構築が出来てしまうのはすごいと思いました。インフラの現場に実際には行ったことはありませんがこの作業は本来配線を一つ一つ確認して組むとかだと思うので、それをボタンと数値の入力でポチポチしてできてしまうのはなんて画期的なんだと。
インフラをやったことがない人でも気軽に扱えるというのは大変助かりますね。
実務ではかなり慎重にやらないといけないとは思いますが。。
これからの時代インフラとアプリを両方担当するのが主流となってきそうなので、大変ですが頑張って勉強してついていきたいですね。

以上です。

長くなりましたが、ここまで読んでいただきありがとうございました。
AWSを勉強する方の参考になれば幸いです。

#AWSの学習体験
当記事は動画学習サービスのAWSCloudTechの講座を参考に作成しました。
これからもっと普及するクラウドサービスの一角であるAWSを学びたい方におすすめです。

現在、無料講座を開放しているようなので気になった方はぜひ体験してみてください。
[<img width = 1500 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048766/5aa91bb4-0c66-9c25-0094-c0d86387c68a.jpeg">](https://aws-cloud-tech.com/?pa=AWSCLOUDTECH1A)