📚

aws上にwordpressを構築する方法

2022/11/03に公開

今回行ったハンズオンはこちら
AWS Hands-on for Beginners 〜 スケーラブルウェブサイト構築編 〜

出来上がる構成図はこちら

構築手順

  1. tokyoリージョンにvpc関連サービスを作成
サービス IP AZ 備考
vpc 10.0.0.0/16 指定なし なし
public subnet 10.0.0.0/24 1a なし
public subnet 10.0.1.0/24 1c なし
private subnet 10.0.2.0/24 1a なし
private subnet 10.0.3.0/24 1c なし
internet gateway 指定なし 指定なし vpcにアタッチ
route table for internet 指定なし 指定なし default gatewayにigw追加
public subnet 2つアタッチ
route table for internal 指定なし 指定なし private subnet 2つアタッチ
  1. ec2を起動

ec2の設定(デフォルトからの変更点)

  • key pairなし
  • security groupは新規でインバウンドルールにhttp追加
  • public IPアドレス自動割り当て有効化
  • user dataを設定
#!/bin/bash

# パッケージの更新&apacheとmysqlをインストール
yum -y update
yum -y install php httpd mysql

# phpのメジャーバージョンが7で無いならインストールする
PHP_VERSION=`php -v | head -n 1 | awk '{print $2}' | awk -F "." '{print $1}'`
while [  ${PHP_VERSION} -ne 7 ]
do
amazon-linux-extras install php7.4 -y
PHP_VERSION=`php -v | head -n 1 | awk '{print $2}' | awk -F "." '{print $1}'`
done

# php関連のパッケージをインストール
yum -y install php-mbstring php-xml

# wordpressを/tmp配下にダウンロード
wget http://ja.wordpress.org/latest-ja.tar.gz -P /tmp/
# 解凍
tar zxvf /tmp/latest-ja.tar.gz -C /tmp
# wordpressをwebのパスにコピー&ディレクトリ権限をapacheに変更
cp -r /tmp/wordpress/* /var/www/html/
chown apache:apache -R /var/www/html

systemctl enable httpd.service
systemctl start httpd.service

インスタンスが起動したらパブリックIPアドレスをブラウザに打ち込みこの画面が出ることを確認する

  1. rdsインスタンスを作成
    下準備
  • サブネットグループを作成
AZ サブネット
1a 10.0.1.0/24(private subnet 1a)
1c 10.0.3.0/24(privaet subnet 1c)
  • セキュリティーグループを作成
    インバウンドルールにmysql/auroraを選択、リソースにec2に紐付けたセキュリティグループを選択。※ec2のIPを指定すると、ec2が今後増えた時に随時追加しなければならないため。

  • rdsインスタンス作成
    デフォルトからの変更点・注意点

  • mysqlの無料利用枠を選択

  • subnetはprivate subnet 1aを選択

  • 先ほど作成したサブネットグループとセキュリティグループを選択

  • 後ほど有効に変更するが、一旦マルチaz配置は無効のまま

  • 自動バックアップは無効にする

  • パスワードを自動生成した場合はインスタンス作成直後のポップアップから詳細を選択して確認する(忘れると後で確認することができなくなる)

  1. ロードバランサーを作成

下準備

  • ターゲットグループを作成

    • ヘルスチェックのパス: 「/wp-includes/images/blank.gif」に設定
    • 先ほどのec2をターゲットに登録
  • セキュリティーグループを作成
    インバウンドルールにhttpを選択して追加する

ロードバランサーを作成

  • application load balancerを選択
  • 以下マッピングの設定
AZ サブネット
1a 10.0.0.0/24(public subnet 1a)
1c 10.0.2.0/24(public subnet 1c)
  • 先ほどのセキュリティグループを設定
  • リスナーとルーティングに先ほどのターゲットグループを選択

albのdns名をブラウザに貼り付けてワードプレスのwellcome画面が出ることを確認する

  1. wordpressの初期設定
  • 以下のdb初期設定を入力
database名 ユーザー名 パスワード DBのホスト DBテーブルのプレフィックス
rdsのdatabase名 rdsのusername rdsのusername rdsのdns名 wp_
  • インストールの実行ボタン押下
  • wordpressのユーザー情報を入力する
  • wordpressにログインする

ここまで来ればwordpressのサイトがブラウザ上で確認できる

  1. ec2を冗長化
  • 起動中のec2からamiイメージを取る
    注意
    「再起動しない:有効化」にチェックが入っていない == ec2を再起動するという意味(わかりずらい)
  • amiからec2を起動する。(先ほどのuser dataスクリプトは入力しない。それ以外は前回のec2と同じ設定)
  • albのターゲットグループに作成したec2を追加する
  1. rdsの冗長化
  • 起動中のrdsを選択して変更ボタン押下
  • 可用性と耐久性の項目のスタンバイインスタンスを作成するにチェックを加えて変更する
  1. 可用性の確認
  • ec2の片方インスタンスを停止し、正常にサイトが表示されること
  • rdsを再起動(フェイルオーバーを適用)し、サイトが表示されること
    • イベントログからフェイルオーバーされたことを確認できる

リソースの削除

全てのリソースを削除

  1. rdsを削除
  2. サブネットグループを削除
  3. ec2を削除
  4. amiを削除(EBSスナップショットも削除)
  5. albを削除
  6. ターゲットグループを削除
  7. vpc関連の削除

まとめ

これでec2とrdsの冗長構成が作成できました。
ただ、wordpressを運用するなら画像などの静的リソースはs3など別の場所に保存しないといけない。
保存先がec2だとELB次第ではアクセスされたec2に保存されていない可能性があるから。
またログイン情報を持ったwebアプリケーションの場合はセッション管理も意識しないといけない。
Elastic Cacheなども学習する必要がある。
冗長構成を個人アプリ等で運用するにはオーバースペックな気がする。

Discussion