EC2とRDSでWeb環境構築するよ！（第２回：EC2編）

EC2とRDSのWeb環境構築の第２回目です。
第１回：VPC編はこちら
https://qiita.com/kikurage2030/items/1b30272cb15033f2ca11

## サービスの全体象
作りたいサービスの概要はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/00cd9bdd-7272-b7c8-213d-616e17591a30.png)

EC2にWebサーバを立ててPHPのプログラムがMySQLにアクセスしてテーブルの情報を表示する画面を作ります。
いわゆる一般的なWebシステムの構成でWebサーバはPublicサブネットに公開し、DBサーバはPrivateサブネットで冗長構成としてEC2のみのアクセスを許可する制御とします。また独自ドメインを取得してDNSでの名前解決も行えるようにします。

このシリーズで取り組む内容は
第１回：VPC・サブネット周りの作業
<font color=red>第２回：EC2の構築　ここ！</font>
第３回：Route53の登録
第４回：RDSの構築
第５回：Web環境の構築
を予定しています。今回は第２回：EC2編となります。

<br>

## EC2構築の作業概要
まずはEC2周りの作業概要について。
EC2の初期設定（OSテンプレートやデスク容量など）を行い、Webサーバをインストールします。また必要なサービスのみの外部アクセスを許可するためにセキュリティグループ（ファイアウォール）の設定を行います。
最後にWebサービス用の外部に公開する固定IPアドレスを取得してEC2に割り当てることでインターネット上からhttpリクエストによるアクセスができるようにします。


順序としては
1.EC2インスタンスの作成
2.Apacheのインストール
3.セキュリティグループの設定
4.Elastic IPの設定
の順番で実施。



## 1.EC2インスタンスを作成する
「EC2」→「インスタンス」→「インスタンスを起動」をクリック。
インスタンスイメージ（AMI）を選びます。
・名前：MyWebServer
・AMI：Amazon Linux
・インスタンスタイプ：t2.micor（無料利用枠）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/3f808772-a967-d0df-ae91-4925f956557d.png)
<br>
・キーペア名：MyWebServer（SSL接続用のキーペア）
・VPC：my-vpc-01（EC2を設置するVPCを選択）
・サブネット：my-pubsub-1a（EC2を設置するパブリックサブネットを選択）
・セキュリティグループ：launch-wizard-3
　※EC2に設置するファイアフォール後で個別に詳細設定
・ネットワークインターフェース - プライマリIP：10.0.10.10（EC2に振るIP）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/9e6a39db-e2e5-ebd4-091d-fa4ff91a6bf4.png)
<br>
ストレージ：8G, gp3 （検証用環境のため抑えめに）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/a0d59aca-9645-b7e1-aadb-25d36e0da18d.png)

<br>
上記設定でインスタンスを作成する。

<br><br>
でけた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/5a67f585-282b-5052-9409-ffc64caee433.png)

## 2.Apacheのインストール
EC2にWebサーバのApacheをインストールします。インストール作業はEC2作成時のキーペアを使ってTera Tarm接続して作業します。

SSHでログインする、なんでもいいけどTearaTermで。
・ユーザ名：ec2-user（初期設定で既に作成されている、パスワードはノンパス）
・認証方式：さっき作成したキーペア名（秘密鍵）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/0a1b25e7-0cb9-970d-0c4e-dbd75e904997.png)

ログインしたらApacheのパッケージ最新版をダウンロードして必要な設定を実施する。
以下コマンドのみ記載。

インストールされているパッケージの最新化
$sudo yum update -y

Apacheのインストール
$sudo yum install httpd

Apacheのサービス起動
$sudo systemctl start httpd.serivce

自動起動の設定
$sudo systemctl is-enabled httpd.service

## 3.セキュリティグループの設定
セキュリティグループ（ファイアフォール的なもの）を設定します。
Webサーバなのでhttpリクエストを受け付けるようにポートを開けてあげます。

「EC2」→「セキュリティグループ」→「launch-wizard-3」をクリック。
※launch-wizard-3は前の行程で作成したセキュリティグループ

現状はインバウンドでSSHだけ通す設定（初期設定）になっていますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/84c141a9-f239-d990-d3f5-3140d384d489.png)

インバウンドルールを編集します。
今回はWebサーバのセキュリティグループなのでhttpも通すように設定追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/dbc193c7-d4f2-d0b7-0107-3f53c2ffbc95.png)
<br>
これでポートが追加できたので実際にhttpを叩いてApacheにアクセスできるか確認。
※この時叩いているIPアドレスはAWSがEC2に割り振ったグローバルIPアドレスでサーバが起動するたびに変わります。

おK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/33a24105-28de-45d7-d6ae-028dab1d46ce.png)

## 4.Elastic IPの設定
前項で触れた通りEC2は現状再起動するとIPアドレスが変わってしまいます。なのでWebサーバとして正式に固定IPを取得する必要があるのでElastic IPの設定を行います。（別料金がかかります。）

「EC2」→「Elastic IPアドレス」→「Elastic IPアドレスを割り当てる」をクリック
ネットワークボーダーグループ：ap-northeast-1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/2074a064-6d80-5812-9e6b-d732ceab85fc.png)
<br>
固定IPアドレスが取得できたのでEC2インスタンスとの紐づけを行います。
「EC2」→「Elastic IPアドレス」→「取得したIP」選択 → 「ElasticIPアドレスの関連付け」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/946d28cb-3dd8-6a7c-1621-380bf2825b2d.png)
<br>
先ほど作成したEC2インスタンスと紐づける。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/81792138-af11-7e8c-e521-11a0fc5a121f.png)

<br>
再度取得した固定IPでApacheにアクセスできることを確認。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/6129f872-aea2-792b-5535-234747f140c0.png)


<br>
以上でEC2関連の作業が完了しました。EC2は起動時間に応じて料金が課金されていくのでうっかり立ち上げっぱなしになると費用が大変なことになります。使わない場合はきっちりシャットダウンしておきましょう。

次はドメイン名の取得とDNS関連の設定作業をするよ！