AWSで基本的なサーバー環境を構築してみました。

#はじめに
AWSを使用してEC2とRDSを構築し、EC2のSSH接続とRDSへの接続確認まで行ってみました。その手順の流れを備忘録として残します。
※AWSコンソール画面のスククショは、2020年1月4日時点のものとなります。
#構成図

![EC2:RDS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/5b4e6c6e-9577-5eab-741e-9d3b34181bdd.png)


#前提条件
AWSアカウント及びIAMユーザーは作成済みであること。
Mac環境であること。（WindowsだとSSHの接続確認の操作が異なります）

##VPCの作成
<img width="1437" alt="VPC作成①.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/b2ee6a02-178d-a88d-aad6-a051c6c82ef4.png">

CIDRブロックの数値は構成図で示している範囲とします。
<img width="1437" alt="VPC作成②.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/6454c099-e75c-c92c-1231-21fda7509bc7.png">

##サブネットの作成
外部接続用のパブリックサブネットを１つとデータベース用のプライベートサブネット２つを作成します。
###1.パブリックサブネット
<img width="1437" alt="サブネット作成①外部用.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/39a99f71-8ae0-5082-0bec-6c4b50712c1e.png">

CIDRブロックの数値はこちらも例で挙げられている範囲とします。
<img width="1437" alt="サブネット作成②外部用.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/2b061bf2-a0c2-d846-24d4-ec3a3d80c633.png">

EC2インスタンス作成時に自動的にパブリックIPアドレスが付与されるよう設定しておきます。
<img width="1437" alt="サブネット作成③外部用.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/ea8e37d0-b145-126a-77ba-5a1741e7c42e.png">

<img width="1437" alt="サブネット作成④外部用.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/fe73b224-b0c3-8b22-0b1a-1f82ae0d3610.png">

###2.プライベートサブネット（データベース用）
今回はシングルAZで構成します。ただし、RDSを利用するには、異るAZに属するサブネット2つを用意する必要があるので、DB用のサブネットを2つ作成し、この2つのサブネットは「1a」「1c」と異なったAZを指定します。
また、CIDRブロックの範囲は使用済みの数値は指定できないため範囲内の数値に変更します。（参考記事）
<img width="1437" alt="サブネット作成（DB用）①.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/ed00b0b3-77a3-b53d-4c50-f51c4164ab55.png">

<img width="1437" alt="サブネット作成（DB用）②.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/c4dde0b4-428c-d232-d986-f5cb938a3342.png">

##インターネットゲートウェイの作成
作成したVPC内のサーバがインターネットと接続するための出入口を設定します。
<img width="1437" alt="igw作成①.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/8936a1e8-a3d2-f9cf-1bbc-ce07376d4089.png">

<img width="1437" alt="igw作成②.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/e602bf49-1c33-9345-cbe6-78c1cc378713.png">

<img width="1141" alt="igw作成③.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/207ebaa4-615e-61bd-84f6-90bcf00ac36d.png">

<img width="1437" alt="igw作成④.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/3effe882-2fc3-a65c-7182-2ef5af3d77dd.png">

##ルートテーブルの作成
デフォルトでは同じVPC内のものしかアクセスできないため、ルート編集で設定したゲートウェイに紐づいているアクセスの通信を可能にします。
<img width="1437" alt="ルートテーブル作成①.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/b42d3763-ffc5-fdf1-cc15-45ffc0b351b4.png">

<img width="1437" alt="ルートテーブル作成②.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/73ecb992-0d4f-59f3-7586-926d20b8f9ca.png">

<img width="1437" alt="ルートテーブル作成③.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/ea815808-1a4d-7428-7cfc-8bf0f1600a4a.png">

<img width="1437" alt="ルートテーブル作成④.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/d05af42d-b793-8709-d538-8e20cce19a9e.png">

<img width="1437" alt="ルートテーブル作成⑤.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/09978258-75c6-61b6-58f7-6fceeeabd012.png">

<img width="1437" alt="ルートテーブル作成⑥.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/d401e5d6-b894-ad31-e367-d161231c293f.png">

## セキュリティグループの作成
通信の許可設定をEC2用（SSH/HTTP/すべてのICMPIPv4）とRDS用(MYSQL/Aurora)をそれぞれ設定します。ちなみに、EC2のIPv4はpingコマンドで接続状況を確認するためのものです。
###1.EC2用

