AWSでWordPressを冗長化してみた
AWS学習中したのでWordPress冗長化構成を試してみた。
AWSオンライン学習サイト AWS CloudTech で学習中。
冗長化構成時のオブジェクト整理の為、少し手順を変えて作成してみた。
作りたい物のイメージ
作成手順
- VPC作成
- インターネットゲートウェイ作成
- VPCへアタッチ
- ルートテーブル変更
- セキュリティグループ作成
- サブネット作成
- EC2インスタンス作成
- ターゲットグループ作成
- ロードバランサー作成
- RDS作成
- WordPressをインストール
- 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