AWSでWordPressを冗長化してみた

2021/02/24に公開

AWS学習中したのでWordPress冗長化構成を試してみた。

AWSオンライン学習サイト AWS CloudTech で学習中。
冗長化構成時のオブジェクト整理の為、少し手順を変えて作成してみた。

作りたい物のイメージ

作成手順

  1. VPC作成
  2. インターネットゲートウェイ作成
  3. VPCへアタッチ
  4. ルートテーブル変更
  5. セキュリティグループ作成
  6. サブネット作成
  7. EC2インスタンス作成
  8. ターゲットグループ作成
  9. ロードバランサー作成
  10. RDS作成
  11. WordPressをインストール
  12. ec2テンプレート作成

1.VPC作成

以下の内容でVPCを作成(下記以外は初期値でOK)

項目
名前タグ wp-VPC
IPv4 CIDR ブロック 10.0.0.0/21

2.インターネットゲートウェイ作成

インターネットゲートウェイを作成

項目
名前タグ wp-IGW

3.VPCへアタッチ

VPCとインターネットゲートウェイを関連付け(VPCへアタッチ)

インターネットゲートウェイを選択後、アクションメニューから「VPCにアタッチ」を選択

前の手順で作成したVPC「wp-VPC」を選択

4.ルートテーブル変更

VPCのメインルートテーブルにルートを追加

送信先 ターゲット
0.0.0.0/0 wp-IGW
wp-VPCのメインルートテーブルを選択
「ルートの編集」をクリック
ルートの編集

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

wp-WEB-SG作成

項目
セキュリティグループ名 wp-WEB-SG
説明 wp-WEB-SG
VPC wp-VPC
インバウンドルール
SSHとHTTPをすべてから許可する。
タイプ ソース
---- ----
HTTP 任意の場所
SSH 任意の場所
wp-WEB-SG

wp-RDS-SG作成

項目
セキュリティグループ名 wp-RDS-SG
説明 wp-RDS-SG
VPC wp-VPC
インバウンドルール
MYSQL/Auroraをwp-WEB-SGから許可する。
タイプ ソース
---- ----
MYSQL/Aurora wp-WEB-SG
wp-RDS-SG

6.サブネット作成

冗長化構成の為、アベイラビリティーゾーンを2つに分けて以下の内容でサブネットを4つ作成する。

VPC ID サブネット名 アベイラビリティーゾーン IPv4 CIDRブロック
wp-VPC wp-public-subnet-1 ap-northeast-1a 10.0.0.0/24
wp-VPC wp-public-subnet-2 ap-northeast-1c 10.0.1.0/24
wp-VPC wp-private-subnet-1 ap-northeast-1a 10.0.2.0/24
wp-VPC wp-private-subnet-2 ap-northeast-1c 10.0.3.0/24
作成例:wp-public-subnet-1
すべて作成後

7.EC2インスタンス作成

まずEC2インスタンスを1つ作成し、WEBサーバー・WordPressのインストールと設定を行います。

wp-web-server-1作成

ステップ1

項目
AMI Amazon Linux 2
ステップ1

ステップ2

項目
インスタンスタイプ t2.micro
ステップ2

ステップ3

項目
ネットワーク wp-VPC
サブネット wp-public-subnet-1
自動割り当てパブリック IP 有効
ステップ3

ステップ4

そのまま

ステップ5

項目
Name wp-web-server-1
ステップ5

ステップ6

項目
セキュリティグループ wp-WEB-SG
ステップ6

ステップ7

ここでは作成済みのキーを設定。

8.ターゲットグループ作成

ロードバランサーがターゲットにするEC2インスタンスを入れる箱?的な感じのものを作成。

wp-WEB-TG

EC2メニューからターゲットグループを選択し「Create target group」をクリック。
まだ英語ですw

Create target group
以下を設定。

項目
Choose a target type Instances
Target group name wp-WEB-TG
VPC wp-VPC
Health check path /readme.html
ターゲットグループの設定

9.ロードバランサー作成

クライアントからのリクエストを受け、ターゲットグループ内にあるEC2インスタンスに振り分け処理を行う。
交通整理してる人のイメージ。

wp-WEB-LB

EC2メニューからロードバランサーを選択し「ロードバランサーの作成」をクリック。

ロードバランサーの作成

ロードバランサーの種類を選択

ここではアプリケーションロードバランサーを選択。

ロードバランサーの種類を選択

手順 1:ロードバランサーの設定

項目
名前 wp-WEB-LB
VPC wp-VPC
アベイラビリティーゾーン ap-northeast-1a, ap-northeast-1c
サブネット wp-public-subnet-1, wp-public-subnet-2

手順 2:セキュリティ設定の構成

そのまま

手順 3:セキュリティグループの設定

項目
セキュリティグループ wp-WEB-SG

手順 4:ルーティングの設定

前に作成したターゲットグループを指定する。

10.RDS作成

サブネットグループ作成

