Udemy初夏のビッグセール開催中(~5/23)人気教材が1,300円~

AWS S3とCloudFrontでWordPressブログをホストする方法

WordPressブログを運営している方はレンタルサーバやEC2などでホストしていると思います。しかしこれらには利用料金がかかったり脆弱性があったりと何かと懸念点があります。そこでAWSのS3の静的ホスティング機能を使ってWordpressをホストする方法があるので紹介します。もちろん、独自ドメインも使用できます。

目次

S3でWordpressをホストするメリットとデメリット

EC2やレンタルサーバでWordpressをホストした場合とS3でホストした場合で比較したメリットデメリットを紹介します。

比較項目 S3 EC2・レンタルサーバ
料金
(数円~数十円程度)

(契約によるが、500円程度~1000円程度)
サーバのレスポンス
(爆速。表示するHTMLファイルが
静的ファイルとして格納される)

(サーバスペックによる。毎回DBから
HTMLファイルを動的生成しているので
DBへの負荷が大きい)
 大量アクセスへの対応
(CloudFrontというCDNで対策も可能。
静的HTMLを配信しているため負荷が少ない)
×
(サーバスペックによるが、DBから
読み取り、動的生成しているため弱い)
 記事執筆の手軽さ
(一度サーバで執筆してから
静的ページにしてS3にアップロード
するため手間がかかる)

(Wordpressの管理コンソールに
ログインすればいつでも執筆可能)
セキュリティ
(どんな攻撃をされても
管理コンソールに侵入
されることはない。
ファイルは読み取り専用になる
ので不正に更新などされようがない)
×
(広く普及しているがゆえに様々な
攻撃にさらされる)
コメント欄等の動的処理 ×
(実装不可能。コメント欄や問い合わせ欄は
メールや他SNSなどのものを使用する
必要がある。)

(Wordpressの機能として提供されている
ものはすべて使用可能)
総評(主観) ランニングコストと表示速度とセキュリティに圧倒的なメリットがある。しかし頻繁にブログを更新する場合は静的ファイルの出力、S3への配置が必要なので少々不便かもしれない。 手軽にブログを更新できるが、素人だと脆弱性をつかれた攻撃にさらされる可能性がある。安いサーバのプランだとスペックが低いので表示速度がネック。同時アクセスが多いとDBサーバが落ちるので復旧が必要。

S3でWordpressをホストする作業の流れ

本手順では記事執筆にEC2を使用する流れで記載します。EC2にWordpressを導入する際には以下記事をご参照ください。

また、S3オリジンに対してCloudFrontを設定してSSL化(Httpsで接続できるように)しておきます。手順を以下記事で紹介しています。

以下の手順はWordPressの執筆環境があり、CloudFront-S3の設定ができていることを前提に記載します。前提条件が整っていない方は上記2つの記事を参考に環境を整えてください。

STEP
記事を執筆するためのEC2を起動

既に記事を執筆するWordPressが動く環境がある方はそちらでも問題ないです。EC2を使用するのであれば記事を執筆していない期間は停止しておけば料金がかからないので便利です。ストレージ(EBS)も毎回スナップショット→復元を行えばランニングコストは0になります。

STEP
EC2にSSHログインしてDBのIPアドレスを変更する

EC2は起動するたびにIPアドレスが変更されます。WordPressはページを動的生成している関係上、サイトURLとHOMEの設定を変更する必要があります。この設定はWordpressの管理画面からも行えるのですが、上記のサイトURLが異なっていると管理画面にすらログインができないのでSSHから直接DBの値を書き換えます。

STEP
WordPress管理コンソールにログインして記事を執筆する

普段通り記事の執筆を行います。

STEP
WordPressのプラグイン[Simply Static]で静的ファイルを出力

記事を静的ファイルのHTMLにしてくれるプラグインがあるので使用します。これを実行すると作業ディレクトリにHTMLファイルが出力します。

