目次
はじめに
こんにちは、missi です。「AWS 環境に WordPress をなるべくお金をかけずに構築していく」のシリーズとして記事を書いています。このシリーズでは、「AWS 上に WordPress を構築するために必要なリソースを最小限に抑え、コストを抑える方法について」お届けしています。今回は「WordPress 実行環境で ALB 前に CloudFront を設定する」をテーマに CloudFront の設定に関して、ACM 証明書の作成からディストリビューションの作成とビヘイビアの設定などをご紹介したいと思います。
CloudFront 設定の流れ
前回「WordPress 実行環境で ALB 前に CloudFront を設置する (1/3)」CloudFront の概要と設定の流れを整理しました。
CloudFront 設定後のイメージ
今回の設定概要
- CloudFront
- ドメイン: example1.jp
- ACM: example1.jp
- リージョン: 米国東部 (バージニア北部)
- オリジン (ALB)
- ドメイン: alb.example1.jp
- ACM: *.example1.jp
- リージョン: アジアパシフィック (東京)
CloudFront 設定の流れ
- AWS Certificate Manager (ACM) 証明書を作成する。
- WordPress 用のキャッシュポリシーを作成する。
- WordPress 用のオリジンリクエストポリシーを作成する。
- ディストリビューションを作成する
- ディストリビューションのビヘイビアを設定する。
- Route 53 で、ALB 用のレコードを追加する。
- (バーチャルホスト環境の場合)バーチャルホストの設定を編集する。
- Route 53 で、既存レコードのエイリアスを CloudFront に変更する。
- (任意)SecurityGroup のインバウンドを CloundFront に制限する。
今回は 1. の証明書作成から、 5. ビヘイビアの設定までの手順をまとめていこうと思います。
CloudFront を設定する
AWS Certificate Manager (ACM) 証明書の作成
まず CloudFront 用の AWS Certificate Manager (ACM) を作成します。CloudFront で利用する ACM は、米国東部 (バージニア北部) us-east-1 リージョンで作成する必要があります。
- AWS Certificate Manager (ACM) コンソールを表示します。
- ナビゲーションバーでリージョン [米国東部 (バージニア北部)] を選択します。
- ナビゲーションペイン [証明書をリクエスト] を選択します。
- 証明書のタイプで [パブリック証明書] を選択し、[次へ] を選択します。
- 「パブリック証明書をリクエスト」の画面で以下を設定します。
- ドメイン名:example1.jp (適宜変更)
Route 53 で登録した、証明書を関連付けたいドメイン名を入力します。
サブドメインを登録したい場合は、[この証明書に別の名前を追加] を選択してサブドメイン *.example1.jp を追加します。 - 検証方法:DNS 検証
- キーアルゴリズム:RSA 2048
- 入力内容を確認し [リクエスト] を選択します。
- リクエスト実行後「証明書の一覧」ページで、作成した証明書 ID を選択します。
- 「証明書の詳細」の「ドメイン」のセクションで [Route 53 でレコードを作成] を選択します。
- 「Amazon Route 53 で DNS レコードを作成」画面で内容を確認し [レコードを作成] を選択します。
- 「証明書の一覧」画面で確認してステータスが発行済みに変われば、パブリック証明書の作成は終了です。
WordPress 用キャッシュポリシーの作成
ディストリビューションを作成する前に WordPress 用のキャッシュポリシーを作成します。
- CloudFront コンソールを表示します。
- ナビゲーションペイン [ポリシー] を選択し [キャッシュポリシーを作成] を選択します。
- 「キャッシュポリシーを作成」ページで、以下を設定します。
- 詳細 (適宜変更)
- 名前: example1_jp_wordpress
- 説明: example1.jp policy for WordPress
- TTL 設定 (適宜変更)
- 最小 TTL: 1
- 最大 TTL: 31536000 (365 日)
- デフォルト TTL: 86400 (1 日)
- 「キャッシュキー設定」セクションで以下を設定します。
- ヘッダー: 次のヘッダーを含める
- CloudFront-Forwarded-Proto
- Host
- クエリ文字列: すべて
- cookie: 指定された cookie を含める
- wordpress_logged_in*
- wp-settings*
- 入力内容を確認して [作成] を選択してキャッシュポリシーを作成します。
WordPress 用リクエストポリシーの作成
次に WordPress 用のオリジンリクエストポリシーを作成します。
- CloudFront コンソールを表示します。
- ナビゲーションペイン [ポリシー] を選択し [オリジンリクエスト] のタブを選択し [オリジンリクエストポリシーを作成] を選択します。
- 「オリジンリクエストを作成」ページで、以下を設定します。
- 詳細
- 名前: example1_jp_wordpress
- 説明: example1.jp policy for WordPress
- 「オリジンリクエストの設定」ページで以下を設定します。
- ヘッダー: 次のヘッダーを含める
- CloudFront-Forwarded-Proto
- Host
- クエリ文字列: 指定したクエリ文字列を含める
- *preview*
- cookie: 指定された cookie を含める
- comment_*
- wordpress_*
- wp-settings-*
- 入力内容を確認して [作成] を選択してオリジンリクエストポリシーを作成します。
ディストリビューションの作成
次に CloudFront のディストリビューションを作成します。
- CloudFront コンソールを表示します。
- ナビゲーションペイン [ディストリビューション] を選択し [ディストリビューションを作成] を選択します。
- 「ディストリビューションを作成」ページ「オリジン」セクションで以下を設定します。
- オリジンドメイン: alb.example1.jp (適宜変更)
- プロトコル: HTTPS のみ (適宜変更)
- 最小オリジン SSL プロトコル: TLSv1.2 (適宜変更)
- オリジンパス: 空欄
- 名前: alb.example1.jp (適宜変更)
- 「デフォルトのキャッシュビヘイビア」セクションで、以下を設定します。
- パスパターン: デフォルト (*)
- オブジェクトを自動的に圧縮: Yes
- ビューワープロトコルポリシー: Redirect HTTP to HTTPS
- 許可された HTTP メソッド: GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
- ビューワーのアクセスを制御する: No
- 「キャッシュキーとオリジンリクエスト」のセクションで以下を設定します。
- Chche policy and orin request policy (recommended)
- キャッシュポリシー: example1_jp_wordpress (適宜変更)
- オリジンリクエストポリシー: example1_jp_wordpress (適宜変更)
- 「設定」セクションで以下を設定します。
- 料金クラス: すべてのエッジロケーションを使用する
- 代替ドメイン名 (CNAME): example1.jp (適宜変更)
- カスタム SSL 証明書: example1.jp (適宜変更) 前項で作成した ACM 証明書
- 入力内容を確認して [作成] を選択してディストリビューションを作成します
ビヘイビアの作成
作成したディストリビューションにビヘイビアを作成して、WordPress 用の設定を行います。
- CloudFront コンソールを表示します。
- ナビゲーションペイン [ディストリビューション] を選択し、作成したディストリビューションを選択します。
- 「ビヘイビア」タブを選択して「ビヘイビアを作成」を設定します。
- 「ビヘイビアを作成」ページで以下を作成します。
- パスパターン: /wp-admin/*
- ビューワー
- ビューワープロトコルポリシー: Redirect HTTP to HTTPS
- 許可された HTTP メソッド: GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
- キャッシュキーとオリジンリクエスト
- キャッシュポリシー: Managed-CachingDisabled
- オリジンリクエストポリシー: Managed-AllViewer
- ビューワー
- パスパターン: wp-login.php
- ビューワー
- ビューワープロトコルポリシー: Redirect HTTP to HTTPS
- 許可された HTTP メソッド: GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
- キャッシュキーとオリジンリクエスト
- キャッシュポリシー: Managed-CachingDisabled
- オリジンリクエストポリシー: Managed-AllViewer
- ビューワー
- パスパターン: *wp-json*
- ビューワー
- ビューワープロトコルポリシー: Redirect HTTP to HTTPS
- 許可された HTTP メソッド: GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
- キャッシュキーとオリジンリクエスト
- キャッシュポリシー: Managed-CachingDisabled
- オリジンリクエストポリシー: Managed-AllViewer
- ビューワー
パスパターンの指定で /wp-json/* だとうまくいかない場合があったので、*wp-json* にしています
- パスパターン: *preview*
- ビューワー
- ビューワープロトコルポリシー: Redirect HTTP to HTTPS
- 許可された HTTP メソッド: GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
- キャッシュキーとオリジンリクエスト
- キャッシュポリシー: Managed-CachingDisabled
- オリジンリクエストポリシー: Managed-AllViewer
- ビューワー
- パスパターン: /wp-includes/*
- ビューワー
- ビューワープロトコルポリシー: Redirect HTTP to HTTPS
- 許可された HTTP メソッド: GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
- キャッシュキーとオリジンリクエスト
- キャッシュポリシー: example1_jp_wordpress (適宜変更)
- オリジンリクエストポリシー: example1_jp_wordpress (適宜変更)
- ビューワー
- パスパターン: /wp-content/*
- ビューワー
- ビューワープロトコルポリシー: Redirect HTTP to HTTPS
- 許可された HTTP メソッド: GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
- キャッシュキーとオリジンリクエスト
- キャッシュポリシー: example1_jp_wordpress (適宜変更)
- オリジンリクエストポリシー: example1_jp_wordpress (適宜変更)
- ビューワー
おわりに
今回の記事は以上となります。このシリーズでは、「AWS 環境に WordPress をなるべくお金をかけずに構築していく」をお届けしていますので、ぜひ過去の記事もご覧ください。