<img width="1283" alt="セキュリティグループ（EC2用）①.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/971f7dba-4ede-c05e-0c4d-25b89d6dd790.png">

<img width="1437" alt="セキュリティグループ（EC2用）②.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/e16a4f42-6b3b-0b43-df4b-7a63ac1b8f6c.png">

<img width="1284" alt="セキュリティグループ（EC2用）③.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/7bfde946-3585-9cb8-27db-a0cff90a78cf.png">

<img width="1437" alt="セキュリティグループ（EC2用）④.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/e81b5085-f9ce-bd87-3695-37f6b30a097e.png">

###2.RDS用

<img width="1284" alt="セキュリティグループ（RDS用）①.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/431c0f26-a61d-d496-b5d4-6a2928909cb1.png">

<img width="1437" alt="セキュリティグループ（RDS用）②.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/51be4fec-1488-3352-240f-933a404f863f.png">

<img width="1285" alt="セキュリティグループ（RDS用）③.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/b4e8889e-7008-a9de-3c12-0edbe37cef0f.png">

<img width="1436" alt="セキュリティグループ（RDS用）④.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/94b2cfc4-33e1-17e1-9d98-4fc4acc32b48.png">

##DBサブネットグループの作成
<img width="1437" alt="DBサブネットグループ作成①.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/5792156a-20e6-b81d-08f6-e48c0e2c3877.png">

任意の名前を入力し、作成したVPCと紐付けます。
<img width="1437" alt="DBサブネットグループ作成②.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/1d77676d-44e8-9014-786e-21afd0bf5cf9.png">

作成したサブネットが３つありますが、パブリックサブネット(10.0.0.0/24)は削除し、残り２つのプライベートサブネットのみを残して作成します。
<img width="1437" alt="DBサブネットグループ作成③.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/a8146f86-1747-cc6d-0d2f-e7a5fd029628.png">

##RDSの作成

<img width="1437" alt="RDS作成①.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/5b120d14-2409-33a7-31d3-0f2b10cbf642.png">

MySQLを選択します。
<img width="1437" alt="RDS作成②.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/a862e5a4-0fec-ae06-133c-fc4bc5154106.png">

テスト用のため今回は無料利用枠のみ有効化にチェックを入れています。
<img width="1437" alt="RDS作成③.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/27246374-ec85-88d5-d83d-02939923a95d.png">

任意の名称とパスワードを入力します。
<img width="1437" alt="RDS作成④.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/737f36cd-3029-73f1-40b7-d0698693193a.png">

作成したVPC、サブネットグループが紐づけられていることを確認し、アベイラビリティゾーンは`ap-northeast-1a`を選択します。
<img width="1437" alt="RDS作成⑤.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/29349e6a-5eff-5207-d194-ee084ca2a27f.png">

VPCのセキュリティグループは、RDS用に作成したセキュリティグループを紐付けます。
<img width="1437" alt="RDS作成⑥.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/31c77e79-a63f-9991-7a2d-a483e1587302.png">

今回は初期MySQLデータベースは不要なのでデータベース名は空白にします。
<img width="1437" alt="RDS作成⑦.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/3b7adb87-f1f1-c2cb-9f5a-3c6ac3303189.png">

その他の設定については今回はデフォルトのままで作成します。
<img width="1437" alt="RDS作成⑧.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/f33c4486-cf05-f668-beb7-424f7811dab9.png">

##EC2の作成

<img width="1437" alt="EC2作成①.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/dd2b1df2-6a26-f907-106a-cac2d893d5be.png">

テスト用なのでAMI及びインスタンスタイプは無料利用枠を選択しています。
<img width="1437" alt="EC2作成②.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/2186e856-7a2b-3ff9-0d67-2503d2d41b53.png">
<img width="1437" alt="EC2作成③.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/37fd3227-e46a-02d3-e6ba-6e072c23ae05.png">

ネットワーク及びサブネットには作成したVPC及びパブリックサブネットを紐付けます。パブリックIPの自動割り当てはサブネット作成時に設定しているので、自動的に有効になると思いますが、無効になっている場合は有効に変更します。
<img width="1437" alt="EC2作成④.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/946fbc9d-70bd-11a5-0203-c5fb2d9ae3ee.png">

デフォルトのまま次へ進みます。
<img width="1437" alt="EC2作成⑤.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/7a91c91f-265b-d630-59b3-3bbb8babcd3e.png">

EC2の名称を設定します。
<img width="1437" alt="EC2作成⑥.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/7eb208ee-9907-86ec-42d2-32369c8d7369.png">

