本記事の内容
本記事では、初めてCloudFrontを扱う人やAWS認定資格取得を目指す方向けに、CloudFrontの基礎知識を解説します。
- CDNサービスの仕組み
- CloudFrontの特徴/利用シーン
- CloudFrontの設定項目
CloudFrontの概要
Amazon CloudFrontは、AWSが提供するコンテンツデリバリーネットワーク(CDN)サービスです。ウェブサイトの高速化や大規模配信を実現する強力なツールとして、多くの企業や開発者に利用されています。
CDN(Content Delivery Network)は、地理的に分散したサーバーネットワークを使用して、ウェブコンテンツをユーザーにより早く配信するためのシステムです。
CloudFrontの仕組み
ウェブサイトやアプリケーションのコンテンツを、世界中に配置されたCloudFrontのエッジロケーション(サーバー)にキャッシュします。
エッジロケーションは、オリジンサーバーから送信されたコンテンツをキャッシュします。
ユーザーがウェブサイトにアクセスすると、DNSがそのリクエストを最も近いエッジロケーションに転送します。
エッジロケーションは、キャッシュされたコンテンツをユーザーに直接配信します。これにより、オリジンサーバー(元のコンテンツがホストされているサーバー)からの距離に関係なく、高速な配信が可能になります。
CloudFrontの特徴
CloudFrontの特徴として、以下の4つが挙げられます。以降では各特長を解説します。
- 高速配信
- スケーラビリティ
- セキュリティ
- 統合機能
特徴①:高速配信
CloudFrontは、世界中のエッジロケーションを活用して、ユーザーに近いサーバーからコンテンツを配信します。
これにより、データ転送の距離が短縮され、読み込み時間が大幅に短縮されます。結果として、ユーザー体験が向上し、ウェブサイトやアプリのパフォーマンスが向上します。
特徴②:スケーラビリティ
CloudFrontは、トラフィックの急増に対応するために自動的にスケールします。
これにより、突発的なアクセス集中時でも安定したパフォーマンスを維持し、サーバーの負荷を軽減します。ユーザーは、リソースの追加や管理を気にせず、安心してサービスを提供できます。
特徴③:セキュリティ
CloudFrontは、DDoS攻撃からの保護や、SSL/TLSによるデータ暗号化を提供し、安全なコンテンツ配信を実現します。
また、AWS WAF(Web Application Firewall)との統合により、悪意のあるトラフィックをフィルタリングできます。これにより、ウェブアプリケーションのセキュリティが強化され、ユーザーのデータを守ることができます。
特徴④:統合機能
CloudFrontは、Amazon S3やEC2などのAWSサービスとシームレスに統合できるため、コンテンツの配信が非常に効率的です。
これにより、簡単に設定ができ、運用がスムーズになるため、開発者は迅速にデプロイできます。また、AWSの他のセキュリティや分析ツールとも連携でき、包括的なソリューションを構築可能です。
S3
静的コンテンツ(画像や動画など)を格納するためのストレージサービスで、CloudFrontはS3のオリジンサーバーとして使用できます。これにより、S3に保存されたデータを高速に配信できます。
EC2
ウェブアプリケーションや動的コンテンツをホスティングするための仮想サーバーです。CloudFrontはEC2インスタンスからのコンテンツをキャッシュし、ユーザーに迅速に配信します。
Route 53
DNSサービスで、CloudFrontのディストリビューションに対してドメイン名を管理できます。これにより、ユーザーはよりスムーズにコンテンツにアクセスできます。
また、カスタムドメイン名の管理や低レイテンシーのルーティングが可能になり、ユーザーに最適なエッジロケーションからコンテンツを迅速に配信できます。
ACM
SSL/TLS証明書を簡単に管理・デプロイできるサービスです。CloudFrontと統合することで、HTTPSによる安全なコンテンツ配信が容易になり、データの暗号化とセキュリティが向上します。
WAF
Webアプリケーションファイアウォールで、悪意のあるトラフィックをフィルタリングできます。CloudFrontと統合することで、セキュリティを強化し、攻撃から保護します。
Sheild
DDoS攻撃からの保護を提供するサービスです。CloudFrontと連携することで、高度なセキュリティ対策が施されます。
CloudFrontの設定内容
CloudFrontを作成する際の、主要な設定項目を解説します。
①オリジン
Origin domain
CloudFrontがコンテンツを取得する元のサーバーのドメイン名やURLを指定する設定項目で、通常はAmazon S3バケットやEC2インスタンスのエンドポイントなどになります。
オリジンアクセス
オリジン(例えばS3バケットやEC2インスタンス)へのアクセス方法を制御するための重要な項目です。この設定を適切に選択することで、コンテンツのセキュリティを向上させることができます。以下にそれぞれの選択肢について説明します。
- Public
- オリジンが公開設定されている状態です。誰でも直接オリジンにアクセスできるため、CloudFrontを介さずにリソースにアクセスすることが可能です。
- オリジンへの直接アクセスが許可されているため、セキュリティリスクが高くなる可能性があります。
- Origin access control settings (recommended)
- CloudFrontはオリジンアクセスアイデンティティ(OAI)を使用して、S3バケットへのアクセスを制御します。
- バケットポリシーを使って、CloudFrontからのアクセスのみを許可し、その他のアクセスを制限したい場合に推奨されます。
- Legacy access identities
- CloudFrontの古いオリジンアクセスアイデンティティを使用した設定です。このオプションは、以前のバージョンで使用されていたもので、現在は新しい「Origin access control settings」が推奨されています。
Enable Origin Shield
CloudFrontのオリジンに対するキャッシュの最適化を実現する設定で、特定のリージョンに配置されたOrigin Shieldを介してオリジンへのリクエストを集約し、オリジンの負荷を軽減します。
※追加料金が発生します。
Connection attempts
CloudFrontがオリジンサーバーへの接続を試みる最大回数を指定する設定で、指定された回数以内に接続が成功しない場合、エラーとして処理されます。
Response timeout
CloudFrontがオリジンサーバーからのレスポンスを待機する最大時間を指定する設定で、この時間内にレスポンスが受信できない場合、リクエストはタイムアウトとして処理されます。
Keep-alive timeout
CloudFrontがオリジンサーバーとの接続を維持するための最大待機時間を指定する設定で、この時間内に新しいリクエストがない場合、接続が切断されます。
②デフォルトのキャッシュビヘイビア
オブジェクトを自動的に圧縮
特定のファイルをオリジンから受け取った後、CloudFrontはそれを自動的に圧縮してからユーザーに配信できます。圧縮は、ユーザーのリクエストに含まれるAccept-Encoding
ヘッダーを確認し、ユーザーのブラウザが対応している場合にのみ行われます。
ビューワープロトコルポリシー
CloudFrontエッジロケーションにアクセスするためのプロトコルポリシーを選ぶことができます。
- HTTP and HTTPS
- ユーザーはHTTPとHTTPSの両方を使用できます。
- Redirect HTTP to HTTPS
- ユーザーはHTTPとHTTPSの両方を使用できますが、HTTPリクエストは自動的にHTTPSにリダイレクトされます。
- HTTPS Only
- ユーザーはHTTPSを使用している場合にのみコンテンツにアクセスできます。
許可されたHTTPメソッド
CloudFrontが処理し、オリジンに転送するHTTPメソッドを選択できます。
- GET, HEAD
- CloudFrontを使って、オリジンからオブジェクトやそのヘッダーを取得することができます。
- GET, HEAD, OPTIONS
- オリジンからオブジェクトやそのヘッダーを取得したり、オリジンサーバーがサポートしているオプションのリストを取得することができます。
- GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
- オリジンからオブジェクトを取得したり、新しいオブジェクトを追加したり、既存のオブジェクトを更新・削除したりできます。また、ウェブフォームからのデータ送信など、さまざまなPOST操作も行えます。
ビューワーのアクセスを制限する(署名付き URL または署名付き cookie の使用)
特定のコンテンツへのアクセスを制限するための機能です。
この設定を有効にすると、指定したオブジェクトにアクセスするためには、署名付きURLまたは署名付きCookieを使用する必要があります。これにより、認証されたユーザーだけが特定のリソースにアクセスできるようになり、不正アクセスのリスクを軽減できます。
またこの設定を無効にすると、誰でもコンテンツにアクセスできるようになります。
キャッシュキーとオリジンリクエスト
キャッシュポリシーは、CloudFrontがどのようにオブジェクトをキャッシュするかを制御する設定です。このポリシーでは、次のような要素を定義できます。
- キャッシュの有効期限:
- オブジェクトがキャッシュされる期間を指定します。これにより、キャッシュが更新される頻度を管理できます。
- キャッシュキー:
- キャッシュエントリを識別するために使用される要素(パス、クエリ文字列、ヘッダーなど)を指定します。これにより、異なるリクエストに対して異なるキャッシュが作成されます。
- キャッシュの動作:
- ユーザーのリクエストに基づいてどのようにキャッシュを管理するかを設定します。
オリジンリクエストポリシーは、CloudFrontがオリジンサーバーにリクエストを送信する際の設定です。このポリシーでは、次のような要素を制御できます。
- キャッシュされたオブジェクトの条件:
- キャッシュの命中率を向上させるために、特定の条件に基づいてリクエストを調整することができます。
- 送信するヘッダー:
- オリジンサーバーに送信するHTTPヘッダーを指定します。これにより、オリジンがリクエストを正しく処理できるようになります。
- 送信するクエリ文字列:
- オリジンに送信するクエリパラメータを指定できます。これにより、オリジンサーバーが特定のデータを返すための条件を設定できます。
レスポンスヘッダーポリシー
CloudFrontがオリジンから受け取ったレスポンスに追加するHTTPヘッダーを管理するための設定項目です。このポリシーを使うことで、特定のヘッダーをレスポンスに追加したり、既存のヘッダーを変更したりすることができます。
スムーズストリーミング
Microsoft Smooth Streaming形式のメディアファイルを配信する際のオプションです。この設定を使用することで、動画や音声コンテンツを効果的にストリーミング配信できるようになります。
- IISサーバーがない場合:
- スムーズストリーミングを利用するがIISサーバーがない場合は、「はい」を選択します。これにより、CloudFrontが他の方法でメディアを配信します。
- IISサーバーがある場合:
- IISサーバーが存在し、Smooth Streaming形式のメディアファイルを配信する場合は、「いいえ」を選択します。この設定により、CloudFrontはIISからの配信をサポートします。
フィールドレベル暗号化
フィールドレベルの暗号化設定は、ユーザーがPOSTリクエストでアップロードする特定のデータを保護するためのものです。
CloudFrontは、リクエストをオリジンに送る前に、指定した公開キーを使ってデータを暗号化します。この暗号化により、適切なプライベートキーを持つ特定のアプリケーションコンポーネントだけがデータを復号できますが、データは他のシステム部分を通過する際も保護された状態が維持されます。
リアルタイムログを有効化する
CloudFrontがリクエストを受け取ってから数秒以内に、配信されたディストリビューションに関する情報を得ることができます。リアルタイムログは、Amazon Kinesis Data Streamsの指定したデータストリームに配信されます。
③関数の関連付け
特定のイベントに対して関数を実行するための設定です。この機能を使用すると、リクエストやレスポンスの処理をカスタマイズし、さまざまな操作を行うことができます。
また、関数タイプは以下から選択できます。
- CloudFront Functions:
- 高速で軽量な関数を実行するためのオプションです。
- ビューワーリクエストとビューワーレスポンスのイベントで使用され、単純な処理や短い実行時間が必要なタスクに適しています。例えば、リクエストヘッダーの変更やURLの書き換えに使用されます。
- Lambda@Edge:
- より複雑な処理を行うための関数で、オリジンリクエストやオリジンレスポンスを含むすべてのイベントで使用可能です。
- Node.jsを使用しており、外部APIの呼び出しやデータベースアクセスなど、重い処理にも対応できます。例えば、ユーザー認証や動的コンテンツ生成に利用されます。
ビューワーリクエスト
ユーザーからのリクエストがCloudFrontに到達した際に実行される関数です。この関数を使用して、リクエストの内容を検証したり、特定のヘッダーを追加したり、リダイレクトを実行したりできます。
ビューワーレスポンス
ユーザーに対してCloudFrontがレスポンスを返す前に実行される関数です。ここでは、レスポンスヘッダーを変更したり、キャッシュの制御を行ったり、特定の情報を追加することができます。
オリジンリクエスト
CloudFrontがオリジンサーバーにリクエストを送信する際に実行される関数です。この関数を使用して、オリジンに送信するヘッダーやクエリパラメータを追加・変更できます。
オリジンレスポンス
オリジンサーバーからCloudFrontにレスポンスが戻る際に実行される関数です。この関数では、オリジンからのレスポンスを調整し、特定のヘッダーを追加することができます。
③WAF
AWS WAFによるセキュリティ保護を有効にすると、ウェブアプリケーションに対する脅威からの防御が強化されます。
セキュリティ保護を有効にする
を選択すると、AWS WAFはディストリビューションが受け取るすべてのHTTPリクエストを、設定したルールに基づいて評価します。また必要に応じて、ボットや不正アクセスなど、アプリケーション特有の脅威に対する追加のセキュリティ設定を後から行うことも可能です。
④設定
料金クラス
使用するエッジロケーションの範囲に関する設定項目です。この設定によって、コストとパフォーマンスのバランスを調整できます。
- すべてのエッジロケーションを使用する (最高のパフォーマンス):
- このオプションを選択すると、CloudFrontは全世界のすべてのエッジロケーションを利用します。
- これにより、ユーザーの地理的位置に基づいて最も近いエッジロケーションからコンテンツが配信されるため、最高のパフォーマンスと低遅延を実現します。
- ただし、料金は最も高くなる可能性があります。
- 北米と欧州のみを使用:
- このオプションでは、北米と欧州のエッジロケーションのみを使用します。
- これにより、これらの地域にいるユーザーには比較的良好なパフォーマンスを提供できますが、アジアや他の地域のユーザーには遅延が発生する可能性があります。
- この選択は、コストを抑えたい場合に適しています。
- 北米、欧州、アジア、中東、アフリカを使用:
- このオプションでは、北米、欧州に加えて、アジア、中東、アフリカのエッジロケーションも利用します。
- これにより、これらの地域のユーザーにもアクセスしやすくなりますが、南アメリカなど特定の地域は含まれていないため、すべての地域に対するカバレッジはないことに留意が必要です。
代替ドメイン名(CNAME)
この設定を行うと、CloudFrontが自動生成したドメイン名(例えば、d123456abcdef8.cloudfront.net
)ではなく、自分のブランド名を含む覚えやすいURL(例えば、www.example.com
)を使ってコンテンツにアクセスできるようになります。
Custom SSL certificate
独自のSSL証明書を使用してHTTPS接続を安全に行うためのオプションです。この設定を利用することで、CloudFrontを通じて配信されるコンテンツに対して、独自のドメイン名でセキュアな接続を確立することができます。
独自のSSL証明書を使用する場合、事前に証明書を取得し、AWS Certificate Manager (ACM) などを利用してCloudFrontにアップロードする必要があります。これにより、ユーザーはSSL/TLSによって暗号化された安全な接続を通じてコンテンツにアクセスでき、データの安全性が確保されます。
サポートされている HTTP バージョン
使用するHTTPプロトコルのバージョンを指定するための設定項目です。
- HTTP/2:
- HTTP/1.1の後継バージョンで、パフォーマンスの向上を目的としています。
- 主な特徴には、同時接続の効率化やデータのマルチプレクシング(複数のリクエストを同時に処理できる機能)、ヘッダーの圧縮などがあります。
- これにより、ウェブページの読み込み速度が向上し、ユーザー体験が改善されます。
- HTTP/3:
- さらに新しいバージョンで、QUICというプロトコルを基にしています。QUICは、UDPを使用しているため、接続の確立が高速で、パケットロスに強い特徴があります。
- 特にモバイル環境や不安定なネットワークでのパフォーマンスが向上します。
デフォルトルートオブジェクト
ビューワーがルートURL(例えば、https://www.example.com/
)をリクエストした際に返される特定のオブジェクト(ファイル名)を指定するための設定項目です。
標準ログ記録
ビューワーリクエストに関する詳細なログを取得し、指定したAmazon S3バケットに保存するための機能です。この設定を有効にすると、CloudFrontを介して配信されるコンテンツに対するリクエストの履歴を記録できます。
IPv6
CloudFrontディストリビューションがIPv6アドレスをサポートするかどうかを指定する設定項目です。
関連記事
本記事の解説は以上です。
ここからは、より知識を深めたい人向けに関連記事を紹介します。
CloudFrontの利用例
本ブログでは、AWSサービスの紹介だけではなく頻出のシステム構成も解説しています。
ハンズオン形式で解説しているので、作成手順や構築時のパラメータが気になる人にもおすすめです!
コメント