ECS(Fargate)で起動したNginxコンテナの前段にCloudFrontを配置してみる
概要
以前、
- ECSでNginxコンテナを起動し「Hello Wolrd」を表示してみる
- 独自ドメイン&HTTPS化する
ということをやりました(下記の記事です)。
今度は、この前段にCloudFrontを配置してみます。
※全ての作業は以前の記事を前提としています。
構成図
CloudFront用のSSL/TLS証明書を取得する
以前、ALB用のSSL/TLS証明書は取得済みですが、CloudFrontにも別途証明書が必要です。
CloudFrontはグローバルサービスのため、米国東部(バージニア北部)リージョンで発行されたACMのみ使用できます。そのため、ALBに紐付けた証明書と同内容の証明書を米国東部(バージニア北部)リージョンで再度作成します。
証明書タイプ | パブリック証明書をリクエスト |
ドメイン名 | sy-test-domain.com |
検証方法 | DNS検証 |
キーアルゴリズム | RSA 2048 |
CNAME名とCNAME値はALB証明書の時と同内容です。既にCNAMEレコードにこの名前と値は登録済みですので、CNAMEレコードの追加は不要です。しばらくすると証明書のステータスが成功になりました。
CloudFrontディストリビューションを作成する
AWSコンソールのCloudFrontの「CloudFrontディストリビューションを作成」を押します。
オリジンドメイン | ALBを選択します |
プロトコル | HTTPSのみ |
オブジェクトを自動的に圧縮 | Yes |
ビューワープロトコルポリシー | HTTPS only |
キャッシュキーとオリジンリクエスト |
Cache policy and origin request policy (recommended) にチェック |
キャッシュポリシー | CachingOptimized |
ウェブアプリケーションファイアウォール (WAF) | セキュリティ保護を有効にしない(WAFは有料のため) |
料金クラス | 北米と欧州のみを使用 |
代替ドメイン名(CNAME) | sy-test-domain.com |
カスタム SSL 証明書 | 米国東部(バージニア北部)リージョンで作成した証明書 |
以上の要領で、「ディストリビューションを作成」を押します。
Route 53のエイリアスレコードを更新する
現在、ALBが指定されているAレコードを修正し、CloudFrontに変更します。
これによって、sy-test-domain.com
にアクセスすると、ALBではなくCloudFrontにルーティングされるようになります。結果として、CloudFront > ALB > ECSという順番でルーティングされ、nginxによる「Hello World!!」が表示されるはずです。
CloudFront設定後の動作確認
sy-test-domain.com
にアクセスして、「Hello World!!」が表示されることを確認します。
403エラー
sy-test-domain.com
にアクセスすると、403エラーになりました。
対処法1: デフォルトルートオブジェクトの追加
デフォルトルートオブジェクトにindex.html
を追加します。
デフォルトルートオブジェクトは、CloudFrontコンソール > 一般タブの「編集」ボタンから変更できます。
対処法2: オリジンリクエストポリシーの設定
キャッシュキーとオリジンリクエストのオリジンリクエストポリシーの設定を追加します。
再度確認
上記の対処をおこなった上で、再度sy-test-domain.com
にアクセスします。すると、「Hello World!!」が表示されました。
また、CloudFrontを経由することで、本当にキャッシュと圧縮がされているかも確認します。
キャッシュの確認
開発者ツールのNetworkでResponseヘッダを確認し、X-Cache: Hit from cloudfront
があることを確認します。これがあればキャッシュされています。
圧縮の確認
圧縮を示す内容が見当たらないため、Disable cacheにチェックを付けて再度読み込みます。すると、Content-Encoding: br
が確認できました。
Discussion