サイトアイコン 協栄情報ブログ

AWS-マルチAZWordPressサイト構築練習【中編】


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

お疲れ様です。株式会社協栄情報システム3部所属の寺尾です。

今回はマルチAZWordpressサイト構築の中編になります。前編や続きに関しては下記のリンクをご参照ください。

また、全体の作業手順はWordPress環境構築手順をご確認ください。

それでは早速続きのほうをやっていきましょう。

2.データベース・ストレージ・ファイルシステム構築

まずはデータベース、ストレージ・ファイルシステムを構築していきます。そこで初めにそれらのデータを暗号化するための暗号化鍵の作成から行いましょう。

1.KMSで暗号化鍵の作成

1.まずはサービスからKMSを選び、キーの作成を選びます。

2.以下の設定値にしたがって作成します。

設定項目 設定値 理由
キーのタイプ 対象(AES-GCM) AWS内部のみで利用するので対象鍵を選ぶ
エイリアス KMS-Wordpress01-tr 入力内容は任意
キー管理者 自分のユーザー 自分でキーを削除するため
キーの使用アクセス
許可を定義
自分のユーザー 自分以外の使用を防止するため
タグ:Name KMS-Wordpress01-tr 入力は任意
タグ:Env WordPress01 入力は任意

キーのタイプについて




3.最後に設定を確認して作成しましょう。

4.無事作成できました。

2.サブネットグループ作成

次にサブネットグループを作成していきましょう。
サブネットグループはRDSを配置するサブネットのコレクションです。

1.サービスからRDS、サイドメニューからサブネットグループを選びます。

2.以下の設定値にしたがって作成します。

設定項目 設定値 理由
名前 RDS-sub-wordpress01 入力内容は任意
説明 For RDS 入力は任意
VPC VPC-Wordpress01 今回の環境ではVPCは一つのみ利用するため
アベイラビリティゾーン ・ap-northeast-3a
・ap-northeast-3c
プライベートサブネットのあるAZを選択
サブネット ・private-subNet-3a
・private-subNet-3c
RDSはプライベートサブネットに配置するため

3.無事作成できました。

3.RDS作成

次はRDSを作成していきましょう。

1.次にサイドメニューからデータベースを選択してデータベースの作成を選びます。

2.以下の設定値にしたがって作成します。

設定項目 設定値 理由
データベース作成方法 標準作成 詳細なオプションまで設定するため
エンジンのタイプ MySQL 今回は高い性能を求めていないので、Auroraよりもコストの低いMySQLを選択した
バージョン 8.0.20 安定性を考慮して最新版より一つ前のものを選んだ
テンプレート 開発/テスト 費用を抑えるため
DBインスタンス識別子 rds-wordpress01 入力内容は任意
大文字小文字は区別されない
マスターユーザー名 admin 入力内容は任意
パスワード 入力内容は任意
dbインスタンスサイズ db.t3.micro 大阪リージョンでもっとも安いものを選択
dbインスタンスサイズ 20 コストを考慮して最小値を選択
ストレージの自動スケーリング なし スケールアップした時のコストを考慮したため
VPC VPC-Wordpress01 今回の環境ではVPCは一つのみ利用するため
VPCセキュリティグループ SG-RDS-Wordpress01 RDS用に作成した物を利用
サブネットグループ rds-sub-wordpress01 プライベートサブネット二つに対するサブネットグループ
パブリックアクセス可能 なし 今回の環境ではEC2からのみ利用するため




3.RDSインスタンスの中のDBも以下の設定値に従って作成しておきましょう。

