基本的なブログサービスを構築する（シングル構成）

# 内容
この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com
「基本的なブログサービスを構築する（シングル構成）」のレッスンにて、WordPressのブログサイトを構築しました。
# このレッスンのゴール
![スクリーンショット 2021-06-21 13.48.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790886/5bfe242b-e6a7-004c-3b61-db5e69f31f86.png)

手元のPCからインターネットゲートウェイを経由してWordPressがインストールされたEC2にアクセスし、ブログサイトが閲覧できる状態。
# 実施の流れ
## VPCの作成
1. AWS マネジメントコンソールから「VPC」の画面を開く。
1. 左のメニューから「VPC」を選択
1. 「VPCを作成」を選択
1. 「名前タグ」と「IPv4 CIDRブロック」を入力（10.0.0.0/21）
1. 「VPCの作成」を選択

## パブリックサブネットの作成
1. 左のメニューから「サブネット」を選択
1. 「サブネットの作成」を選択
1. 「VPC」の項目は先ほど作成したVPCを選択
1. 「サブネット名」を入力(PublicSubnet1)
1. 「アベイラビリティーゾーン」を選択（ap-northeast-1a）
1. 「IPv4 CIDR ブロック」を入力（10.0.0.0/24）
1. 「サブネットを作成」を選択

## プライベートサブネットの作成
1. 左のメニューから「サブネット」を選択
1. 「サブネットの作成」を選択
1. 「VPC」の項目は先ほど作成したVPCを選択
1. 「サブネット名」を入力(PrivateSubnet1)
1. 「アベイラビリティーゾーン」を選択（ap-northeast-1a）
1. 「IPv4 CIDR ブロック」を入力（10.0.2.0/24）
1. 「サブネットを作成」を選択

## パブリックサブネットにEC2を構築
1. 検索窓に「EC2」と入力してEC2の画面に遷移
1. 左のメニューから「インスタンス」を選択
1. 「インスタンスを起動」を選択
1. AMIの選択：「Amazon Linux 2 AMI (HVM), SSD Volume Type」を選択
1. インスタンスタイプの選択：「t2.micro」を選択
1. インスタンスの詳細の設定：「ネットワーク」を先ほど作成したVPC、「サブネット」は先ほど作成したパブリックサブネットをそれぞれ選択
1. 「自動割り当てパブリックIP」は「有効」を選択
1. ストレージの追加：デフォルトのままで「次のステップ：タグの追加」を選択
1. タグの追加：「キー」に「Name」、「値」に「WebServer1」と入力
1. セキュリティグループの設定：「セキュリティグループ名」と「説明」に任意の値を入力
1. 「ルールの追加」を選択し、「タイプ」は「HTTP」を選択
1. 「確認と作成」を選択
1. これまで設定した項目を確認し、「起動」を選択
1. キーペアについては既存のものを使用するか、新しいキーペアを作成する。
1. 「インスタンスの作成」を選択

## 作成したVPCにインターネットゲートウェイを設置

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

- VPC内のAWSリソースとインターネットを繋げる
- 自動でスケールし、可用性が高い
- サブネットのルートテーブルを設定して使用する

1. VPCの画面左のメニューから「インターネットゲートウェイ」を選択
1. 「インターネットゲートウェイの作成」を選択
1. 「名前タグ」を入力
1. 「インターネットゲートウェイの作成」を選択
1. 「VPCにアタッチ」を選択
1. 「使用可能なVPC」で作成したVPCを選択
1. 「インターネットゲートウェイのアタッチ」を選択
1. 作成したインターネットゲートウェイの状態が「Attached」になっていることを確認

## ルートテーブルの設定
##### 現在の状態だとVPC内でしかルートテーブルが設定されていないため、以下の手順を行う。
##### ルートテーブルとは
- サブネットに関連づけて使用するもの
- サブネットから外に出る通信をどこに向けて発信するか決めるルール・定義
- 「ルート」と呼ばれるルールで定義される
- 最も明確なルールが優先されて適用される（狭いIPアドレスにマッチしたルールほど優先）