wp-RDS-SUBNET

項目
名前 wp-RDS-SUBNET
説明 wp-RDS-SUBNET
VPC wp-VPC
アベイラビリティゾーン ap-northeast-1a, ap-northeast-1c
サブネット 10.0.2.0/24, 10.0.3.0/24

データベースの作成

冗長化構成の為、マルチAZ配置で作成。
RDSを起動したままにすると43.48USDくらいかかるらしいので要注意。

項目
データベースの作成方法を選択 標準作成
エンジンのタイプ MySQL
テンプレート 開発/テスト
DBインスタンス識別子 wp-database-1
マスターユーザー名 wordpress
マスターパスワード 任意
パスワードを確認 マスターパスワードと同じ
DBインスタンスクラス バースト可能クラス(tクラスを含む):db.t2.micro:以前の世代のクラスを含める
マルチAZ配置 スタンバイインスタンスを作成する
VPC wp-VPC
サブネットグループ wp-rds-subnet
VPCセキュリティグループ 既存の選択:wp-RDS-SG
最初のデータベース名 wordpress

エンドポイントを確認

WordPress設定時にエンドポイントの情報が必要なため覚えておく。

11.WordPressをインストール

初期設定

wp-web-server-1のパブリックIPを確認

SSHで接続

コマンドプロンプトで接続

ssh -i wp-keypair.pem ec2-user@【wp-web-server-1のパブリックIP】

ログイン後、下記コマンドを実行。(アップデート、phpインストール、Apacheインストール)

sudo su -

yum -y update

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

systemctl enable httpd.service
systemctl start httpd.service

終わるまで少々お待ち。

WordPressのダウンロードと配置

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

ブラウザへパブリックIPを入力

http://【wp-web-server-1のパブリックIP】

WordPressの初期画面が表示されればOK。
そのままWordPressの初期設定を始めます。

WordPressの設定

項目
データベース名 wordpress
ユーザー名 wordpress
パスワード RDS作成時に設定したパスワード
データベースのホスト名 RDSエンドポイント
テーブル接頭辞 wp_

データベースへの接続が可能なら下記画面が表示されるので「インストール実行」をクリック。

必要情報の設定

下記情報を入力し「WordPressをインストール」をクリック

項目
サイトのタイトル AWSブログ
ユーザー名 wordpress
パスワード お好きなのをどうぞ
メールアドレス お好きなのをどうぞ

成功しました!

下記画面が表示されればWordPressのインストール完了です。

もう一度ブラウザへパブリックIPを入力

http://【wp-web-server-1のパブリックIP】


WordPressのようこそ画面が表示されます。

12.EC2イメージを作成

wp-web-server-image

wp-web-server-1のインスタンスを停止

wp-web-server-1からイメージを作成


以下の値を入力

項目
イメージ名 wp-web-server-image
イメージの説明 wp-web-server-image

作成したイメージからwp-web-server-2を作成

マイAMIからwp-web-server-imageを選び、サブネットにwp-public-subnet-2を選択する。
Nameタグにwp-web-server-2を指定する。
上記以外の設定はwp-web-server-1と同じものを選択する。

項目
AMI wp-web-server-image
サブネット wp-public-subnet-2
Name wp-web-server-2

wp-web-server-1を起動する

wp-web-server-1,2どちらにアクセスしているか表示を追加

それぞれのEC2インスタンスへアクセスし下記表示内容を変更する。

wp-web-server-1

再起動するとパブリックIP変更されるので再度確認すること。

ssh -i wp-keypair.pem ec2-user@【wp-web-server-1のパブリックIP】

接続後

sudo su -
sed -i "15i echo('WebServer1');" /var/www/html/index.php

wp-web-server-2

ssh -i wp-keypair.pem ec2-user@【wp-web-server-2のパブリックIP】

接続後

sudo su -
sed -i "15i echo('WebServer2');" /var/www/html/index.php

データバースに保存されている情報の変更

wp-web-server-1 or 2へアクセスし下記のコマンドを実行

mysql -h 【RDSエンドポイント】 -u wordpress -p
パスワードを入力
USE wordpress
UPDATE wp_options SET option_value = 'http://【ロードバランサーのDNS名】' WHERE option_name IN ('siteurl', 'home');

ターゲットグループ追加

ターゲットグループ「wp-WEB-TG」にwp-web-server-2を追加する。
【Register targets】をクリック

「Available instances」の「wp-web-server-2」を選択し、【Include as pending below】をクリックする。

【Register pending targets】をクリックしターゲットグループを更新

「Status」が「healthy」になるまで少し待つ。

アクセス確認

ロードバランサーのDNS名へアクセスしWordPressを表示する。
左上にアクセスしているWebServer名が表示されているので更新しながら確認する。
「WebServer1」「WebServer2」がランダムに切り替わることを確認する。

終わり

RDSを冗長化構成で作成すると月額費用が5000円くらいかかりそうなのでしっかりと削除してください。

Discussion