【AWS】Amazon AuroraでもWordPressは動くの?


この記事の目的

  • MySQLやPostgreSQLと互換性のあるAmazon AuroraでもWordPressが動作するか検証するため。

  • 執筆者自身がAWS初心者のため、自身の勉強も兼ねて。

先行者

WordPressをAmazon Auroraで動かしてみる

2015年の記事であり、AuroraがまだTokyoリージョンで使えなかった時の記事であるため、本記事執筆の意義は十分にあると思います。

WordPressの推奨環境

PHP バージョン 7.4 以上。
MySQL バージョン 5.6 以上、または MariaDB バージョン 10.1 以上。
HTTPS 対応

忙しい人のために

「こんな長い記事を読んでられないよ」という人のために結論から言います。
結論はAmazon AuroraでもWordPressは動きます。以上。

構成図

本記事で構成するシステムはこんな感じです。

Amazon Auroraを使ってWordPressを立ち上げてみよう

やってみよう。

VPCの作成

VPC

VPCのコンソールから右上のVPCの作成をクリックします。

名前タグを「My_VPC_1」、IPv4 CIDRブロックを「10.0.0.0/21」に設定します。
右下のVPCを作成をクリックするとVPCが作成されます。

サブネット

次にパブリックサブネットを作成します。
サブネットの項目に移り、右上のサブネットを作成をクリックします。

VPC IDを先ほど作成した「My_VPC_1」に、サブネット名を「PublicSubnet1」、アベイラビリティゾーンを「アジアパシフィック(東京)/ap-northeast-1a」、IPv4 CIDRブロックを「10.0.0.0/24」に設定します。
右下のサブネットを作成をクリックするとパブリックサブネットが作成されます。

同様の手順でサブネット合計4つ作成します。
ちなみに新しいサブネットを追加で同じVPC内に複数のサブネットを同時に作成することができます。

VPC ID サブネット名 アベイラビリティゾーン IPv4 CIDRブロック
My_VPC_1 PublicSubnet1 アジアパシフィック(東京)/ap-northeast-1a 10.0.0.0/24
My_VPC_1 PublicSubnet2 アジアパシフィック(東京)/ap-northeast-1c 10.0.1.0/24
My_VPC_1 PrivateSubnet1 アジアパシフィック(東京)/ap-northeast-1a 10.0.2.0/24
My_VPC_1 PrivateSubnet2 アジアパシフィック(東京)/ap-northeast-1c 10.0.3.0/24


RDSを起動するために、複数のアベイラビリティゾーンにまたがってサブネットを作っておかなければならないので、このようにサブネットを作成しています。 

EC2の作成

インスタンス

次にEC2インスタンスを作成していきます。
EC2のコンソールのインスタンスの項目に移ります。
右上のインスタンスを起動をクリックします。

AMIはAmazon Linux2を選択します。

インスタンスタイプはt2.microを選択して、次のステップをクリックします。

ネットワークは「My_VPC_1」、サブネットは「PublicSubnet1」、自動割り当てパブリックIPは「有効」に設定し、次のステップをクリックします。

ストレージはデフォルトのまま次のステップに移ります。

タグの設定は、キーを「Name」、値を「TestServer1」にします。次のステップに移ります。

新しいセキュリティグループを作成します。セキュリティグループ名は「Web-SG-1」、説明も同じです。
SSHのみだとWebサーバが公開できないので、HTTPを追加します。
確認と作成をクリックします。

確認画面です。問題がなければ起動をクリックします。

キーペアを作成します。ここでは新しいキーペアを作成し、キーペア名を「Qiita_test_keypair」とします。
キーペアをダウンロードし、PCの任意の場所に保存します。
インスタンスの作成をクリックします。これでEC2インスタンスの完成です。

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

このままだとEC2インスタンスがインターネットに接続できないのでVPCにインターネットゲートウェイを追加します。
VPCのコンソールに移動し、インターネットゲートウェイの項目を開きます。
右上のインターネットゲートウェイの作成をクリックします。

名前タグを「My-IGW」とします。
インターネットゲートウェイの作成をクリックします。

このままだとまだVPCに接続されていないので、右上のVPCへアタッチをクリックします。

使用可能なVPCに、作成した「My_VPC_1」を選択し、インターネットゲートウェイのアタッチをクリックします。

まだVPCがインターネットに向けられていないので、My_VPC_1のルートテーブルを編集します。
ルートテーブルの項目を開きます。My_VPC_1を選択し、ルートの編集をクリックします。

ルートを追加します。送信先を「0.0.0.0/0」とし、ターゲットを先ほど作成した「My-IGW」を選択します。
ルートの保存クリックします。

これでEC2インスタンスがインターネットにつながりました。SSH接続ができるようになります。

RDSの作成

サブネットグループ

RDSのコンソールに移動し、サブネットグループの項目を開きます。
右上のDBサブネットグループの追加をクリックします。

名前、説明を「My_Subnet_Grp」とし、VPCを「My_VPC_1」を選択します。
アベイラビリティゾーンを「ap-northeast-1a」「ap-northeast-1c」とし、サブネットは「10.0.3.0/24」「10.0.4.0/24」を選択します。
作成をクリックするとサブネットグループが作成されます。

データベース

データベースを作成します。データベースの項目を開きます。
右上のデータベースの作成をクリックします。