設定項目 設定値 理由
データベース名 wordpress01
DBパラメータグループ default.mysql8.0
オプショングループ default:mysql-8-0
IAM db認証 要件がないので認証はなし
自動バックアップの有効化 要件がないのでバックアップによるコスト増加を考慮してなし
暗号を有効化 要件がないので認証はなし
拡張モニタリングの有効化 費用が増加しないのであり
詳細度 60 要件がないのでデフォルト値の60
モニタリングロール デフォルト 要件がないのでデフォルト値
ログのエクスポート 全て□ 要件がないので費用を考慮しなし
マイナーバージョン自動アップグレードの有効化 マイナーアップグレードによる機能の追加やセキュリティ上の恩恵を受けるため
メンテナンスウィンドウ 設定なし 要件がないのでなし
削除保護の有効化 実際に何かを運用するわけではないので削除のしやすさを考慮してなし



4.作成完了です。数分待つと利用可能になります。

4.EFS作成

EFSを作成していきます。

1.サービスからEFS、サイドメニューからファイルシステム、そこからファイルシステムの作成を選びましょう。

2.以下の設定内容に従って作成していきます。

設定項目 設定値 理由
名前 EFS-Worpress01 入力は任意
VPC VPC-Wordpress01 接続先インスタンスを配置するVPCを選択
可用性と耐久性 リージョン 高可用性を実現するため

3.作成できました。

4.次にマウントターゲットを設定していきます。
作成したファイルシステムのネットワークタブから管理を選択します。

5.以下の設定内容になるようにマウントターゲットを修正します。

サブネット IPアドレス セキュリティグループ
public-subNet-3a 10.0.1.XXX SG-EFS-Wordpress01
public-subNet-3c 10.0.2.XXX SG-EFS-Wordpress01


6.二つのパブリックサブネットにマウントターゲットを配置できました。

5.S3バケット作成

次はApacheアクセスログのエクスポート先となるS3バケットを作成していきます。

1.サービス→S3→バケットの作成を選びましょう。

2.以下の設定値にしたがって作成します。

設定項目 設定値 理由
バケット名 s3-wordpress01-tr ・大文字は使えない
・バケット名は世界で一意である必要がある
リージョン ap-northeast-3 遠隔に保管する必要がないのでVPCと同一のリージョンとした
パブリックアクセスを全てブロック 今回はパブリックアクセスを行わないのでブロック
バケットのバージョニング 無効にする 要件がないのでコストを考慮し無効
タグ:Name s3-wordpress01-tr 入力は任意
タグ:Env WordPress01 入力は任意
サーバー側の暗号化 有効にする s3に保管するものは暗号化する要件があるので有効
暗号化キータイプ SSE-S3 KMSはログエクスポートタスクに対応していないため


3.作成出来たら、バケットポリシーにCloudWatchLogsからのアクセス許可を記述します。


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logs.ap-northeast-3.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::s3-wordpress01-tr"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logs.ap-northeast-3.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::s3-wordpress01-tr/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}

バケットポリシーについて

3.WEBサーバー構築

次はいよいよWordpressの稼働するWebサーバーの構築です!
今回はまず一個EC2インスタンスを稼働させ、そちらにCWAgentをインストールします。そしてそれをAMI経由でコピーして二個目のインスタンスを作成します。
早速作っていきましょう。

1.AWS Systems Managerでパラメータ作成

CloudWatchAgentの設定をインスタンスに接続せずに終わらせるために、あらかじめAWS Systems ManagerでCloudWatchAgentの設定パラメータを作成しておきます。
パラメータの詳細の設定項目を下記に示します。

設定項目 設定値 理由
名前 AmazonCloudWatch-linux-Wordpress01 CloudWatchAgentの設定パラメータとして使用する場合AmazonCloudWatchより始まる名前である必要がある
利用枠 標準 パラメータが標準サイズ内に収まり、パラメータポリシーの使用要件もないため
タイプ(データ型) 文字列 設定値が文字列で、暗号化要件もないため
詳細は下に記載 DiskUsedpercentメトリクスとApacheのアクセスログを出力するため
タグ:Name AmazonCloudWatch-linux-Wordpress01 入力は任意
タグ:Env WordPress01 入力は任意

1.AWS Systems Manager→パラメータストア→パラメータ作成へと進みます。

2.設定値にしたがって作成します。