既存のセキュリティグループを選択し、EC2用に作成したセキュリティグループを選択します。
<img width="1437" alt="EC2作成⑦.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/588e2656-5a0d-ddc5-f56c-506bb8738f2f.png">

入力内容に誤りがないか確認し、EC2を起動します。
<img width="1437" alt="EC2作成⑧.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/cc04f631-2489-c868-cc06-85260ff2b4fe.png">

新しいキーペアを作成しダウンロードすればEC2インスタンスの作成は完了です。
<img width="1437" alt="EC2作成⑨.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/b85cbad1-90fc-51a5-703f-f147ca2a517b.png">

##EC2へのSSH接続の確認
EC2インスタンスの状態が`running`に変わったことを確認し、IPv4パブリックIPをコピーします。
<img width="1437" alt="SSH接続確認①.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/ded62da7-09e0-f2c9-9b1c-903f444fdeb3.png">


次にターミナル画面に切り替えて、`ping + IPアドレス`のコマンドを入力し、次の画面が表示されれば接続準備はOKです。接続を切るときは`control + c`を入力します。

```ターミナル.
$ ping 54.65.196.161
PING 54.65.196.161 (54.65.196.161): 56 data bytes
64 bytes from 54.65.196.161: icmp_seq=0 ttl=236 time=14.381 ms
64 bytes from 54.65.196.161: icmp_seq=1 ttl=236 time=15.311 ms
64 bytes from 54.65.196.161: icmp_seq=2 ttl=236 time=14.739 ms
64 bytes from 54.65.196.161: icmp_seq=3 ttl=236 time=13.951 ms
```

続いてSSHの接続確認を行います。先ほど作成したpemキーを`.sshフォルダ`に移動させます。次のコマンドの手順で入力し、次の結果が表示されればEC2への接続が完了です。

```ターミナル.
$ mv Downloads/aws-test.pem .ssh/      #pemキーを.sshフォルダに移動                          
$ sudo chmod 600 ~/.ssh/aws-test.pem　   #指定している鍵の権限が広すぎるため変更
Password:〇〇〇〇〇〇〇〇                  #自身のPCのパスワード
$ ssh -i ~/.ssh/aws-test.pem ec2-user@54.65.196.161　　#pemキーとパブリックIPを使用

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

https://aws.amazon.com/amazon-linux-2/
8 package(s) needed for security, out of 17 available
Run "sudo yum update" to apply all updates.　
```

##EC2からRDSへの接続確認

```ターミナル.
$ sudo yum update -y         #EC2接続時に最初に実行
：
：
完了しました!
$ sudo yum install mysql -y  #MySQLのインストール
：
：
完了しました!
```
AWSのコンソール画面に戻り、作成したRDSのエンドポイントをコピーします。
<img width="1437" alt="RDS接続確認.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438093/583ae334-10ec-49ac-ea30-6ebde5704e9d.png">

```ターミナル.
$ mysql -h aws-test.cl0w7wsj1gla.ap-northeast-1.rds.amazonaws.com -u admin -p  #RDSのエンドポイントとRDS作成時のマスターユーザ名（admin）を使用
Enter password:〇〇〇〇〇〇〇〇                  #RDS作成時のパスワード
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 40
Server version: 5.7.22-log Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 　　　　#exitで抜けます
```
ついでにデフォルトで入っているMariaDBを削除してMySQLのみに変更します。

```ターミナル.
$ sudo yum remove mariadb-libs -y  #MariaDBの削除
：
：
完了しました!
$ sudo rm -rf /var/lib/mysql       #一度MySQLも削除
$ sudo yum install mysql -y        #再度MySQLのインストール
：
：
完了しました!
$ sudo yum install -y https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm
：
：
完了しました!
$ sudo yum install -y mysql-community-server
：
：
これらを試行できます: rpm -Va --nofiles --nodigest
$ sudo yum install -y mysql-devel
：
：
完了しました!
$ mysql -h aws-test.cl0w7wsj1gla.ap-northeast-1.rds.amazonaws.com -u admin -p
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 44
Server version: 5.7.22-log Source distribution

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
```
以上で、今回の構成図が完成となります。


##参考記事
https://yamagata.int21h.jp/tool/cidrcalc/
https://qiita.com/naoki_mochizuki/items/f795fe3e661a3349a7ce
https://qiita.com/nave-m/items/68425f476b254a1a47b0