「標準作成」を選択します。
Auroraで検証したいので「MySQL」ではなく「Amazon Aurora」を選択します。

WordPressの推奨環境がMySQL バージョン 5.6 以上なのでこの条件に合うようにバージョンを選択します。
テンプレートは「開発/テスト」を選択します。
マスターユーザー名を「wordpress」とし、マスターパスワードを入力します。

DBインスタンスサイズは「バースト可能クラス」、「db.t3.small」を選択します。
Auroraレプリカは作成しません。
VPCは「My_VOC_1」、サブネットグループは「my_subnet_grp」、パブリックアクセス可能は「なし」を選択します。

VPCセキュリティグループは「新規作成」を選択し、セキュリティグループ名は「My-RDS-SG1」とし、アベイラビリティゾーンは「ap-northeast-1a」を選択します。
データベース名は「wordpress」と入力します。

RDSの設定は以上で問題ないので、下へスクロールして、データベースの作成をクリックします。

データベースのセキュリティグループの編集

デフォルトの設定のままだとRDSのセキュリティ面に問題があるので、DBに侵入できるのはWebサーバのみに設定します。
VPCのコンソールに移動し、セキュリティグループの項目を開きます。
My-RDS-SG1を選択し、インバウンドルールを編集をクリックします。

ソースの部分を「Web-SG-1」にして、ルールを保存をクリックします。

WordPressのインストール

ではWordPressをEC2インスタンスにインストールしていきます。
執筆者の環境はWindowsなので、TeraTermやRLoginなどのターミナルソフトを使用してもよいのですが、今回はAWSの機能を使ってブラウザ上でログインしていきます。
EC2インスタンスを選択して、上方の接続をクリックします。

接続を押せば接続します。この場合、インスタンスを作成した際に作ったキーペアを用いて公開鍵認証を行うことはありません。

まずはphpをインストールしてみましょう。

[ec2-user@ip-10-0-0-197 ~]$ sudo yum -y install php

試しにphpのバージョンを確認してみましょう。

[ec2-user@ip-10-0-0-197 ~]$ php -v
PHP 5.4.16 (cli) (built: Oct 31 2019 18:34:05) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

WordPressの要件がPHPバージョン7.4以上なので、インストールされたものは要件を満たしていないですね。
なのでこうします。

[ec2-user@ip-10-0-0-197 ~]$ sudo amazon-linux-extras install php7.4 -y

amazon-linux-extrasとはAmazon Linux2で使えるyumコマンドみたいなものです。
詳しくはこちら

あとはMySQL、Apache、その他必要なモジュールをインストールします。
php-mbstringは日本語などのマルチバイト文字列を用いる際に必要なモジュール、php-xmlはXMLを扱うのに必要なモジュール、gdはイメージを動的に操作するライブラリ、php-gdはそのGDモジュールです。

[ec2-user@ip-10-0-0-197 ~]$ sudo yum -y install mysql httpd php-mbstring php-xml gd php-gd

Apacheを起動して、自動起動設定をオンにします。

[ec2-user@ip-10-0-0-197 ~]$ sudo systemctl start httpd.service
[ec2-user@ip-10-0-0-197 ~]$ sudo systemctl enable httpd.service

WordPressをインストールしていきます。
WordPressのtarballファイルをダウンロードします。
WordPressの公式ダウンロードページはこちら

[ec2-user@ip-10-0-0-197 ~]$ wget https://ja.wordpress.org/latest-ja.tar.gz 

tarballファイルを展開します。

[ec2-user@ip-10-0-0-197 ~]$ tar xvzf latest-ja.tar.gz 

展開されたwordpressディレクトリがカレントディレクトリに存在しているので、wordpressディレクトリの中身をApacheのドキュメントルート(/var/www/html)にコピーします1
/var/www/html以下の階層はApache自身のapacheユーザが操作するので、デフォルトの所有ユーザ(rootユーザ)のままでは操作できません。したがって、所有ユーザ、グループをapacheに変更する必要があります。

[ec2-user@ip-10-0-0-197 ~]$ sudo cp -r wordpress/* /var/www/html
[ec2-user@ip-10-0-0-197 ~]$ sudo chown -R apache:apache /var/www/html

WordPressの初期設定

EC2インスタンスのパブリックIPアドレスにブラウザからアクセスします。
すると以下のページが表示されます。
さあ、始めましょう!をクリックします。

データベース名を「wordpress」、ユーザー名を「wordpress」、パスワードはRDSを作成した際に設定したパスワードを入力します。
データベースのホストは次の画像を参照。
送信をクリックします。

RDSの作成したデータベースを開きます。database-1-instance-1のエンドポイントをデータベースのホストに入力します。

インストール実行します。

必要情報を入力してWordPressをインストールします。

ログインします。


ログインできました。

動作確認です。適当に記事を投稿して終了。

おわりに

動きましたね。
Amazon Auroraは標準的なMySQLと比べて5倍のスループットの性能をがあるので、Amazon Auroraを選ばない理由はないですね。
(追記:料金を度外視すればの話ですが。)

Auroraについてのより詳しい記事
https://dev.classmethod.jp/articles/developers-io-2019-in-osaka-aurora-or-rds/


この記事はAWS初学者を導く体系的な動画学習サービス「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com


  1. 執筆者自身はwordpressディレクトリごとコピーしたせいで「index.phpが見つからないヨ」というエラーが出て小一時間潰れたので注意してください。