1. VPCの画面左のメニューから「サブネット」を選択
1. 作成したパブリックサブネットを選択し、「ルートテーブル」のタブからルートテーブルIDを選択
1. 「ルート」のタブを選択し、「ルートの編集」を選択
1. 「ルートの追加(Add Route)」を選択、送信先は「0.0.0.0/0」、ターゲットは「Internet Gateway」を選択
1. 「変更を保存」を選択

## EC2インスタンスのセキュリティグループの状態を確認
##### SSH22番ポートで接続するため、セキュリティグループの設定で22番ポートが空いているかを確認する。
1. 作成したインスタンスを選択
1. 「セキュリティ」タブを選択
1. インバウンドルール内にて、「ポート範囲」が「22」、「ソース」が「0.0.0.0/0」のルールがあることを確認する。

## 作成したEC2インスタンスにSSHでログインする
1. ターミナルを開き、キーペアが格納されているディレクトリへ移動
1. `ls -l キーペア名`で権限が400になっていることを確認
1. なっていない場合は`chmod 400 キーペア名`で権限を400にする。
1. `ssh -i キーペア名 ec2-user@パブリックIPアドレス`を実行

## RDSを作成する前にサブネットグループを作成する
##### サブネットグループは2つ以上のサブネットをグルーピングする必要がある。
##### グルーピングされたサブネットは複数のAZにまたがっている必要がある。
## パブリックサブネットをもう1つ作成
1. 左のメニューから「サブネット」を選択
1. 「サブネットの作成」を選択
1. 「VPC」の項目は先ほど作成したVPCを選択
1. 「サブネット名」を入力(PublicSubnet2)
1. 「アベイラビリティーゾーン」を選択（ap-northeast-1c）←先ほど作成したサブネットとは別のAZを選択
1. 「IPv4 CIDR ブロック」を入力（10.0.1.0/24）
1. 「サブネットを作成」を選択

## プライベートサブネットももう1つ作成
1. 左のメニューから「サブネット」を選択
1. 「サブネットの作成」を選択
1. 「VPC」の項目は先ほど作成したVPCを選択
1. 「サブネット名」を入力(PrivateSubnet2)
1. 「アベイラビリティーゾーン」を選択（ap-northeast-1c）←先ほど作成したサブネットとは別のAZを選択
1. 「IPv4 CIDR ブロック」を入力（10.0.3.0/24）
1. 「サブネットを作成」を選択

## サブネットグループを作成
1. 検索窓に「RDS」と入力してRDSの画面に移動
1. 左のメニューから「サブネットグループ」を選択
1. 「DBサブネットグループを作成」を選択
1. 「名前」「説明」を入力
1. 「VPC」は作成したVPCを選択
1. 「アベイラビリティーゾーン」は「ap-northeast-1a」と「ap-northeast-1c」を選択
1. 「サブネット」はプライベートサブネットを2つ選択（10.0.2.0/24と10.0.3.0/24）
1. 「作成」を選択

## RDSを作成
1. 左のメニューから「データベース」を選択
1. 「データベースの作成」を選択
1. データベース作成方法を選択：「標準作成」を選択
1. エンジンのオプション：今回は「MySQL」を選択
1. テンプレート：「開発/テスト」を選択（料金が気になる方は「無料利用枠」でも可
1. DB インスタンス識別子：今回はデフォルトのまま
1. マスターユーザー名：今回は「wordpress」と入力
1. マスターパスワード：任意のものを入力
1. DBインスタンスクラス：「標準クラス」は料金が非常に高くなるそうなので「バースト可能クラス」を選択
1. ストレージタイプは「汎用SSD」、ストレージ割り当ては「20」を選択
1. 可用性と耐久性：「スタンバイインスタンスを作成しないでください」を選択
1. VPC：作成したVPCを選択
1. サブネットグループ：作成したサブネットグループを選択
1. パブリックアクセス可能：「なし」を選択
1. VPC セキュリティグループ：「新規作成」を選択
1. 「新しいVPCセキュリティグループ名」を入力
1. アベイラビリティーゾーン：「ap-northeast-1a」を選択
1. データベースポート：「3306」
1. 下にスクロールし、「追加設定」タブを開く
1. 最初のデータベース名：「wordpress」と入力
1. 「データベースの作成」を選択
1. 作成したデータベースのステータスが「利用可能」となっていることを確認（しばらく時間がかかります）

