CloudFrontとは?
高速にコンテンツを配信するサービス(CDN)
CDNとは?
コンテンツ配信サーバーの総称のことです。
概要
オリジンサーバー(元画像配信サーバーで基本的にはS3を使います。)上にあるコンテンツを世界中100箇所以上にあるエッジロケーション(CloudFrontの配信場所)にコピーしてそこから配信します。
オプション
リザーブドキャパシティ
長期利用(1年)における割引料金の適用がある。意外と知らない人が多い。
特徴
高速に動作
ユーザーから最も近いエッジサーバーから画像を配信する。単純にS3が配置されているオリジンサーバーから直接配信する場合に比べてより近くなるのでより速くなります。
また、キャッシュしないコンテンツでもオリジンとの通信の最適化により配信の高速化を実現しています。
gzip圧縮にも対応しています。
リクエストヘッダーにAccept-Encoding:gzipが指定されていてCloudFrontエッジにてgzip圧縮を行って配信を行います。(特にs3はgzip圧縮をサポートしていないので特に有効なオプションになります。)

サーバー負荷が少ない
エッジサーバーでコンテンツのキャッシュを行うので、毎回オリジンサーバーに取りに行かずキャッシュしている結果をリクエスト元に返すだけなので負荷をかけずに配信できる。
キャパシティアクセスからの解放
予測不可能なスパイスアクセスへの対応、勝手にスケールしてくれる。なのでユーザー側でサーバーを増やすなどの設計する必要がない。
ビルドインのセキュリティ
WAF連携、AWS ShieldでのDDos対策
設定が容易で即時利用可能
15分程度の設定で利用可能、CloudFormationで自動化することも可能。
充実したレポーティング
ログ、ダッシュボード、通知機能
完全従量課金制度
初期費用がなく安価、一時的な利用も可能
Lamba@Edgeとは?
CloudFrontの機能の一つでCloudFrontのエッジサーバでコードを実行するlambda関数のこと。ユーザーに近い場所でコードが実行されることでアプリのパフォーマンスが向上する。CloudFrontのイベントをトリガーとしてコードを実行する。
大枠のイメージ図

ディストリビューション
cloudFrontの大枠の概念
- ドメイン毎に割り当てられるCloudFrontの設定になります。
- ディストリビューションごとに使用量の上限(最大40Gbpsもしくは100000RPSを超える)があります。それを超える場合は緩和申請が必要です。
- デフォルトでは「xxxx.cloudfront.net」がディストリビューションのドメイン名として割り当てられます。
- CNAMEエイリアスを利用することで代替独自ドメインの指定は可能です。(ただし、有効なSSL/TLS証明書の対象であることが必要です。)
- Route53と組み合わせたZone Apex(例:example.comなど)が利用可能です。
Behavior
オリジンと紐づけるパスパターンの他にキャッシュポリシーや、オリジンリクエストポリシーという設定が可能になっています。URLパス毎にキャッシュの設定ができます。
Webサイトはパス毎(imageや、api、html,cssなど)によってキャッシュの運用方法が全く変わってくることが普通なのでBehavior内でURLパス毎にいろいろなキャッシュ設定を用意する運用が普通です。
Origin
どのサーバーとcloudfrontを紐づけるのか設定します。
ビヘイビア側の設定
圧縮サポート
ビューアーからのリクエストに応じて特定のタイプのコンテンツを必要に応じて自動的に圧縮し、キャッシュ及びレスポンスするための設定です。GzipもしくはBrotliに自動的に圧縮します。

注意点
圧縮を利用するうえで、TTLが0以上に設定されているなどいくつか縛りがあります。
キャッシュポリシー、オリジンリクエストポリシー、キャッシュコントロール
cloudfrontにおけるキャッシュ設定です。Webアプリケーションにおいてキャッシュ戦略は重要かつ、内容も濃いので別記事で解説しています。
CloudFrontのキャッシュポリシー、オリジンリクエストポリシー
Origin設定
S3でも良いですし、ALB、EC2、オンプレミスにある独自のHTTPサーバなど様々なサーバーをオリジンとして指定できます。
Origin Domain Name

オリジン(元画像配信元サーバー)のドメインの名前です。S3等のドメイン名を指定します。
Origin Path

S3の中でも特定のディレクトリを指定したい場合は指定します。指定しなくても問題ないです。
Origin ID
Origin Domain NameにS3のドメインを入力した場合は自動で入力が行われます。
Restrict Bucket Access
CloudFrontのドメインのみにアクセスさせたい場合はYesにします。CloudFrontも独自ドメインもどちらも使いたい場合はNoにします。
Origin Custom Headers
特に設定する必要がないので空のままでも大丈夫です。
Distribution Settings
Price Class(料金クラス)
どこから配信するかの設定値です。「Use All Edge Locations(Best Performance):すべてのエッジロケーションを使用する(最高のパフォーマンス)」がデフォルトで選択されていると思いますがこれを選択しておけば全てのエッジロケーションを使用して最適の配信をしてくれるので問題ないでしょう。

カスタムエラーページ
- 4xxなどのエラーが出た場合はオリジン側で対処します。(エラーページがキャッシュされると困るため)
- 5xx系はオリジン側のエラーのためCloudFront側で対処します。エラーキャッシュ期間(Error Cacheing Minimum TTL)はデフォルトで5分間になります。

独自ドメインから配信する。
できればCloudFrontのドメインではなく、SEOの観点で独自ドメインで配信されることが望ましい(サイトと画像配信ドメインが同じである方がSEO観点では強いと一般的にいわれます。)です。
Certificate ManagerでSSLサーバ証明書を発行する。
Certificate Manager
サーバ証明書を管理するためのAWSのサービスです。
SSLサーバ証明書
Webサーバーの持ち主が実在していることを証明する証明書です。ブラウザとWebサーバ間でHTTP通信をする際に必要となります。
CloudFrontのディストリビューションに独自ドメインを代替ドメインとして登録する。
代替ドメインとして登録するにはSSLサーバ証明書が必要になります。
Route53で独自ドメインとCloudFrontドメインのCNAMEレコードを作成する。
独自ドメインにアクセスされた際に、CloudFrontドメインに転送されるようにします。
アプリケーション側で独自ドメインの登録をする。
アプリに独自ドメインを登録することでCloudFrontとして登録されるドメインが独自ドメインになります。
この記事へのコメントはありません。