3.作成に成功しました。

2.EC2インスタンス作成

以下の手順に従ってWebサーバーとなる二台のインスタンスを作成していきます。

1.サービスからEC2、サイドメニューからインスタンスを選び、インスタンスの作成を選びましょう。

2.今回はAmazonLinux2のイメージから作成していきます。

3.無料利用枠のt2.microを選びます。
大阪リージョンAZ3cではt2.microが利用できなかったので二台目のインスタンスはt3.microで作成しました。

4.下記の設定値にしたがって設定します

設定項目 設定値 理由
ネットワーク VPC-Wordpress01 今回の環境ではVPCは一つのみ利用するため
サブネット ・public-subNet-3a
・public-subNet-3c
Webサーバーはパブリックサブネットに配置するため
自動割り当てパブリックIP 有効 SSHでアクセスするため
IAMロール IRL-EC2-Wordpress01-tr CloudWatchAgentを稼働させるため
シャットダウン動作 停止 インスタンスを一時的に停止にする場面のため
終了保護の有効化 実際に運用しないことと削除のしやすさを考慮してなし
CloudWatch詳細モニタリング 要件にないので費用を考慮してなし
テナンシー 共有 占有する要件がないので費用を考慮してなし
クレジット仕様 CPUに高負荷がかかる予定ないので費用を考慮してなし
ネットワークインターフェイス 自動的に割り当て IPを指定する要件がないので自動割り当て

SSHアクセス用にパブリックIPは有効にしておきましょう。(サブネット設定で自動割り当てパブリックIPを有効にしているとデフォルトのままでも有効になっています)

5.ユーザーデータに後で記述するコマンドを入力しておきます。
こうする事でインスタンスを作成した時に自動的に入力しておいたコマンドが実行されます。

コマンド

#!/bin/bash
sudo yum install httpd -y
sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2
sudo yum install -y amazon-efs-utils
sudo mount -t efs -o tls fs-4b06c43e:/ /var/www/html/
echo 'fs-4b06c43e:/ /var/www/html efs tls,_netdev 0 0' | sudo tee -a /etc/fstab

