CloudFront + EC2でSSL通信させる

背景

WordPressを構築・運用してみて、翌月の請求を見てみたらEC2が1台だけの構成にして高すぎる!
というか個人の支出として、収入をまだ生んでいないものに月4000円超えは厳しいです。

早速明細を見てみますと。

EC2は他に実験で使ったりするのですが、それ以上にALBが$12.51(日本円で約1800円)もしています。
ALBは起動している時間に対して料金がかかる従量課金です。(詳細は公式サイトへ)
このALBはSSLにするためだけに入れていますので、アクセス数の少ない現段階では無駄な料金がかかっている状態です。

やりたいこと

実施したい項目をまとめると以下のような感じでしょうか。

  • EC2にSSLでアクセスしたい
  • EC2に直接証明書を入れることはしたくない
  • 起動時間での従量課金の仕組みはNG
  • なるべく安く

色々調べてみると、ALBの代わりにCloudFrontを入れることで解決するようでした。
これならばある程度ブログのアクセスが多くなってくるまで耐えられそうです。(公式の料金表

環境構築

CloudFront構築

EC2は触らないため、CloudFrontの構築です。
まずはAWSコンソールにログイン後、CloudFrontを開きます。

「ディストリビューションを作成」ボタンを押下します。

オリジン

オリジンドメインにEC2のパブリックDNS名を記入します。(EC2の詳細から確認してください)
次にプロトコルですが、EC2はHTTPなので「HTTPのみ」を選択します。
最後に名前ですが、自動的にオリジンドメインの値が入りますので、そのままで良いです。

デフォルトのキャッシュビヘイビア

ビューワープロトコルポリシーは「Redirect HTTP to HTTPS」を選択します。
許可されたHTTPメソッドはWordPressはコメント投稿や管理画面などもありますので「GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE」を選択します。
またHTTPメソッドをキャッシュのオプションにもチェックを入れます。

キャッシュキーとオリジンリクエスト

ここは、キャッシュポリシーとオリジンリクエストポリシーを設定しましょう。

キャッシュポリシー

「Create cache policy」をクリックして、以下のように入力します。

名前とオプションはわかりやすいもので大丈夫。
ヘッダーは「Host」「CloudFront-Forwarded-Proto」を選択しましょう。
クエリ文字列とcookieはすべてを選択して「作成」ボタンを押下します。

作成が完了したらキャッシュキーとオリジンリクエストで作成したものを選択します。

オリジンリクエストポリシー

「Create origin request policy」をクリックして、以下のように入力します。

名前とオプションはわかりやすいもので大丈夫。
ヘッダーは「Host」「CloudFront-Forwarded-Proto」を選択しましょう。
クエリ文字列とcookieはすべてを選択して「作成」ボタンを押下します。

作成が完了したらキャッシュキーとオリジンリクエストで作成したものを選択します。

関数の関連付け

ここはデフォルトのままで大丈夫です。

ウェブアプリケーションファイアウォール(WAF)

特に必要なければ「有効にしない」で。

設定

代替ドメイン名にWordPressのドメインを入れます。現在運用している場合はそれに合わせてください。
次にカスタムSSL証明書に設定するドメインのACM証明書を設定します。

設定の入力が終わったら「ディストリビューションを作成」ボタンを押下しましょう。

ビヘイビアの追加

ここまででは、記事を見ることはできますが、まだ管理画面に入れなかったりするためもう少し設定が必要です。

作成したディストリビューション>ビヘイビアでビヘイビア一覧を表示します。
続いて、「ビヘイビアを作成」ボタンを押下します。

上記のように設定して作成ボタンを押下します。
同じ設定で以下のパスパターンのものを続けて作成していきます。(/wp-admin/*は上記で作成したので飛ばして良いです)

  • *.php
  • preview
  • /wp-admin/*
  • /wp-json/*

最終的に上記のようになっていれば大丈夫です。

まとめ

これでCloudFrontを利用して、利用料金を抑えることに成功しました。
ただ、アクセス数が伸びると利用料金が高くなったりするので、その嬉しい悲鳴が聞こえてき始めたら再度検討していきたいと思います。

コメント

タイトルとURLをコピーしました