🗂

【AWS】EC2とRDSを組み合わせてWordPressを構築する。

2021/10/15に公開

はじめに

久々にAWSの記事となりますが、EC2とRDSを組み合わせてWordPressを構築する手順をアウトプットしていきたいと思います。

今回の構成

前提条件

  • AWSに登録済み
  • IAMにて作業用ユーザー作成済み
  • 東京リージョン内にて作業を実施
  • OS/データベースは以下を使用

※今回の記事は本構成を構築することだけにフォーカスしております。
運用面やセキュリティ面は考慮しておりませんので、ご注意下さい。

作業の流れ

構築手順

①仮想ネットワーク作成
②EC2インスタンス作成
③RDSインスタンス作成
④ELB作成
⑤WordPress初期設定
⑥AMI作成
⑦2つ目のEC2インスタンスの作成
⑧RDSインスタンスのマルチAZ配置化

試験・確認手順

①ELBアクセス確認
②EC2インスタンス停止確認
③RDSインスタンスフェールオーバー確認

構築手順

①仮想ネットワーク作成

以下の仮想ネットワークを構築する。

  • ネットワーク情報
入力項目 内容 備考
VPC 10.0.0.0/16
PublicSubnet#1 10.0.31.0/24 EC2インスタンス用
PublicSubnet#2 10.0.32.0/24 EC2インスタンス用
PrivateSubnet#1 10.0.33.0/24 DB用
PrivateSubnet#2 10.0.34.0/24 DB用

VPC作成

1.AWSマネジメントコンソールよりVPCを開く。

2.VPCダッシュボードより「VPCウィザードを起動」を開く。

3.VPC設定ウィザードが表示されるので、そのまま「選択」をクリック。

4.VPC、パブリックサブネットの必要情報を入力する。

入力項目 内容
IPv4 CIDR ブロック 10.0.0.0/16
VPC Web-VPC
パブリックサブネットのIPv4 CIDR 10.0.30.0/24
アベイラビリティーゾーン ap-northeast-1a
サブネット名 PublicSubnet#1

※上記以外は変更する必要なし

5.必要情報記載後、「VPCの作成」をクリック。

クリックすると、VPCが作成される。

サブネット作成

1.左から「サブネット」をクリック。

2.サブネットの画面より「サブネットを作成」をクリック。

3.サブネット作成画面にて、先ほど作成したVPCを選択する。

4.サブネットをそれぞれ作成する。

入力項目 内容 備考
PublicSubnet#1 10.0.31.0/24 VPC作成の際に作成済み
PublicSubnet#2 10.0.32.0/24 今回作成
PrivateSubnet#1 10.0.33.0/24 今回作成
PrivateSubnet#2 10.0.34.0/24 今回作成
  • PublicSubnet#2

  • PrivateSubnet#1

  • PrivateSubnet#2

5.サブネット追加設定完了後、「サブネットを作成」をクリック。

6.サブネットが作成されたことを確認。

以下の4つが存在することを確認。

ルートテーブルにサブネット追加

1.サブネット一覧より「PublicSubnet#2」のサブネットIDをクリック。

2.画面下のタブより「ルートテーブル」を選択し、「ルートテーブルの関連付けを編集」をクリック。

3.ルートテーブルの関連付けの編集画面より、対象のルートテーブルIDを選択する。

選択後、そのまま「保存」をクリック。

4.左よりルートテーブルを開き、対象のルートテーブルのサブネットの関連付けが「2サブネット」であることを確認。

5.対象サブネットの詳細画面を開き、下の画面より「サブネットの関連付け」を選択。サブネットの関連付けが問題ないことを確認。

②EC2インスタンス作成

1.AWSマネジメントコンソールより、「EC2」を開く。

2.EC2ダッシュボードより「インスタンスを起動」をクリック。

「インスタンスを起動」をクリックし、「インスタンスを起動」をクリック。

3.「1.AMIの選択」にて「AmazonLinux2」を選択。

4.「2.インスタンスタイプの選択」にて「t2.micro」を選択。

選択後、「次のステップ:インスタンスの詳細の設定」をクリック。

