様々な選択肢
これまで多くのWordPressサイトの構築を行ってきましたが、インフラ構成については案件によって多種多様です。
お客様のご要望に応じて、すでに契約されているレンタルサーバー上に構築したり、指定されたOCIやAWSでの構築を行います。
共有レンタルサーバー上で運用する場合、良くも悪くも自由にカスタマイズできるものではないため、それほど迷うポイントはありませんが、自由度の高いクラウドサービスとなるとコストとの兼ね合いもあり、最適解を考えるのが難しくなります。
例えば、AWSで考える場合の選択肢は下記のようなものでしょうか。
- Lightsailインスタンスによる運用
- WordPressインスタンスを選択するか、OS Onlyから構築するか
- 同一インスタンスでDBを持つか、RDSやManaged DBを導入するか
- EC2インスタンスによる運用
- 冗長化は必要か
- 同一インスタンスでDBを持つか、RDSを導入するか
- CloudFrontは導入するか
監視やオートスケールなども含めると考えうる組み合わせは無数にあります。
WordPressを選択したサイトの特性
WordPressという技術を選択したWebサイトの特性としては、コーポレートサイトや採用サイト、情報メディアのように情報発信を目的としたWebサイトであることが多く、読み込みが中心で大量の書き込みを捌くような必要性はほとんどの場合でありません。
また、コンテナオーケストレーションツールの導入が必要となるようなWebサイト・アプリケーションはそもそもWordPressで構築することもないでしょう。
一方で、ページの参照が一時的に集中したり、記事数が膨大なWebサイトの場合は行儀の悪い巡回ボットによってリソースが枯渇するリスクに晒されます。
構成の全体像
コストの縛りがなければ、スペックや構成について選択肢が広がりすぎてしまうので、ここでは毎月の費用が4000円以内1に収まるコスト感で考えます。
- DNS / CDN / WAF: Cloudflare(Free plan)
- アプリ実行: Lightsail WordPress Instance(Nginx / Redis / PHP 8.5)
- DB: Lightsail Managed DB(MySQL)
- メール送信: SES(SMTP)
- デプロイ: GitHub Actions -> S3 -> CodeDeploy -> Lightsail
Cloudflareは無料枠の範囲での利用を想定しており、主に費用がかかるのはLightsail InstanceとLightsail Managed DBとなります。
Lightsail Instanceは月額3.5USD〜選べますが、今回はDual-stack(IPv4アドレスサポート)の月額7USDとしました。
- Lightsail Instanceのスペック(月額$7)
-
Dual-stack
1GB Memory
2vCPUs Processing
40GB SSD Storage
- Lightsail Managed DBのスペック(月額$15)
-
40GB SSD
1GB RAM
これでおおよそ月額$222となり、一般的なWordPressで用いられるレンタルサーバーの費用感とそれほど差がありません。
Cloudflareについて
AWSを用いる場合、CDNはCloudFrontが真っ先に思いつきますが、小規模サイトにおいてはCloudflareの無料枠で利用できる範囲が広く、コストメリットが大きいです。
また、フォームのスパム防止には、Google reCAPTCHAなどもありますが、Cloudflare Turnstileはこちらも無料枠で利用できます。
高速化
WordPressのWebサイトによく見られる障害はプラグインや独自テーマから発行されるSQLの負荷が大きく、キャッシュ機構も適切に働いていない場合に処理しきれずデータベースのエラーが発生しているようなものです。
ここでは、データベースインスタンス・Webサーバー・オブジェクトキャッシュの3つの観点からこれを回避するようにしています。
Lightsail Managed DB
今回の構成では、データベースを同一のインスタンス上に置かず、障害を切り分けしやすいようにLightsail Managed DBを用いています。
また、このようなマネージドサービスを利用することでバックアップやアラートの仕組みも簡単に利用できます。
同じAWSのサービスであるRDSやAuroraの利用でも同じ目的を達成できますが、コスト面と手軽さからここではLightsail Managed DBを選定しています。
Nginx
Lightsailのインスタンスを立ち上げるときにblueprintの選択によっては、WebサーバーはApacheとなりますが、メモリ効率やキャッシュ構成の柔軟性を考慮し、ここではWordPress導入済のインスタンスではなく、OS onlyのAmazon Linux 2023から始めてNginxを手動インストールする想定です。
Redis
WordPressでサイトを構築する場合、オブジェクトキャッシュはデフォルトのメモリ上の一時保持ではなく、Redisなどを導入しページを跨いで保持するようにすれば、サーバー負荷軽減や高速化に大きく貢献します。
安定性の改善を目的に単純なスケールアップを検討する前にRedisによるPersistent Object Cacheの導入を検討すると良いでしょう。
マネージドサービスもありますが、WordPressを設置する同一のLightsailへのインストールで十分に効果を発揮します。
CI/CD
CI/CDはGitHub Actionsを想定しています。
各種Lintのチェックとデプロイを設定すると良いでしょう。
単純にrsyncでデプロイする場合はGitHub ActionsからのSSH接続を許容するようファイヤーウォールを設定したり、秘密鍵をSecretsで管理する必要が生じるため、長期アクセスキーの利用も避けられるOIDCを用いて認証を行い、AWS CodeDeployを実行します。
まとめ
手軽で低コストの構成ですが、多くの一般的なWordPressサイトでは十分に動作する構成だと思います。
ここではNginxの設定やCloudflareの設定などの詳細には踏み込んでいませんが、負荷が高まった際の改善余地としては、以下のようなポイントが考えられます。
- CloudflareのHTMLキャッシュを有効化する
- Nginxのキャッシュを有効化する
- ボトルネックとなる処理のオブジェクトキャッシュの扱いを見直す
WordPressに特化したレンタルサーバーで簡易に運用するのも手ですが、同じくらいの費用でチューニングできる余地を残した今回のような構成も良いでしょう。