cd /tmp/
sudo wget https://wordpress.org/latest.zip
unzip latest.zip
sudo mv wordpress/* /var/www/html/
sudo rm -rf wordpress/ latest.zip
sudo chown -R apache /var/www
sudo chgrp -R apache /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;
sudo systemctl enable httpd.service
sudo systemctl start httpd.service
wget https://s3.ap-northeast-3.amazonaws.com/amazoncloudwatch-agent-ap-northeast-3/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
sudo rpm -U ./amazon-cloudwatch-agent.rpm
sudo amazon-linux-extras install collectd
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c ssm:AmazonCloudWatch-linux-Wordpress01

6.EBSの選択です。
下記の設定値にしたがって設定します。

設定項目 設定値 理由
サイズ 8 費用を考慮し最小値
ボリュームタイプ gp3 gp2と比べて費用が安く、少ないボリューム同士の場合gp3の方が高速なため
IOPS 3000 費用を考慮し最小値
スループット 125 費用を考慮し最小値
暗号化 KMS-Wordpress01 EBS用に作成した物を使用します

gp3についての参考リンク → EBSのタイプはgp2からgp3に変更する

7.タグとセキュリティグループの設定です。
下記の設定値にしたがって設定します。

設定項目 設定値 理由
タグ:Name ・EC2-Wordpress01-1
・EC2-Wordpress01-2
入力は任意
タグ:Env WordPress01 入力は任意
セキュリティグループ SG-EC2-Wordpress01 EC2用に作成したものを選択


8.確認してキーペアを選び作成しましょう。キーペアはブログ外で作成したものを使用しました。


9.最後にしっかり情報が収集できているかCWからメトリクスを確認してみましょう。



10.上記の手順に従ってもう一台のインスタンスを作成しました。

4.ネットワーク構築

1.ALB作成

まずはALBから構築していきましょう。

1.サービスからEC2、サイドメニューからロードバランサーを選びます。

2.下記の設定項目にしたがって設定します。

設定項目 設定値 理由
ロードバランサーの種類 アプリケーションロードバランサー アプリケーション層でトラフィックを振り分けるため
名前 ALB-Worpress01 入力内容は任意
スキーム インターネット向け インターネットに公開するため
IPアドレスタイプ ipv4 今回はipv6を利用しないため
ロードバランサーのプロトコル/ポート http/80 https設定をWordpress上で行ってから設定するため一時的にhttp
IPアドレスタイプ ipv4 今回はipv6を利用しないため
VPC VPC-Wordpress01 接続先インスタンスを配置するVPCを選択
サブネット ・public-subNet-3a
・public-subNet-3c
インターネットと通信するALBはパブリックサブネットに配置する必要があるため
VPC VPC-Wordpress01 接続先インスタンスを配置するVPCを選択
可用性と耐久性 リージョン 高可用性を実現するため
タグ:Name ALB-Wordpress01 入力は任意
タグ:Env WordPress01 入力は任意
セキュリティグループ SG-ALB-Wordpress01 ALB用に作成したものを選択



セキュリティ警告は一旦無視して次に進みます。


6.ルーティングの設定をします。

設定項目 設定値 理由
ターゲットグループ 新しいターゲットグループ
名前 TGN-Worpress01 入力内容は任意
ターゲットの種類 インスタンス インスタンスにリクエストを振り分けるため
プロトコル HTTP VPC内部の通信は暗号化する要件がないため
ポート 80 VPC内部の通信は暗号化する要件がないため
ヘルスチェック
プロトコルバージョン HTTP1
プロトコル HTTP 要件がないためデフォルト
パス / 要件がないためデフォルト
ポート トラフィックポート 要件がないためデフォルト
正常のしきい値 5 要件がないためデフォルト
非正常のしきい値 2 要件がないためデフォルト
間隔 30 要件がないためデフォルト
成功コード 200、301 https通信を実装するとリダイレクトが挟まれ、301コードが返ってくるため
ターゲットの登録 ・EC2-Wordpress01-1
・EC2-Wordpress01-2
タグ:Name TGN-Wordpress01 入力は任意
タグ:Env WordPress01 入力は任意


7.作成したインスタンスを登録済みに追加しましょう。

8.確認して作成します。

9.ターゲットグループにタグを追加しました。

10.サイドメニューのセキュリティグループからALB用セキュリティグループを選び、一時的にhttpでアクセスするためにインバウンドルールを修正しましょう。

2.Route53作成

1.サービスからルート53、サイドメニューからホストゾーン、ホストゾーンの作成へと進んでいきます。

2.以下の設定値に従ってホストゾーンを作成します。(今回は練習のために設定値のみ記載していますが、実際にパブリックホストゾーンを利用するにはドメインの購入が必要になります)

設定項目 設定値 理由
ドメイン名 自分のドメイン名 入力内容は任意
説明 入力は任意
タイプ パブリックホストゾーン インターネットに公開するため
タグ:Name Route53-Wordpress01-tr 入力は任意
タグ:Env WordPress01 入力は任意

3.以下の設定値に従ってレコードを作成します。

設定項目 設定値 理由
レコード名 任意のレコード名 入力内容は任意
レコードタイプ Aレコード ALBに接続するためAWS内部ではエイリアスレコードとして扱うが、外部からはAレコードとして扱うため
ルーティングポリシー シンプルルーティング ルーティング先が一つしかないため
トラフィックのルーティング先 ・エイリアス
・Application Load BalancerとClassic Load Balancer
・大阪リージョン
・ALB-Worpress01
ALBに接続するため
タグ:Name Route53-Wordpress01-tr 入力は任意
タグ:Env WordPress01 入力は任意

今回はいったんここで区切ります。
ぜひ続きもご確認ください。

モバイルバージョンを終了