はじめに
CYBIRD Advent Calendar 2025 の17日目担当、@cy_yusuke_itoです。
16日目は@cy-naullさんのJMeterで直前のサンプラーが成功したか確認する方法でした。
JMeterでの負荷試験で特定パターンのみの結果抽出ができるようになってました。
概要
AWS Lightsailとは
AWS Lightsailは、手軽にWordPressをデプロイできる便利なサービスです。しかし、本番環境として利用する際には、パフォーマンスとセキュリティの強化が不可欠です。
本記事では、Lightsailインスタンスを オリジン(コンテンツの源泉) とし、Amazon CloudFrontを CDN(コンテンツデリバリーネットワーク) として組み合わせることで、以下のメリットを享受する環境を構築する具体的な手順を、インフラエンジニアの視点から解説します。
高速化と負荷軽減: CloudFrontのエッジキャッシュ機能により、ユーザーのアクセスを分散・処理し、Lightsailインスタンスへの負荷を大幅に軽減し、表示を高速化します。
セキュリティ強化: LightsailのIPアドレスをユーザーから直接見えないように隠蔽し、WAF連携(オプション)などの基盤を整えます。
1. LightSailでWordPressインスタンスを構築
今回は、WordPressがプリインストールされたLightsailでWebサーバーを立ち上げます。
- プラットフォームの選択: Linux/Unix
- 設計図の選択: アプリ+OS WordPress
- SSHキー: 新規作成または既存のキーをアップロード
-
インスタンスプランを選択
- ネットワークタイプを選択: デュアルスタック (IPv4/IPv6 両対応)
- サイズを選択: 要件にあったものを選択
-
静的IPをセット
- インスタンス作成後、必ず静的IPを割り当てます。IP名は「
インスタンス名-IP」といった形でわかりやすい名称にします。
- インスタンス作成後、必ず静的IPを割り当てます。IP名は「
2. Route53とCloudFrontの連携設定
最終的なドメインアクセスをCloudFront経由にするための、重要なステップです。
2-1. Route53に間接的なオリジンドメインを設定
LightSailインスタンスを直接指すための、間接的なドメイン名(例: wp-dev.あなたのドメイン名)を設定します。
- Lightsailインスタンスの詳細画面から、IPv4とIPv6の両方の静的IPアドレスをコピーします。
- Route53の対象ホストゾーンにて、以下のレコードを作成します。
- Aレコード: 間接ドメイン名に、コピーしたIPv4アドレスを設定。
- AAAAレコード: 間接ドメイン名に、コピーしたIPv6アドレスを設定。
2-2. ACM (AWS Certificate Manager)で証明書を取得
HTTPS通信を実現するため、ユーザーがアクセスする最終ドメイン(例: www.あなたのドメイン名)のSSL/TLS証明書をACMで取得します。
この時、必ずバージニア北部リージョン (us-east-1)で取得してください。
CloudFrontで使用するためには、バージニア北部リージョンではないと使用できません!
2-3. CloudFrontディストリビューションの構築
CloudFrontでのCDN設定を行います。
-
オリジンドメイン: 間接的なドメイン名(
wp-dev.あなたのドメイン名)を設定します。 -
プロトコルポリシー:
Redirect HTTP to HTTPSを選択。 -
代替ドメイン名 (CNAME): 最終ドメイン名(例:
www.あなたのドメイン名)を設定します。 - カスタムSSL証明書: ACMで取得した証明書をセットします。
2-4. Route53にて最終ドメインをCloudFrontに紐付け
ユーザーがアクセスする最終ドメイン(例: あなたのドメイン名)を、CloudFrontにエイリアスとして紐付けます。
- Route53のホストゾーンに戻ります。
- 以下のエイリアスレコードを作成します。
-
Aレコード: エイリアスを有効化し、値としてCloudFront ディストリビューションのドメイン名(例:
d1234abc.cloudfront.net)を指定。 -
AAAAレコード: エイリアスを有効化し、値としてCloudFront ディストリビューションのドメイン名(例:
d1234abc.cloudfront.net)を指定。
-
Aレコード: エイリアスを有効化し、値としてCloudFront ディストリビューションのドメイン名(例:
3. LightSail側でのWordPress設定(SSL対応)
LightSailの管理機能を使って、WordPress自体に正しいドメイン情報とSSLを認識させます。
- Lightsailインスタンスの詳細画面から、「WordPress ウェブサイトをセットアップする」セクションに進みます。
- 設定内容を確認・変更します。
-
ドメイン: 最終的に使用するドメイン(例:
あなたのドメイン名)を設定します。 - DNSゾーン: サードパーティ
- 静的IP: 既に割り当たっているものが選択されていることを確認
-
SSL/TLS 証明書: 間接的なドメイン名(
wp-dev.あなたのドメイン名)を設定し、LightSail独自のSSL証明書を作成します。これはCloudFrontからLightSailへの通信を暗号化するために使用します。
-
ドメイン: 最終的に使用するドメイン(例:
4. WordPressとDBのクリーンアップ
デフォルトのDBユーザーではなく、専用のユーザーを設定し、セキュリティと運用性を高めます。
4-1. DBのrootユーザーのパスワードを確認
SSHでLightsailインスタンスに接続し、bitnamiユーザーのデフォルトパスワードを確認します。
cat /home/bitnami/bitnami_application_password
4-2. DBに接続し専用ユーザーを作成
MySQLにrootユーザーでログインし、WordPress専用のデータベースとユーザーを作成します。
sudo mysql -u root -p # パスワードは4-1で確認したものを入力
ログイン後、以下のSQLコマンドを順次実行します。
-- 1. 新しいデータベースを作成
CREATE DATABASE wordpress_db;
-- 2. WordPress専用のユーザーを作成し、任意の強力なパスワードを設定
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'your_strong_password_here';
-- 3. 作成したデータベースに対して、ユーザーに全ての権限を付与
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost';
-- 4. 権限を反映
FLUSH PRIVILEGES;
-- 5. MySQLから退出
EXIT;
4-3. WordPress設定ファイル(wp-config.php)の更新
データベースの接続情報を、新しく作成したユーザー情報に書き換えます。
sudo vi /opt/bitnami/wordpress/wp-config.php
以下の行を編集します。
// ... 中略 ...
// ** MySQL 設定 - この下にある二行を変更します ** //
/** WordPress のデータベース名 */
define('DB_NAME', 'wordpress_db'); // 新しいDB名
/** MySQL データベースのユーザー名 */
define('DB_USER', 'wp_user'); // 新しいユーザー名
/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'your_strong_password_here'); // 新しいパスワード
// ... 以下略 ...
ファイルを保存して閉じます。
5. 動作確認と最終調整
5-1.ブラウザで確認
最終ドメインにアクセスし、CloudFrontを経由してサイトが表示され、HTTPSで通信されていることを確認します。
5-2.WordPress管理画面
最終ドメインからログインし、「設定」->「一般」のURLが https://あなたのドメイン名 となっていることを確認します。
5-3.キャッシュプラグイン
CloudFrontのキャッシュ効率を最大化するため、キャッシュ系プラグイン(例: W3 Total Cache, WP Rocket)を導入し、CloudFrontを意識した設定(HTTPヘッダーの調整など)を行います。
5-4.セキュリティ対策
デフォルトのbitnamiユーザーを無効化し、新しい管理者ユーザーを作成するなど、運用上のセキュリティ対策を施します。
まとめ
この構成により、Lightsailの手軽な運用性はそのままに!
CloudFrontによる高いパフォーマンスとACMによる堅牢なセキュリティが追加されます。
本番運用に耐えうるモダンなWordPress環境として活用してみてください~。
最後に
明日のCYBIRD Advent Calendar 2025 は@pinkoroさんのApp Store Connect上のアプリ審査や配信状況の把握をSlack通知で効率化させた話です。
こちらもよろしければ是非!