EC2とRDSの組み合わせでWordPressを動かす環境構築

AWS

はじめに

EC2、RDS用いたWordpressサイト構築のメモになります。
最終的にはALB経由でのオリジナルドメインアクセスを行います。

ネットワーク周り作成

VPC作成、IGW作成

・VPC作成、IGW作成後アタッチ

サブネット作成

・VPC内にパブリックサブネットx2、プライベートサブネットx2をそれぞれ別リージョンに作成

ルートテーブル作成

パブリックサブネット2つに関連づけたルートテーブル作成、デフォルトルートをIGWに向ける。

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

Web用SG:インバウンドに対し、SSH(22番)をフルオープン
DB用SG:インバウンドに対し、MYSQL(Aurora)の3306番をソースにWeb用SGを指定
ALB用SG:インバウンドに対し、HTTP(80番)をフルオープン

EC2作成

AmazonLinux2をパブリックのリージョンaに作成。パブリックIP自動割り当て有効
SGは事前に作成したWeb用SGを指定。

Apache、MySQLインストール

作成したEC2にて以下実施

#パッケージアップデート
sudo yum update -y

#Apacheインストール
sudo yum -y install httpd

#Apacheサービス確認、起動
sudo systemctl status httpd.service
sudo systemctl start httpd.service
sudo systemctl status httpd.service

#サービス自動起動設定確認
sudo systemctl enable httpd.service
#サービス自動起動にする。(enableと出ればOK)
sudo systemctl is-enabled httpd.service

#MySQLインストール
sudo yum -y install mysql

EIP

EIPを取得、EC2にアタッチ。EIPでアクセスし、Apacheのデフォルトページの表示を確認

オリジナルドメイン設定

やる事

通常お名前.comでドメイン取得した場合の問い合わせ順序は以下

  1. ユーザーがブラウザにドメイン名(例:example.com)を入力。
  2. TLD(.com)のオーソリティDNSサーバに問い合わせ。
  3. ドメイン名(example.com)の情報を管理しているオーソリティDNSサーバのアドレスをリゾルバに伝える。 お名前.comが管理している場合はお名前.com提供のネームサーバのアドレスが返される。
  4. リゾルバは、そのネームサーバ(お名前.comが提供するDNSサーバ)に直接問い合わせを行い、ドメイン名に対応するIPアドレスを取得。
  5. リゾルバは取得したIPアドレスをブラウザに返し、ブラウザはそのIPアドレスのサーバにアクセス。

これに対し、AWSが管理するDNSサーバで最終的にIPを管理させたいので、 お名前.comのサイトに問い合わせた際に回答するお名前.com提供のDNSサーバを、AWSのDNSサーバに変更する。

オリジナルドメイン取得

お名前.comなどのサービスでドメインを取得

Route53でホストゾーン作成

ホストゾーン作成


NSとSOAレコードがデフォで作成される。

現時点でdigコマンドで調べると、お名前.comのネームサーバが返ってくる

$ dig murabo.net NS +short
dns1.onamae.com.
dns2.onamae.com. 

NSレコードの値のアドレスをお名前.comのネームサーバ欄に転記

Aレコードを作成。IPアドレスはEC2の固定IPを指定

しばらくするとAレコードの値が返ってくる

$ dig murabo.net NS +short
ns-146.awsdns-18.com.
ns-1754.awsdns-27.co.uk.
ns-871.awsdns-44.net.
ns-1292.awsdns-33.org.

オリジナルドメインでアクセス可能になる。

RDS作成

事前準備

・プライベートサブネット2つを対象にしたサブネットグループ作成
・パラメータグループ作成(DBファミリーはmysql8.0)
・オプショングループ作成(エンジンはmysql、バージョンは8.0)

RDS作成

エンジン:MySQL
バージョン:8.0.34
可用性:シングル
最初のデータベース名:無し
VPC、サブネット、SG、パラメータグループ、オプショングループ:事前に準備したもの
他諸々は任意

EC2から接続

以下で接続可能。

$ mysql -h <RDSエンドポイント名> -u <ユーザ名> -p
Enter password: <パスワード>

接続する

$ mysql -h stg-rds-wp.cideiipkgauo.ap-northeast-1.rds.amazonaws.com -u admin -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.34 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 

