【AWS初心者向け】AWSでWebサーバーとデータベースを構築して、ブラウザにデータを表示する【ハンズオン】


#はじめに
###想定読者
AWS未経験者、初学者、非インフラエンジニア

###簡単に自己紹介
システムエンジニア（２年目）（非インフラ）
AWS歴３ヶ月（独学）
最初の１ヶ月の勉強方法はこちら（[インフラ知識ゼロの２年目プログラマーがAWS SAAに１ヶ月で合格した方法](https://qiita.com/MayForBlue/items/b8dbc86780f202f02407)）

###この記事の目的
上記の想定読者ができるだけ少ない負担でAWSに触れ、実際に動かしてみること

私自身がAWSを勉強する前に感じていたインフラ・AWSに対する敷居の高さを少しでも払拭できないかという思いがあり、
もし自分が初心者向けにAWSのハンズオンをするならこういうことをしたいなという内容をそのまま記事にしました。

初心者が書いた記事なので、間違い等あれば指摘いただけると幸いです。
また、この記事で紹介するインフラ構成、構築方法はあくまで練習のための最低限のものなので、実際にサービスを構築・運用する際の参考にはならないことをご了承ください。


##ゴール
AWS上でWebサーバー、データベースを構築し、データベースに登録したデータをブラウザで表示すること
<img width="1140" alt="スクリーンショット 2019-10-02 17.38.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/0cf937d1-dfea-3a2d-a1be-82a3f27f9ed6.png">
（userテーブルのid,nameカラムを表示）

できるだけ丁寧な解説を心掛けますが、わからない用語、手法が出てくるかもしれません。
ただ、進めていく中で理解できることもあると思うので、とりあえずやってみていただければと思います。

Macユーザー向けに書いていますが、Macの仕様に沿って動かしている箇所をWindowsに置き換えていただければ動作すると思います。（SSH接続でターミナルで動かすかわりにTeraTermを導入するなど）

#下準備
##この記事で扱うAWSの用語
AWSには用語がたくさんありますが、この記事で扱うものだけざっくり紹介します。最初はイメージしにくいかもしれないので、流し読みでも大丈夫です。
###リージョン
AWSがサービスを提供している国の地域のこと
（東京リージョン、オレゴンリージョン、ロンドンリージョンなど）
###AZ
・リージョン内のデータセンターのこと
・耐障害性を高めるため一つのリージョン内に複数のAZがある
###VPC
*Virtual Private Cloud*
・AWS上の閉域（自分専用の）ネットワーク
・VPCを作成して、その中にサーバーなどを構築していく
###サブネット
・VPC内でさらに細かく区切った任意のネットワークの範囲。
・Webサーバーはパブリックサブネットに配置し、データベースはプライベートサブネットに構築するなど、用途による切り分けができる。（パブリックサブネットとプライベートサブネットの違いは、インターネットと直接通信するかどうか）
###EC2
*Elastic Compute Cloud*
・仮想サーバー
・ひとつひとつのサーバーはEC2インスタンスと呼ばれる。
・WindowsServer、LinuxなどOSの選択可能
###RDS
*Relational Database Service*
・AWSが提供するRDBのサービス
Amazon Aurora、Oracle、SQL Server、PostgreSQL、MySQL、MariaDBから選択可能
###IAM
*Identity and Access Management*
・簡単に言うとユーザーアカウント機能
・ルートユーザー（AWSに登録したアカウント）との差別化を図る
・各サービスのアクセス権限を設定できる

##構成
簡単に構成を説明します。こちらも最初は流し読みでも大丈夫です。
ハンズオンを終えた後だとかなり理解しやすくなっていると思うので、もう一度見てみてください。
![Untitled Diagram.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/69bfb2e6-30dc-3ba5-5ff4-51af5287d6f8.jpeg)
AWS Cloud（AWSのネットワーク全体）、リージョン、アベイラビリティゾーンはAWSアカウントを作成していなくても存在しています。
AWSアカウントを作成すると、任意のリージョンの中に存在している状態になります。（初期設定はオレゴンリージョン）
まず初めに、自分が使用するネットワークの範囲を決めるために、VPCを作成します。
WebサイトなのでEC2（サーバー）は外部に公開します。データベースはセキュアな状態にしたいので外部に公開しません。
そのため、サブネットを外部に公開するものとしないものに分けて（パブリックサブネット、プライベートサブネット）その中にそれぞれWebサーバーとデータベースを構築します。
データベースに接続できるのはWebサーバーのみとします。
外部のネットワークとの通信には、インタネットゲートウェイと呼ばれる、サーバーがインターネット上と通信するための窓口が必要なので、VPC内に構築し、Webサーバーと紐づけを行います。これでWebサーバーがインターネットと通信することが可能になります。

以上が今回構築していくインフラ構成になります。

##前提
AWSアカウントの登録は完了している状態とします。
[AWS アカウント作成](https://aws.amazon.com/jp/register-flow/)
また、ルートユーザー（AWSアカウントを登録したユーザー）と、実際にAWS上でサーバー構築などの作業を行うユーザーは分けることをAWS側が推奨しています。（全権限を持つルートユーザーで作業を行うのは非推奨。）
そのため、IAMユーザーを作成しておき、そのユーザーで作業を行うことをおすすめします。
（参考記事:[AWSアカウント作ったらこれだけはやっとけ！IAMユーザーとAuthyを使ったMFAで2段階認証](https://qiita.com/yoshidashingo/items/cd206daca0596659b440)

#ハンズオン開始
##手順
1.VPCを作成する
2.インターネットゲートウェイを作成する
3.サブネットを作成する
4.ルートテーブルを作成する
5.セキュリティグループを作成する
6.EC2インスタンスを作成する
7.Elastic IPを作成、紐づけする
8.SSHでサーバーにログインしてみる
9.RDSを構築する
10.WebサーバーからRDSにSSHでログインしてみる
11.ブラウザにデータを表示する

###リージョンの選択
サービスを構築する前に今回のインフラを構築するリージョンを設定します。
[AWS マネジメントコンソール](https://aws.amazon.com/jp/console/)にログインしてください。
画面に表示されているヘッダー右上に表示されている地域をクリックして選択できます。今回は東京リージョンを選択します。
<img width="1280" alt="スクリーンショット 2019-10-02 8.08.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/d47cbfc5-6023-41ac-f72c-80f32ac3bd20.png">


###1.VPCを作成する
AWSマネジメントコンソールを開き、VPCと検索し、VPCダッシュボード（VPCの設定画面）を開きます。
![スクリーンショット 2019-09-26 1.15.27.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/d612828e-c3cd-e00a-3bfc-54125b2de137.jpeg)

画面左側のメニューから「VPC」を選択し、「VPCの作成」をクリックします。
![スクリーンショット 2019-09-26 1.17.39.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/d01d5ff1-22f9-3175-a75c-3d51966335e0.jpeg)

名前タグ `TestVpc`
IPv4CIDRブロック `10.0.0.0/16` 
と入力して、「作成」をクリックします。
ーIPv4CIDRブロック：ネットワーク内で使用するIPアドレスの範囲
![スクリーンショット 2019-09-26 1.18.30.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/91591dd5-2429-b9fb-bab0-fe73aeac31f9.jpeg)



###2.インターネットゲートウェイを作成する
VPCの画面の左側のメニューから「インターネットゲートウェイ」を選択し、「インターネットゲートウェイの作成」をクリックします。
![スクリーンショット 2019-09-26 1.18.56.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/78038c10-26be-588a-3adb-00fb4be74da5.jpeg)

名前を `TestIGW` とし、「作成」をクリックします。

作成したインターネットゲートウェイをVPCに関連付けます。
もう一度インターネットゲートウェイの画面を開き、作成したインターネットゲートウェイを選択します。
画面上部の「アクション」をクリックし、「VPCにアタッチ」を選択します。
![スクリーンショット 2019-09-26 1.19.26.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/8d39a4bc-0cb2-67ad-47a3-824aa15e2d9e.jpeg)

さっき作成したVPCを選択し、「アタッチ」をクリックします。
![スクリーンショット 2019-09-26 1.19.32.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/e33e9075-910d-dd1d-216a-bff19e3a0e45.jpeg)

###3.サブネットを作成する
Webサーバー用のパブリックサブネットと、データベース用のプライベートサブネットを作成します。
引き続きVPCの画面左側から「サブネット」を選択し、「サブネットの作成」をクリックします。
![スクリーンショット 2019-09-26 1.21.43.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/cd2d67a8-e14a-0833-b14b-6a446cd57ebd.jpeg)

まずはパブリックサブネットから。下記を入力し、「作成」をクリックします。
名前タグ `PublicSubnet`
VPC `作成したVPC`
アベイラビリティゾーン`ap-northeast-1a`
IPv4CIDRブロック `10.0.1.0/24`
![スクリーンショット 2019-09-26 1.22.32.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/030de2e5-9dea-1c42-e7bc-0025e8e452cb.jpeg)

同じようにプライベートサブネットも作成します。
データベースの作成にサブネットが２つ以上必要なため、２つ作成します。
一つめのプライベートサブネット↓
名前タグ `PrivateSubnet1`
VPC `作成したVPC`
アベイラビリティゾーン`ap-northeast-1c`
IPv4CIDRブロック `10.0.2.0/24`
![スクリーンショット 2019-09-26 1.23.23.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/76ab2363-a1f3-8ca9-4e20-9a01b874082e.jpeg)

二つめのプライベートサブネット↓
名前タグ `PrivateSubnet2`
VPC `作成したVPC`
アベイラビリティゾーン`ap-northeast-1d`
IPv4CIDRブロック `10.0.3.0/24`
![スクリーンショット 2019-09-26 1.23.39.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/6bbeb5cf-54fd-304f-28ad-f7c72bbc4670.jpeg)

###4.ルートテーブルを作成する
サブネットが任意のネットワークと通信するための経路であるルートテーブルを作成します。
VPCダッシュボードから「ルートテーブル」を選択し、「ルートテーブルの作成」をクリックします。
![スクリーンショット 2019-09-26 1.23.53.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/08969aa6-022e-dafd-b876-ae5a948796a5.jpeg)

下記を入力し、「作成」をクリックします。
名前タグ `TestRT`
VPC `作成したVPC`
![スクリーンショット 2019-09-26 1.24.12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/7e82a110-d5dc-7d8a-0b9b-c0deef30f92a.jpeg)

ルートテーブルとインターネットゲートウェイ、ルートテーブルとパブリックサブネットを紐付けて、パブリックサブネットがインターネットと通信できるようにします。
VPCダッシュボードから「ルートテーブル」を選択し、作成したルートテーブルを選択します。
画面下半分に表示されているタブから「ルート」を選択し、「ルートの編集」をクリックします。
![スクリーンショット 2019-09-26 1.24.36.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/297a8369-c930-4e8b-3656-1b32fb69f698.jpeg)

「ルートの追加」をクリックし、送信先を`0.0.0.0/0`とします。
ターゲットに「Internet GateWay」を選択します。
(`0.0.0.0/0`はIPアドレスの制限がないこと、すべての通信を意味する）
![スクリーンショット 2019-09-26 1.25.08 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/4e5b014b-fe42-4fd3-c638-6521498fb9bf.jpeg)

先程作成したインターネットゲートウェイを選択し、「ルートの保存」をクリックします。
![スクリーンショット 2019-09-26 1.25.15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/f83f3632-c9a0-46d5-f166-c211e2d86acb.jpeg)

作成したルートテーブルとパブリックサブネットを関連づけます。
VPCダッシュボードから「ルートテーブル」を選択し、作成したルートテーブルをクリックします。
画面下半分のタブから「サブネットの関連付け」を選択し、「サブネットの関連付けの編集」をクリックします。
![スクリーンショット 2019-09-26 1.25.41.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/7885fe78-1357-7c7d-d3d4-ac6a98153354.jpeg)

作成したパブリックサブネットを選択し、「保存」をクリックします。
![スクリーンショット 2019-09-26 1.25.59.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/052112f9-f41c-4e32-e910-4f5b942a1a48.jpeg)

###5.セキュリティグループを作成する
こちらもWebサーバー用とデータベース用を作成します。
まずはWebサーバー用から。
VPCダッシュボードから「セキュリティグループ」を選択し、「セキュリティグループの作成」をクリックします。

下記を入力し、「保存」をクリックします。
セキュリティグループ名 `MyWebServerSG`
説明 `ForWebServer`
VPC `作成したVPC`
![スクリーンショット 2019-09-26 1.27.37.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/8106727c-f146-d819-08e9-06335206c96e.jpeg)

セキュリティグループの画面から「MyWebServerSG」を選択し、画面下部のタブの「インバウンドのルール」から「ルールの編集」をクリックします。
「ルールの追加」をクリックし、下記のルールを追加します。
タイプ `SSH` ソース `カスタム` `0.0.0.0/0`
タイプ `HTTP` ソース `カスタム` `0.0.0.0/0, ::/0`
タイプ `HTTPS` ソース `カスタム` `0.0.0.0/0, ::/0`
追加したら、「ルールの保存」をクリックします。
![スクリーンショット 2019-09-26 20.39.00 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/c028db45-ec9a-4af6-25cc-4f1d347c8eec.jpeg)

データベース用のセキュリティグループも同じように作成します。
以下を設定し、保存します。
セキュリティグループ名 `MyRDSSG`
説明 `ForMyRDS`
VPC `作成したVPC`

<img width="1276" alt="スクリーンショット 2019-10-01 21.42.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/49eae475-95ec-5733-14a2-08bbe4fba4f9.png">
インバウンドのルール
タイプ `MYSQL/Aurora` ソース `カスタム` Webサーバー用のセキュリティグループ`
↑ここでデータベースにはWebサーバーからしか接続できないように設定しています
<img width="1273" alt="スクリーンショット 2019-10-01 21.44.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/39abf5f6-fed5-16ad-db23-0faeede38f66.png">



###6.EC2インスタンスを作成する
いよいよWebサーバーの作成です。
マネジメントコンソールのトップの画面に戻り、EC2を検索し、選択します。
![スクリーンショット 2019-09-26 1.29.02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/37b8e780-6d82-5040-115c-6e85d230f3e9.jpeg)

EC2ダッシュボードに移動し、「インスタンスの作成」をクリックします。
![スクリーンショット 2019-09-26 1.29.36.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/c818e32c-20f8-c2b5-b1e3-f3e3b4321845.jpeg)

今回は一番上のLinuxのマシンイメージ(AMI)を選択します。

![スクリーンショット 2019-09-26 1.29.46.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/11513a5e-1a0b-b92a-30fa-da6796d3b03a.jpeg)

インスタンスタイプもデフォルトで選択されているものをそのまま選択します。
![スクリーンショット 2019-09-26 1.30.06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/95b2091c-d462-0056-422c-c7f44903623c.jpeg)

インスタンスの詳細の設定画面で下記を設定し、「ストレージの追加」をクリックします。
ネットワーク`作成したVPC`
サブネット`作成したパブリックサブネット`
自動割り当てパブリックIP`有効`　←パブリックIPアドレスを付与するかどうかの設定
![スクリーンショット 2019-09-26 1.30.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/2cadd69d-79c5-f41b-f4d1-1ab968ce1cce.png)

手順4ストレージの追加、手順5タグの追加は特に設定を変えずに、
手順6セキュリティグループの設定に移ります。
セキュリティグループの設定で
セキュリティグループの割り当て：既存のセキュリティグループを選択する
を選択肢、先程作成した「MyWebServerSG」を選択します。
<img width="1272" alt="スクリーンショット 2019-09-26 1.32.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/11c8ee12-9d9b-c5e4-7fbd-09d52db22a9b.png">

「確認と作成」をクリックすると次の画面で警告が出ますが（IPアドレスの制限をかけていないため）、このまま「起動」をクリックします。
<img width="1275" alt="スクリーンショット 2019-09-26 1.32.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/694462bb-7aa1-51c4-bed8-f6a7864db887.png">
キーペア(SSHでアクセスするための鍵ファイル)を作成するためのポップアップが出るので、
キーペア名 `MyTestKeyPair`とし、キーペアをローカルの任意の場所にダウンロードします。
<img width="1272" alt="スクリーンショット 2019-09-26 1.32.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/5c118744-9a7b-e93a-5205-a74386190640.png">
ダウンロードが終わったら「インスタンスの作成」をクリックします。
インスタンス作成中の画面が表示されます。「インスタンスの表示」をクリックして、
インスタンスの状態：running
ステータスチェック:2/2のチェックに合格しました
になっていたら無事にインスタンス（サーバー）の作成、起動が完了です。

ここで、さっき作成したキーペアですが、このままだとパーミッション（権限レベル）がゆるすぎますよーという警告が出るので、ターミナルで600に変更します。おまじないみたいなものです。
Macのターミナルを開いて `chmod 600 【キーペアのパス】 `を入力し、Enterキーを押します。
<img width="961" alt="スクリーンショット 2019-09-29 10.20.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/c867dd38-a303-bb51-7052-1495638854bb.png">
エラーが出なければ変更完了です。

###7.Elastic IPを作成、紐づけする
EC2インスタンス作成時にパブリックIPアドレスの付与を有効化しましたが、実はEC2インスタンスのパブリックIPは停止→起動のたびに違うものが付与されます。
何度起動しても同じIPアドレスを付与する機能がElastic IPです。

EC2ダッシュボードで「Elastic IP」を選択し、「新しいアドレスの割り当て」をクリックします。
<img width="1273" alt="スクリーンショット 2019-09-26 1.38.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/1b80be73-063d-9762-b81d-3552033350d8.png">
表示された画面でそのまま「割り当て」をクリックします。
ElasticIPの画面に戻り、「アクション」から「アドレスの関連付け」を選択します。
<img width="1264" alt="スクリーンショット 2019-09-26 1.38.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/a5e728d9-90fb-8a7b-ec68-b709583e8bf0.png">

「アドレスの関連付け」の画面で下記を入力します。
リソースタイプ`インスタンス`
インスタンス`作成したEC2インスタンス`
プライベートIP`作成したEC2インスタンスのプライベートIP`
<img width="1275" alt="スクリーンショット 2019-09-26 1.38.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/e4e5855d-3f2d-b39b-96b3-a2b25ac711c1.png">
「関連付け」をクリックして、作業完了です。

###8.SSHでサーバーにログインしてみる
SSH（自分のPCから別のPCに安全にリモート接続できるコマンド)で、EC2インスタンスに接続してみます。
ターミナルを開いて下記を入力、Enterをクリックしてください。

```
ssh ec2-user@【EC2インスタンスのパブリックIPアドレス】 -i 【pemキーのパス】
```

インスタンスのパブリックIPアドレスは、EC2ダッシュボードから対象のインスタンスを選択し、
画面下部の「説明」タブの中で確認できます。

<img width="1276" alt="スクリーンショット 2019-09-26 1.41.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/2db8ed79-36cd-3b86-64a1-316b8699f375.png">
つなげていいですかー？というメッセージが出るので`yes`を入力し、Enterをクリックしてしばらく経つと、接続完了の旨のメッセージが表示されます。
<img width="1273" alt="スクリーンショット 2019-09-26 1.41.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/9e96aa61-32c8-8aa8-a222-d57332394ecc.png">

Webサーバーとして稼働させるため、apacheをインストールしていきます。
ターミナルに順番に下記のコマンドを入力してください。

↓管理者権限で実行

```sh
sudo su 
```

↓アプリケーションのアップデートの確認、実行

```sh
yum update -y
```

↓apacheインストール

```sh
yum install httpd -y
```

↓apache起動

```sh
service httpd start
```

起動していることを確認してみます。
↓フォルダ移動

```sh
cd /var/www/html
```

↓viエディタでindex.htmlを開く

```sh
sudo vi index.html
```

index.htmlに下記のコードを貼り付けてください。

```html:index.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>テストタイトル</title>
    </head>
    <body>
        <p>Hello AWS!</p>
    </body>
</html>
```

貼り付けたら、escキーをクリックした後「:」→「w」→「q」→「Enter」の順にクリックして保存してください。


ブラウザでEC2インスタンスのIPアドレスを入力して、画面が表示されたら成功です。
<img width="970" alt="スクリーンショット 2019-10-01 22.32.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/01f65a46-1e56-a4da-a773-6c2eca4be3c4.png">


###9.RDSを構築する
まず、RDSインスタンスが所属するためのサブネットグループを作成します。
RDSダッシュボードの左側のメニューから「サブネットグループ」を選択し、「DBサブネットグループの作成」をクリックします。

「サブネットグループの詳細」エリアに下記を入力します。
名前`TestDbSubnetGroup`
説明`ForTestDb`
VPC`作成したVPC`
<img width="1276" alt="スクリーンショット 2019-09-26 2.00.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/01b58314-bb7e-5084-1935-9b6e0c05bf66.png">

「サブネットの追加」で、3.で作成したデータベース用のサブネット２つを追加します。
<img width="1274" alt="スクリーンショット 2019-09-26 2.00.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/fca644da-ada6-d951-e6e5-003cc58633fb.png">
<img width="1267" alt="スクリーンショット 2019-09-26 2.01.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/deecd36e-5f3d-691f-a1e1-7f873e2462c5.png">
「作成」をクリックして完了です。

RDSインスタンスを作成します。
画面左上のサービスからRDSを検索し、RDSダッシュボードを表示します。
<img width="1276" alt="スクリーンショット 2019-09-26 1.59.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/3942a891-890e-4ff1-306e-c38ae7c38825.png">

「データベース」を選択し、「データベースの作成」をクリックします。
<img width="1276" alt="スクリーンショット 2019-09-26 1.59.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/f6ea2b2b-ffee-58ed-1b9a-390dfe1dd8e5.png">

「データベースの設定」で「Standard Create」、「エンジンのオプション」で今回は「MySQL」を選択します。
<img width="1274" alt="スクリーンショット 2019-09-26 2.01.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/82c83b2e-5bf9-9890-0e4f-1cfc51deb3ff.png">

「テンプレート」で「無料利用枠」を選択します。

「設定」-「認証情報の設定」でデータベースのマスターアカウントのユーザー名とパスワードを入力します。
<img width="1274" alt="スクリーンショット 2019-09-26 2.02.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/7c9daf0b-1467-04b8-f313-aabf568dd28a.png">

「DBインスタンスサイズ」「ストレージ」はデフォルトの設定を利用します。

「接続」の「VPC」で、作成したVPCを選択します。
<img width="1274" alt="スクリーンショット 2019-10-02 15.27.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/f2b22709-14c3-5fea-2778-f70ab8269eb5.png">


「接続」-「追加の接続設定」で以下を設定します。
サブネットグループ：作成したDBサブネットグループ
パブリックアクセス可能:なし
VPCセキュリティグループ:既存の選択
既存のVPCセキュリティグループ:データベース用に作成したセキュリティグループ
アベイラビリティゾーン:ap-northeast-1d
データベースポート:3306
<img width="1276" alt="スクリーンショット 2019-09-26 2.15.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/b6ddc20d-2069-4707-fc95-e09484b077a8.png">

この状態で「データベースの作成」をクリックすると、データベースが作成中になります。
EC2と同様、しばらく経つとインスタンスが作成され、クリックすると詳細情報が確認できます。
<img width="1280" alt="スクリーンショット 2019-10-02 15.35.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/9390bc4a-b4ed-82d4-0fad-524fbfd47fa7.png">
<img width="1276" alt="スクリーンショット 2019-10-02 15.39.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/cb30478e-ce9b-4810-e681-35d17e84ac57.png">

###10.WebサーバーからRDSにSSHでログインしてみる（疎通確認）
EC2インスタンスにMySqlクライアントをインストールします。
ターミナルを起動してさっきと同じようにSSHでEC2インスタンス（Webサーバー)に接続します。（すでに接続している場合はそのままでOK）

```sh
ssh ec2-user@【EC2インスタンスのパブリックIPアドレス】 -i 【pemキーのパス】
```

↓WebサーバーにMySQLクライアントをインストールします。

```sh
sudo yum -y install mysql
```

WebサーバーのMySQLクライアントからRDSに接続します。
下記を入力してEnterキーを押すと、パスワードを求められるので入力して再度Enterを押します。

```sh
mysql -h 【エンドポイント】 -P 3306 -u 【ユーザー名】 -p
```

接続できたら疎通確認完了です。
<img width="571" alt="スクリーンショット 2019-10-04 21.31.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/c56778c6-b594-9fe3-e464-00526f35f726.png">
Webサーバー、データベースを構築し、Webサーバーからデータベースへ接続する一連の流れを構築できました。

###11.ブラウザにデータを表示する
サーバーサイドにはPHPを使用します（個人的に構築が楽なので）。
データベースサーバーに接続している状態で、データを作っていきます。

↓データベースの作成(testdbという名前のデータベース)

```sql
create database testdb;
```

↓テーブル、カラムの作成
今回はuserテーブルと、その中にid(int型）、name(varchar型）を作成します。

```sql
create table testdb.user(id int , name varchar(20));
```

↓データを作成する

```sql
insert into testdb.user VALUES (1,'tanaka'),(2,'satou');
```

↓データが登録できたことを確認する

```sql
select * from testdb.user;
```

↓データベースサーバーとの接続を切り、Webサーバに戻る

```sql
quit
```

<img width="615" alt="スクリーンショット 2019-10-01 23.33.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/1fd5b016-8ad8-c9d9-1e37-c20ceada9b03.png">


↓EC2インスタンスにPHPとMySQLを扱うためのモジュールをインストールする

```console
$ sudo yum -y install php php-mysql
```



__拡張子が.phpのファイルがphpファイルとして読み込まれるように設定する__
↓viエディタでhttpd.confファイルを開く

```console
$ sudo vi /etc/httpd/conf/httpd.conf
```

```apache
<IfModule mime_module>
・・・(略)
</IfModule>
```

↑のタグで囲まれている部分があるので、下記のようにコードを追加する
(aを押すと編集モードになるので、その状態で貼り付けてください）

```apache
<IfModule mime_module>
・・・(略)
AddType application/x-httpd-php .php //←追加
</IfModule>
```

編集が終わったらescキーをクリックした後 「:」→「w」→「q」→「Enter」の順にクリックして保存してください


↓設定を反映するためにapacheを再起動する

```sh
 sudo service httpd restart
```

↓下記のテストコードを実行し、ブラウザで ```【EC2インスタンスのパブリックIPアドレス】/index.php``` に接続してテストページが表示されれば成功です。

```sh
 sudo sh -c "echo '<?php phpinfo(); ?>' >> /var/www/html/index.php"
```
<img width="1274" alt="スクリーンショット 2019-10-04 21.44.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/67e29202-4af6-4999-503a-567c9cf6933d.png">


__phpファイルを、DB情報を取得・表示するコードに修正する__

↓viエディタでindex.phpファイルを起動

```sh
sudo vi /var/www/html/index.php
```

↓下記コードの【】をそれぞれ編集し、index.phpに貼り付けてください。

```php
<?php
try
{
$dbs = "mysql:host=【エンドポイント】;dbname=testdb;charset=utf8";
$user='【ユーザー名】';
$password='【パスワード】';
$dbh=new PDO($dbs, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql='SELECT * FROM user';
$stmt=$dbh->prepare($sql);

$dbh=null;
//実行
$stmt->execute();

$all = $stmt->fetchAll();
//配列を表示
foreach($all as $loop){
  echo $loop['id']." ".$loop['name'].'<br>';
}

}
catch (Exception $e)
{
        print '接続失敗';
        exit();
}
?>
```

escキーをクリックした後 「:」→「w」→「q」→「Enter」の順にクリックして保存　
もう一度ブラウザに```【EC2インスタンスのパブリックIPアドレス】/index.php```を入力して、データベースのデータが表示されていたら成功です。

<img width="1140" alt="スクリーンショット 2019-10-02 17.38.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191739/0cf937d1-dfea-3a2d-a1be-82a3f27f9ed6.png">

ハンズオンは以上になります。
今回はすべて無料利用枠の範囲内に収まるようにしていますが、無料時間枠を超えると請求が発生してしまうので、早めにリソースを削除することをおすすめします。(EC2インスタンス、RDS、Elastic IPは特に）


#まとめ
ハンズオンが終了したら、冒頭に書いている用語や構成図を見直してみてください。
きっと理解しやすくなっていると思います。

私自身が、インフラ知識がなかった状態からAWSの勉強を始めてその面白さを知ったので、今回の記事でAWSの魅力、手軽さを少しでも感じていただけていたら幸いです。

また、興味を持ったサービスがあればぜひ公式のサービス別資料集を読んでみてください。
わかりやすく、実務にも役立つし資格の勉強にもなるのでおすすめです。
[AWS サービス別資料](https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/)