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

著者

Webエンジニア歴30年、フリーランスバックエンドエンジニア。

PHP歴約30年(Laravel 7年・FuelPHP 5年・CakePHP・自作FW)、
JavaScript歴約20年(React・Vue各4年)。
AWS(EC2 / CloudFront / RDS / API Gateway など)・
GCP(BigQuery)を使ったバックエンド開発を中心に、
複数の事業会社・受託案件でシステム設計から実装・運用まで担当しています。

PHPがバージョン4の時代から書いており、
Laravelが普及する前のフレームワーク乱立期も経験しています。
「昔はこう書いていたが今はこう」という変遷を肌で知っているエンジニアとして、
単なるコマンドの使い方だけでなく、なぜそうするのかの背景まで伝えることを意識して書いています。

このブログでは、実務で実際に詰まった箇所・調べたこと・気づいたことを
そのまま記事にしています。誰かの「詰まり」が解決するきっかけになれば幸いです。

千原 耕司をフォローする

役にたったと思ったら応援をお願いします m(._.)m

AWSサーバー
スポンサーリンク
シェアする
千原 耕司をフォローする
タイトルとURLをコピーしました