WordPress構築

データベース作成

以下コマンドでデータベース作成

MySQL [(none)]> CREATE DATABASE <データベース名> DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

今回のデータベース名はwp_db

#データベース作成
MySQL [(none)]> CREATE DATABASE wp_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

#確認
MySQL [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wp_db              |
+--------------------+
5 rows in set (0.00 sec)

MySQL [(none)]> 

ユーザ作成、権限付与

以下コマンドで作成、権限付与

#ユーザ作成
MySQL [(none)]> CREATE USER '<ユーザ名>'@'%' IDENTIFIED BY '<パスワード>';

#権限付与
MySQL [(none)]> GRANT ALL ON <データベース名>.* TO '<ユーザ名>'@'%';

#反映
MySQL [(none)]> FLUSH PRIVILEGES;

やってみる。

#ユーザ作成
MySQL [(none)]> CREATE USER 'wp_user'@'%' IDENTIFIED BY 'wp_user_password';
Query OK, 0 rows affected (0.01 sec)

MySQL [(none)]>

#権限付与
MySQL [(none)]> GRANT ALL ON wp_db.* TO 'wp_user'@'%';
Query OK, 0 rows affected (0.00 sec)

MySQL [(none)]> 

#反映
MySQL [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

MySQL [(none)]> 

作成したユーザで接続する

$ mysql -h stg-rds-wp.cideiipkgauo.ap-northeast-1.rds.amazonaws.com -u wp_user -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.34 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 

WordPressインストール

amazon-linux-extras ツールを使用して、PHP 7.2 とその依存関係をインストール

#amazon-linux-extras ツールを使用して、PHP 7.2 とその依存関係をインストール
$ sudo amazon-linux-extras install -y php7.2

#PHPライブラリインストール
$ sudo yum install -y php php-mbstring

#最新のWordPressファイルをダウンロードして解凍
$ cd ~
$ wget https://ja.wordpress.org/latest-ja.tar.gz
$ tar xzvf latest-ja.tar.gz

#解凍したファイルをApacheの見える場所へコピー
$ cd wordpress/
$ sudo cp -r * /var/www/html/

#権限を変更
$ sudo chown apache:apache /var/www/html/ -R

#サービスを再起動
$ sudo systemctl restart httpd.service

WordPress設定

オリジナルドメインにアクセスすると、以下URLに遷移し、WordPressの管理画面が表示される

http://<オリジナルドメイン名>/wp-admin/setup-config.php

データベース名:DB用に作成したデータベース名
ユーザ名、パスワード:DB用に作成したユーザ名とパス
ホスト名:RDSのエンドポイント名
テーブル接頭語:そのまま

送信をクリックしたら、インストール実行をクリック!

以下記載してインストールをクリック
・サイトのタイトル:任意
・ユーザ名:ログイン用。新規に定義する。接続用ユーザとは別
・パスワード:任意に設定
・メールアドレス:自分のアドレスを入力
・検索エンジンでの表示:任意。どちらでも

成功したらこの画面

ログインをクリックするとログイン用URLに遷移するので設定した情報でログイン
URL:http://<オリジナルドメイン名>/wp-login.php

ダッシュボードに遷移した。

Webサーバ冗長化

AMIからWebサーバをもう一台起動

現在稼働しているWebサーバのAMIを取得。それを基にもう一台のWebサーバを起動する
パブリックIPは自動取得とする。

ALB作成

ターゲットグループを作成の上、ALBを作成。SGは事前に作成したものを利用。
ターゲットにはWebサーバ2台を含める。
ターゲットのステータスが正常になったらELBのDNS名でのアクセスが可能。

Route53を編集

AレコードがWeb1号機のEIPになっているので、これをALBのDNS名に変更する。

これでALBのDNS名とオリジナルドメインが紐づく構成となった。

WebサーバのSG変更

EC2のIPへも直接アクセス可能な状態になっており、セキュリティ面でも負荷分散の機能的にもよろしくないので、EC2へのHTTPアクセスはELB経由のみとする設定。
EC2のHTTPアクセスのソースをALBのSGに変更する。

変更前
変更後

タイトルとURLをコピーしました