5.「ステップ3:インスタンスの詳細の設定」の画面にて以下を選択。

入力項目 内容 備考
ネットワーク Web-VPC 最初に作成したVPC
サブネット Web-VPC
パブリックサブネットのIPv4 CIDR 10.0.30.0/24

6.下にスクロールし、高度な詳細を設定する。

ユーザーデータの「テキストで」にチェックを入れ、以下のテキストをコピー&ペーストする。
※スクリプト内の構文が間違っていないことを確認して下さい。(間違えた場合、EC2インスタンスの設定が正常に完了しない)

スクリプト
#!/bin/bash

yum -y update
amazon-linux-extras install php7.4 -y
yum -y install mysql httpd php-mbstring php-xml

wget http://ja.wordpress.org/latest-ja.tar.gz -P /tmp/
tar zxvf /tmp/latest-ja.tar.gz -C /tmp
cp -r /tmp/wordpress/* /var/www/html/
chown apache:apache -R /var/www/html

systemctl enable httpd.service
systemctl start httpd.service

※WordPress等、必要なパッケージをインストールするスクリプトになります。

7.「ステップ3:インスタンスの詳細の設定」の設定完了後、「次のステップ:ストレージの追加」をクリックする。

8.「ステップ4:ストレージの追加」の画面に遷移後、「次のステップ:タグの追加」をクリックする。

9.「ステップ5:タグの追加」にて「別のタグを追加」をクリックし、以下のように入力する。

入力項目 内容 備考
キー Name
Web01 EC2の名前

入力完了後、「次のステップ:セキュリティグループの設定」をクリックする。

10.「ステップ6:セキュリティグループの設定」にて以下のように設定する。

  • セキュリティグループの割り当て/セキュリティグループ名
項目 設定 備考
セキュリティグループの割り当て 新しいセキュリティグループを作成する 該当のラジオボタンにチェック
セキュリティグループ名 web-security
説明 web-security

  • ルール
タイプ プロトコル ポート範囲 ソース IPアドレス 説明
SSH TCP 22 マイIP PCのIPアドレス
※自動で設定される
HTTP TCP 80 カスタム 0.0.0.0/0,::/0
HTTPS TCP 443 カスタム 0.0.0.0/0,::/0

※HTTPSは使わないが、念のために開ける。

設定完了後、「確認と作成」をクリックする。

11.「ステップ7:インスタンス作成の確認」にて設定に誤りがないか確認。

確認後、「起動」をクリックする。

12.キーペア作成のポップアップが表示されるので、「キーペアのタイプ」を「RSA」とし、キーペアのダウンロードを実施する。(キーペア名は任意)

※こちらのキーペアのダウンロードを逃すと二度とログインできるタイミングがないため、必ずキーペアをダウンロードしておく。

ダウンロード後、「インスタンスの作成」をクリック。

13.インスタンスの作成処理が走るので、少し待つ。

14.インスタンス一覧にて作成したインスタンスのステータスが「実行中」になることを確認。

実行中であることを確認後、パブリックIPv4アドレスをコピーし、ブラウザの別タブのURL欄に入力する。

ブラウザに入力するIPアドレス(例)
3.113.13.186

15.以下のようにWordPressの画面が表示されることを確認する。

③RDSインスタンス作成

セキュリティグループ作成

1.EC2ダッシュボードの右より「セキュリティグループ」をクリックする。

2.セキュリティグループ一覧の画面より「セキュリティグループの作成」をクリックする。

3.「セキュリティグループを作成」にて以下のように入力する。

項目 設定 備考
セキュリティグループ名 db-security
説明 web-security セキュリティグループ名と同じ
VPC vpc-06********* 本手順にて作成したVPC(Web-VPC)

4.下にスクロールし、インバウンドルールを入力。

タイプ プロトコル ポート範囲 ソース IPアドレス 説明
MySQL/Aurora TCP 3306 カスタム sg-xxxxxx(web-security)
※「②EC2作成」手順にて作成したセキュリティグループを選択

5.インバウンドルール入力後、「セキュリティグループを作成」をクリックする。

6.セキュリティグループが作成されたことを確認。

サブネットグループ作成

1.AWSマネジメントコンソールより「RDS」を開く。

2.RDSダッシュボードの左より「サブネットグループ」をクリックする。

3.「DBサブネットグループを作成」をクリックする。

4.「サブネットグループの詳細」にて以下のように入力する。

入力項目 内容 備考
名前 db-subnet
説明 RDS for MySQL
VPC Web-VPC 本手順にて作成したVPC

5.「サブネットを追加」にて以下を設定する。

  • アベイラビリティゾーンの設定

以下の2つのアベイラビリティゾーンを設定する。

・ap-northeast-1a
・ap-northeast-1c

  • サブネット

以下の2つのサブネットを選択する。

・PrivateSubnet#1(10.0.32.0/24)
・PrivateSubnet#2(10.0.33.0/24)

6.「選択したサブネット」の部分を確認し、問題がなければ「作成」をクリックする。

7.サブネットグループが作成されることを確認する。

データベース作成

1.RDSダッシュボードの左より「データベース」をクリックする。

2.「データベースの作成」をクリックする。

3.データベースの作成の画面に遷移する。

  • 「データベース作成方法を選択」にて「標準作成」を選択する。

  • 「エンジンのオプション」にて「MySQL」を選択する。

  • 「エディション」のバージョンは「MySQL 8.0.25」を選択する。

  • テンプレートは「無料利用枠」を選択する。

  • 設定の部分は以下のように入力する。
入力項目 内容
DBインスタンス識別子 Rds01
マスターユーザー名 admin
マスターパスワード 任意のパスワード
パスワードを確認 マスターパスワードと同じパスワードを入力

※「マスターユーザー名」と「マスターパスワード」は後ほど使用するため、メモ帳等に控えておく。

  • DBインスタンスクラスはそのままで問題なし。

  • ストレージの部分もそのままで問題なし。

  • 接続の設定は以下のように入力する。
入力項目 内容 備考
Virtual Private Cloud(VPC) Web-VPC 本手順で作成したVPC
サブネットグループ db-subnet 先ほど作成したDBのサブネットグループを選択
パブリックアクセス なし 外に向けては公開しない。

  • VPCセキュリティグループは「既存の選択」にチェックを入れ、以下のように設定する。
入力項目 内容 備考
既存のVPCセキュリティグループ db-security 先ほど作成したDB用のセキュリティグループを選択
アベイラビリティゾーン ap-northeast-1a

※セキュリティグループの変更方法

「default」のセキュリティグループを「×」で削除する。

「db-security」を選択する。

「db-security」が選択されていることを確認する。

  • 追加設定の部分はデフォルトで問題なし。

  • データベース認証の部分は「パスワード認証」に設定する。

  • 追加設定の部分を以下のように設定する。
入力項目 内容 備考
最初のデータベース名 wordpress
DBパラメータグループ default.mysql8.0
オプショングループ default.mysql8.0

  • 「バックアップ」「モニタリング」「ログのエクスポート」は以下のようにチェックを外した状態にする。

  • メンテナンスの部分はデフォルトで問題なし

  • 全て入力完了したら、「データベースの作成」をクリックする。

4.データベースの作成が開始する。

※10分ぐらいかかります。

5.作成したデータベースの詳細画面を確認し、ステータスが「利用可能」になっていることを確認する。

④ELB作成

ターゲットグループ作成

1.AWSマネジメントコンソールより「EC2」をクリックする。

2.EC2ダッシュボードより「ターゲットグループ」をクリックする。

3.ターゲットグループ一覧より「Create target group」をクリックする。

4.「Choose a target type」にて「Instances」を選択する。

※EC2インスタンス単位でロードバランシングするため。

5.下にスクロールし、ターゲットグループ名等を入力する。

入力項目 内容 備考
Target group name web-target
Protocol/Port HTTP/80
VPC Web-VPC
Protocol version HTTP1

6.「Helth checks」にて以下のように入力する。

入力項目 内容 備考
Health check protocol HTTP
Health check path /wp-includes/images/blank.gif

7.Interval(間隔)を6秒に変更し、ページ下の「Next」をクリックする。

8.起動しているインスタンスにチェックを入れ、80ポートであることを確認し、「Include as pending below」をクリックする。

9.「Review targets」にて対象のインスタンスが「Pending」になっていることを確認し、「Create target group」をクリックする。

10.ターゲットグループの作成に成功したことを確認する。

セキュリティグループ作成

1.EC2ダッシュボードの左より「セキュリティグループ」をクリックする。

2.「セキュリティグループを作成」をクリックする。

3.セキュリティグループの設定画面に遷移する。

  • 基本的な詳細画面を以下のように設定する。
入力項目 内容 備考
セキュリティグループ名 elb-security
説明 elb-security セキュリティグループ名と同名
VPC vpc-xxxxx 本手順で作成したVPC(Web-VPC)

  • インバウンドルールを以下のように設定する。

  • 「セキュリティグループを作成」をクリックする。

4.セキュリティグループが作成できたことを確認する。

ロードバランサー作成

1.EC2ダッシュボードの左メニューより「ロードバランサ」をクリックする。

2.「ロードバランサーの作成」をクリックする。

3.「Application Load Balancer」の部分の「create」ボタンをクリックする。

4.ロードバランサー作成前の設定を実施する。

  • ロードバランサー名などを設定
入力項目 内容 備考
Load balaner name web-elb ロードバランサー名
Schema Internet-facing 外部に接続する
※「Internal」は内部接続
IP address type IPv4

  • マッピング設定

以下のように設定する。

ap-northeast-1a:PublicSubnet#1
ap-northeast-1c:PublicSubnet#2

  • セキュリティグループ設定

先程作成した、ELB用のセキュリティグループ(elb-security)を設定する。

※セキュリティグループ設定方法

・「default」のセキュリティグループの右の「✖︎」をクリックし、削除する。

・先程作成したELB用のセキュリティグループを選択する。

・ELB用のセキュリティグループが選択されていることを確認する。

  • ターゲット選択画面にて先程作成したターゲット(web-target)を選択する。

  • 設定に問題がないことを確認し、「Create Load Balancer」をクリックする。

5.ロードバランサーの作成が完了したことを確認。

6.先程のターゲットグループの画面に遷移し、「web-target」の「targets」を確認する。

Health statusが緑表示で「helthy」になっていることを確認する。

⑤WordPress初期設定

1.ブラウザの別タブを開き、先程作成したEC2インスタンス(Web01)のパブリックIPアドレスを入力する。

以下の画面が表示される。

2.データベース情報を入力する。

入力項目 内容 備考
データベース名 wordpress 「③RDS作成」で設定したデータベース名
ユーザー名 admin 「③RDS作成」で設定したデータベースのユーザー名
パスワード xxxxxxx 「③RDS作成」で設定したデータベースのパスワード
データベースのホスト名 xxxxx.xxxxxx 「③RDS作成」で作成したDBのエンドポイント

※テーブル接頭辞はデフォルトでOK

入力後、「送信」をクリックする。

3.「インストール実行」をクリックする。

4.必要情報を入力する。

入力項目 内容 備考
サイトのタイトル テストページ 任意のタイトルをつける。
ユーザー名 admin WordPressの管理画面にログインするためのユーザー名
パスワード xxxxxxx WordPressの管理画面にログインするためのパスワード
メールアドレス 任意のメールアドレス
検索エンジンでの表示 チェックを入れる。

入力後、「WordPressをインストール」をクリックする。

5.「成功しました」と表示されることを確認し、ログインをクリックする。

6.「4.必要情報を入力する。」にて設定したユーザー名/パスワードを入力し、ログインする。

7.WordPressの管理画面が表示されることを確認する。

⑥AMI作成

1.EC2のインスタンス一覧の画面にアクセスする。

対象のインスタンス(Web01)にチェックを入れ、「アクション」→「イメージとテンプレート」→「イメージを作成」と選択する。

2.「イメージを作成」にて以下のように設定する。

入力項目 内容 備考
イメージ名 web-ami
イメージの説明 web-ami イメージ名と同様
再起動しない チェックを外す AMI作成時にEC2 インスタンスの再起動が発生する

3.「イメージの作成」をクリックする。

4.左メニューより「AMI」をクリック。

5.AMIが作成完了するまで待つ。

  • 作成中の状態

ステータスが「pending」の状態

  • 作成完了の状態

ステータスが「available」の状態

⑦2つ目のEC2インスタンスの作成

1.作成したAMIを右クリックし、「起動」をクリックする。

2.「ステップ2:インスタンスタイプの選択」にて「t2.micro」を選択する。

選択後、次のステップをクリックする。

3.「ステップ3:インスタンスの詳細の設定」にて設定する。

  • ネットワークの設定をする。
入力項目 内容 備考
ネットワーク Web-VPC
サブネット PublicSubnet#2
自動割り当てパブリックIP 有効

- 「次のステップ」をクリックする。

4.「ステップ4:ストレージの追加」はデフォルトのまま「次のステップ」をクリックする。

5.「ステップ5:タグの追加」にて以下のように入力する。

入力項目 内容 備考
キー Name
Web02 EC2の名前

入力後、「次のステップ」をクリックする。

6.「ステップ6:セキュリティグループの設定」にて先程作成したセキュリティグループ「web-security」を設定する。設定後、「確認と作成」をクリックする。

7.インスタンス作成前の設定が問題ないことを確認し、「起動」をクリックする。

8.1台目のインスタンス作成時に作成したキーペア「WEB-KEY」を選択し、「インスタンスの作成」をクリックする。

9.インスタンスの作成が開始する。

10.インスタンス作成が完了すると、以下のようになる。

⑧2つ目のEC2インスタンスをELBに登録

1.EC2ダッシュボードの左メニューより「ロードバランサー」をクリックする。

2.対象のロードバランサー「web-elb」にチェックを入れる。

3.下の画面にて「リスナー」タブを選択し、転送先のターゲット「web-target」をクリックする。

4.ターゲットグループの画面に遷移するので、「web-target」をクリックする。

5.「Targets」タブより「Register Targets」をクリックする。

6.2台目のインスタンス(Web02)を選択し、「Include as pending below」をクリックする。

7.Web2が追加されたことを確認し、「Register pending targets」をクリックする。

8.「Targets」にWeb02が追加され、2台とも緑表示で「healthy」になることを確認する。

⑧RDSインスタンスのマルチAZ配置化

1.RDSダッシュボードにてデータベースをクリックし、作成したデータベース「Rds01」をクリックする。

2.「可用性と耐久性」にて「スタンバイインスタンスを作成する」にチェックを入れ、「続行」をクリックする。

3.変更のスケジューリングにて「すぐに適用」にチェックを入れ、「DBインスタンスを変更」をクリックする。

4.しばらく待つと、DBインスタンスの変更が完了する。

※20分程時間がかかります。

完了すると、ステータスが「利用可能」になる。

試験・確認手順

①ELBアクセス確認

ELBアクセス確認

1.EC2ダッシュボードの左メニューより「ロードバランサー」をクリックする。

2.対象のロードバランサ「web-elb」にチェックを入れる。

3.下の説明タブをクリックし、DNS名をコピーする。

4.ブラウザにて別タブを開き、コピーしたDNS名をURL欄にペーストする。

以下のテストページが表示されることを確認。

ログ確認

1.TeraTerm等のターミナルソフトを用意し、作成した2つのEC2インスタンスにSSHログインする。

SSH接続する場合は、以下が必要
・EC2インスタンスのパブリックIPアドレス
・ダウンロードしたキーペア
※ログインする際は、ユーザー名が「ec2-user」でパスワードはなしとなります。
※パブリックIPアドレスは、EC2インスタンスの詳細画面より確認可能

2.SSHログイン後、2つのEC2インスタンスにて以下コマンドを実行する。

ログ監視コマンド
sudo tail -f /var/log/httpd/access_log

※コマンドを流した状態にする。

3.「①ELBアクセス確認」にて開いたURLを再度開く。

※開いている場合はページをリロードする。

4.どちらかのEC2インスタンスにて以下のログが出力されることを確認。

アクセスログ
10.0.31.194 - - [15/Oct/2021:07:27:16 +0000] "GET / HTTP/1.1" 200 12645 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36"

以下ログはロードバランサーのヘルスチェック時のログになります。

ヘルスチェックログ
10.0.31.194 - - [15/Oct/2021:07:28:01 +0000] "GET /wp-includes/images/blank.gif HTTP/1.1" 200 43 "-" "ELB-HealthChecker/2.0"

※何回かリロードすると、両方のEC2インスタンスにてアクセスログが出力される。

5.ターミナル画面から抜ける。

「Ctrl+C」にてログ出力を止める。

ログ出力停止(Ctrl+C)
10.0.30.244 - - [15/Oct/2021:07:29:37 +0000] "GET /wp-includes/images/blank.gif HTTP/1.1" 200 43 "-" "ELB-HealthChecker/2.0"
^C
[ec2-user@ip-10-0-30-190 ~]$

以下コマンドにてターミナル画面から抜ける。

終了コマンド
exit

②EC2インスタンス停止確認

1号機停止~起動

1.EC2インスタンス一覧より、1号機(Web01)を右クリックし、「インスタンスを停止 」をクリックする。

2.停止前のポップアップが表示されるため、「停止」をクリックする。

3.1号機(Web01)が停止されたことを確認する。

4.ブラウザにて「①ELBアクセス確認」にて開いたURLが開けるか確認する。

※ロードバランサーのDNS名になります。

5.対象のターゲットグループ(web-target)の詳細画面にて「Targets」タブをクリックし、1号機(Web01)が「unused」になっていることを確認する。

6.EC2インスタンス一覧の画面にて、1号機(Web01)を右クリックし、「インスタンスの開始」をクリックする。

7.1号機(Web01)のステータスが実行中になったことを確認。

8.対象のターゲットグループ(web-target)の詳細画面にて「Targets」タブをクリックし、1号機(Web01)が緑表示で「healthy」になっていることを確認する。

2号機停止~起動

1.EC2インスタンス一覧より、2号機(Web02)を右クリックし、「インスタンスを停止 」をクリックする。

2.停止前のポップアップが表示されるため、「停止」をクリックする。

3.2号機(Web02)が停止されたことを確認する。

4.ブラウザにて「①ELBアクセス確認」にて開いたURLが開けるか確認する。

※ロードバランサーのDNS名になります。

5.対象のターゲットグループ(web-target)の詳細画面にて「Targets」タブをクリックし、2号機(Web02)が「unused」になっていることを確認する。

6.EC2インスタンス一覧の画面にて、2号機(Web02)を右クリックし、「インスタンスの開始」をクリックする。

7.2号機(Web02)のステータスが実行中になったことを確認。

8.対象のターゲットグループ(web-target)の詳細画面にて「Targets」タブをクリックし、2号機(Web02)が緑表示で「healthy」になっていることを確認する。

③RDSインスタンスフェールオーバー確認

1.AWSマネジメントコンソールより「RDS」を開く。

2.左メニューより「データベース」をクリックする。

3.対象のデータベースを選択し、アクションから「再起動」をクリックする。

4.「フェールオーバーで再起動しますか?」にチェックを入れ、「確認」をクリックする。

※「フェールオーバーで再起動しますか?」にチェックを入れない場合は、フェールオーバーせずにそのまま再起動かかる。

5.データベースの再起動が完了するまで待つ。

  • 再起動中

  • 再起動後

6.ブラウザにて「①ELBアクセス確認」にて開いたURLが開けるか確認する。

7.データベース一覧より対象のデータベース(Rds01)をクリックする。

8.「ログとイベント」タブをクリックする。

9.以下のようなフェールオーバー実行時のログが存在することを確認する。

あとがき

以下の参考サイトを参考にWordPress環境を構築しましたが、非常に勉強になると感じました。
参考サイトを元に構築するのみであれば難しくはないですが、こちらの記事の執筆は3日程かかりました..orz
気になる方は、構築してみると勉強になると思います。

参考

スケーラブルウェブサイト構築 ハンズオン

Discussion