STEP
画像ファイルを作業ディレクトリにコピー

試しにSimply Staticを使用してみたところ、画像も作業ディレクトリにコピーしてくれるのですが、中には壊れてしまっているものがあったので手動で上書きコピーします。

STEP
出力されたHTMLファイルのリンク先ドメインを修正

Simply Staticで出力されるHTMLファイルに記載されているリンク(画像や記事内のリンク)はSTEP2で設定したHOMEのアドレスがルートとなっています。これからS3にアップロードするのでS3のドメインに変更します。(CloudFront経由でアクセスする場合はCloudFrontのドメイン、独自ドメインを設定する場合は独自ドメインで書き換えます。)

STEP
S3に記事をアップロード

S3に記事(HTMLファイル)や画像をアップロードします。syncコマンドを使用することで今回修正した差分だけアップロードできるのでS3のPUT料金も抑えることができます。(かかって数円程度かと。)

構成を絵にするとこんな感じです。

S3を使ったブログホストのアーキテクチャ図

STEP1 記事を執筆するためのEC2を起動

WordPressが入ったEC2を起動するだけです。マネジメントコンソールから対象のEC2を選択して起動します。EBSをスナップショットにしている方は復元してEC2にアタッチします。もともとWordPressの執筆環境がある方はそちらを使用すればOKです。手順が良くわからない方は以下をご参照ください。

STEP2 EC2にSSHログインしてDBのIPアドレスを変更する

EC2にSSHログインします。筆者はTeratermを使用しています。やり方がわからない方は以下の記事をご参照ください。

SSHログインしたら以下コマンドを流してDBにログインします。

mysql -u root -p [初期設定時のDB名]

筆者が紹介したWordPressインストールのスクリプトをそのまま実行した場合、[初期設定時のDB名]はdb01になるかと思います。パスワードを聞かれるので入力してログインします。
そして以下のコマンドを実行してサイトURLとHOMEの設定を変更します。

update wp_options set option_value='http://[EC2のパブリックIP]/' where option_name='siteurl';
update wp_options set option_value='http://[EC2のパブリックIP]/' where option_name='home';

EC2のパブリックIPはマネジメントコンソールから確認できます。プライベートIPではなく、パブリックIPなので間違えないようにしてください!

ちなみに、ワードプレス設定の以下の項目をDBから直接変更したような感じです。

WordPress画面のサイトアドレス確認

http://[EC2のパブリックIP]にアクセスしてサイトにアクセスできればOKです。接続できない場合はEC2のセキュリティグループでHTTP接続(80番ポート)を許可していることを確認してください。

STEP3 WordPress管理コンソールにログインして記事を執筆する

http://[EC2のパブリックIP]/wp-admin にアクセスしてWordPress管理コンソールにログインします。そしていつも通り記事を執筆してください。

STEP4 WordPressのプラグイン[Simply Static]で静的ファイルを出力

プラグインからSimply Staticを検索してインストール・有効化を行ってください。

WordPressのプラグインSimplyStatic

有効化を行うとSimply Staticがサイドメニューに表示されます。

WordPressの画面からSimplyStaticを確認する

Simply Staticの設定を行います。

SimplyStaticの設定ボタン

相対パスを選択して保存します。他はデフォルトのままでOKです。

SimplyStaticの設定画面

設定出来たら「静的ファイルを生成する」を押下します。記事のボリューム次第では時間がかかるかもしれません。完了するとログに完了と出ます。

SimplyStaticでの静的ファイル生成

STEP5 画像ファイルを作業ディレクトリにコピー

前ステップで実施した静的ファイル生成でも画像はコピーされているのですが、筆者が動作確認した中ではコピーされていないものや壊れているものがあったので手動コピーをしておきます。
WordPressをホストしているサーバ(EC2など)にSSHログインします。そして以下のコマンドを実行してSimply Staticが吐き出したファイルが格納されているディレクトリに移動します。