- 一番下までスクロールすると、「概算月間コスト」という項目があり、どの程度料金がかかるかを確認できる。
- RDSを停止しても７日後に復旧・起動してしまうため、ゴールした後に特に必要が無ければ削除した方が良いとのこと。

## 作成したRDSのセキュリティーグループの設定を編集
1. VPCの画面の左メニューから「セキュリティーグループ」を選択
1. 前の項目で作成したセキュリティーグループを選択
1. 「インバウンドルール」タブを選択し、ソースを確認
1. 「119.170.112.10/32」等となっているので、これをWebサーバーだけから許可をする設定に変更する。
1. 「インバウンドルールを編集」を選択
1. 元々あるIPアドレスを消去して、作成したインスタンスのセキュリティグループを入力（インスタンスの「セキュリティ」タブから確認）
1. 「ルールを保存」を選択

## WordPressをインストールする
1. ターミナルに移動
1. `sudo su -`コマンドで管理者権限にスイッチ（EC2ユーザー権限のままだと権限が足りない場合もあるため）
1. `yum -y update`でEC2のパッケージの状態を最新の状態にアップデート
1. 下記のコマンドでPHP、Apache、MySQLをインストール
1. `amazon-linux-extras install php7.2 -y`
1. `yum -y install mysql httpd php-mbstring php-xml gd php-gd`
1. `systemctl enable httpd.service`コマンドでApacheのサービスを再起動後も自動で起動するように設定
1. `systemctl start httpd.service`でApacheをスタート状態にする。
1. `wget http://ja.wordpress.org/latest-ja.tar.gz ~/`でWordPressのパッケージをダウンロード
1. `tar zxvf ~/latest-ja.tar.gz`でダウンロードしたファイルを展開
1. `cp -r ~/wordpress/* /var/www/html/`でWordPressとファイルを/var/www/html/にコピー
1. `chown apache:apache -R /var/www/html`でファイルの権限をApacheの所有者、ユーザーグループに設定に変更

## ブラウザからWordPressを確認する
1. EC2インスタンスからパブリックIPアドレスを確認し、アドレスバーに貼り付けてEnterを押す。
1. WordPressの初期設定の画面が表示されるので、「さあ、始めましょう！」を選択
1. データベース名：wordpress
1. ユーザー名：RDS作成時に入力した「マスターユーザー名」を入力
1. パスワード：上記と同様に「マスターパスワード」を入力
1. データベースのホスト名：RDSの画面の左メニューから「データベース」を選択し、「接続とセキュリティ」タブの「エンドポイント」の値をコピーして入力
1. 「送信」を選択
1. 「インストール実行」を選択
1. 「サイトのタイトル」「ユーザー名」「パスワード」「メールアドレス」は任意のものを入力
1. 「WordPressをインストール」を選択
1. 「ログイン」を選択
1. ユーザー名とパスワードを入力してログイン
1. 管理画面に遷移するので、左上の家マークを選択

## 最後に
今回の構成だとEC2に障害が発生した場合、サービス全体が停止してしまうため、次回はAZ 1cに新たにEC2とRDSを構築したいと思います。
次回の構成
![スクリーンショット 2021-06-21 9.54.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790886/50bfad0b-633c-5ab8-407c-fd94769ca7b0.png)
上記の構成手順につきましては下記の記事に掲載しております。
https://qiita.com/zakinicof/items/a320268727f92d06a3b4
間違い等ございましたらご指摘いただけますと幸いです。