cd /var/www/html/wp-content/plugins/simply-static/static-files/

ここでlsコマンドを実行して以下のようなファイルがあることを確認します。数字の部分はランダムのようです。

simply-static-1-1685286436

ない場合は、前ステップの静的ファイル生成が失敗していたり、設定で出力先ディレクトリが変更されていると思うので確認してみてください。

以下のコマンドを実行してSimply Staticが出力した画像ファイル(や動画ファイル)を削除します。

コマンド中のsimply-static-1-1685286436 の数字部分はご自身の生成されたディレクトリの番号に書き換えてください。

sudo rm -r /var/www/html/wp-content/plugins/simply-static/static-files/simply-static-1-1685286436/wp-content/uploads/*

そして以下コマンドを実行してWordPress執筆時にアップロードした画像ファイルなどをコピーします。

sudo cp -ra /var/www/html/wp-content/uploads/20* /var/www/html/wp-content/plugins/simply-static/static-files/simply-static-1-1685626347/wp-content/uploads/

STEP6 出力されたHTMLファイルのリンク先ドメインを修正

Simply Staticで出力されるHTMLファイルに記載されているリンク(画像や記事内のリンク)はSTEP2で設定したHOMEのアドレスがルートとなっています。今回、最終的なドメインはCloudFrontからのアクセスになるのでCloudFrontのドメインに変更しておきます。CloudFrontに独自ドメインを設定している場合、そのドメインに変更します。

以下コマンドを実行して生成されたHTMLがあるディレクトリに移動します。再三になりますが、数字部分はご自身のものに書き換えてください。

cd /var/www/html/wp-content/plugins/simply-static/static-files/simply-static-1-1685626347

そして以下コマンドを実行してサーバのIPアドレスをCloudFrontのドメインに書き換えます。

sudo find ./* -name '*.*' -exec sed -i 's@[EC2のパブリックIP]@[CloudFrontのドメイン]@g' {} \;

また、CloudFront経由だとhttps接続になるので以下コマンドでhttp://の部分をhttps://に書き換えます。

sudo find ./* -name '*.*' -exec sed -i 's@http:@https:@g' {} \;

以上で静的ファイルの準備は完了です。

STEP7 S3に記事をアップロード

aws configureコマンドを実行してアクセスキーを設定する、もしくはEC2にロールを割り当てるなどしてS3へのPUTアクセスができるようにしておきます。ここではS3アクセスのための権限の設定方法は割愛します。対象バケットへのフルアクセス権限があると良いと思います。
以下コマンドを実行して対象バケットが表示されればちゃんと設定できています。(厳密にはPUT権限があるかはわかりませんが。。)

aws s3 ls

以下コマンドを実行して静的HTMLが格納されているディレクトリに移動します。数字部分は書き換えてください。

cd /var/www/html/wp-content/plugins/simply-static/static-files/simply-static-1-1685626347

そして以下コマンドを実行してS3に静的ファイルを一式コピーします。

aws s3 sync /var/www/html/wp-content/plugins/simply-static/static-files/simply-static-1-1685626347/ s3://[バケット名]/

ログが出力されてS3にファイルがコピーされるはずです。以降、記事を更新する場合は差分アップロードになるので初回ほどは時間がかからず、S3のPUT料金も低減されるはずです。

CloudFrontのエンドポイントにアクセスするとWordPressで作成したブログが表示されているかと思います。

PR
当ブログはWordPressテーマSWELLを使用しています。非常に使いやすく、簡単にプロのようなデザインを使えるのでお勧めです!!

SWELL – シンプル美と機能性両立を両立させた、圧巻のWordPressテーマ

ランキング

ランキングに参加しています。クリックして応援いただけると嬉しいです。
にほんブログ村 IT技術ブログ クラウドコンピューティングへ
にほんブログ村
AWSランキング
AWSランキング

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次