概要
AWS初心者の方が初めに行き詰まる所は、インフラ周りのネットワーク設定だと思います。VPCやルートテーブルなど、インフラ基盤を構築するサービスは理解したものの、コンテンツを配信するサービスになると、どうしてもわからなくなることが多いです。本記事では、その中でもAWSシステムにコンテンツを配信する出入り口となるCloudFrontサービスについて、よりわかりやすくご紹介します。
【AWSへの出入り口】CloudFrontサービスについて
【誰でもわかりやすく】Amazon CloudFrontの基本
CloudFrontは、AWSサービスの中でも主要なサービスであり、パブリックにAWSシステムをアクセスするシステムに良く利用されます。CloudFrontは、低レイテンシーかつ高速な転送速度でコンテンツを配信するコンテンツデリバリーサービスです。キャッシュの設定や、リクエストヘッダ、及びレスポンスヘッダーの設定が可能です。
利用ケースとしては、例えば、ネットワーク環境からAWSの各サービスにアクセスする際、CloudFrontを経由する事により、オリジンの設定、キャッシュの設定、エラーレスポンスの設定、送信するヘッダー情報の設定などを行うことができる為、AWSシステムに対する接続をより高速かつ安全に通信する事ができます。
また、CloudFrontにWAFを設定する事で、WAFにDos攻撃やsqlインジェクション攻撃を防ぐ設定を入れる事ができる為、AWSシステムに対するセキュリティ対策を行うことができます。
リクエストヘッダーとレスポンスヘッダーの設定
CloudFrontでは、HTTPヘッダー(リクエストヘッダーとレスポンスヘッダー)の設定ができます。HTTPヘッダーとは、本文メッセージとは関係ない送信元から送信先に渡す情報の事です。HTTPヘッダーにはめた情報も含まれており、例えば、特定のAPIキーを持っている送信元からClouFrontを経由してAPI Gatewayに接続したい場合、リクエストヘッダーにAPIキー情報をAPI Gatewayに渡す設定をしてあげることにより、解決する事ができます。
オリジンフェールオーバーの設定
オリジンフェールオーバーとは、2つのオリジンを持つオリジングループを作成し、プライマリオリジンに障害が発生した場合に、自動的にセカンダリオリジンに切り替える設定のことです。例えば、オリジンとして本番システムと障害発生用システムを設定している場合、本番システムに障害が発生した場合に自動的に障害発生用システムに切り替える事ができます。
代替ドメイン名 (CNAME)
CloudFrontでは、CNAMEの設定ができます。CNAMEとは、リソースに対して別名を設定し、割り当てられた名前とCNAMEで名前解決した名前の両方でリソースにアクセスする事ができる設定です。CloudFrontでは、デフォルトでDNS名が割り当てられる為、CNAMEを設定する事で、任意のドメイン名でCloudFrontディストリビューションにアクセスする事ができます。
キャッシュについて
CloudFrontは、キャッシュの機能を利用してコンテンツ配信を行うことができます。CloudFrontのキャッシュを利用することで、コンテンツのレイテンシー(遅延)を軽減することができます。
以下にCloudFrontのキャッシュ機能で設定できる項目をまとめました。
キャッシュヒット率を高める
キャッシュヒット率とは、名前の通り、CloudFrontでキャッシュするヒット率のことです。
キャッシュヒット率を高める事で、オリジンサーバーの負荷が軽減され、よりコンテンツへのレイテンシー(遅延)を軽減することができます。
キャッシュの配信期間
キャッシュからコンテンツを配信できる期間を設定できます。Cache-Control max-age(最大期間)を(秒)単位で指定する事ができます。
クエリ文字列パラメータに基づくキャッシュ設定
キャッシュ設定では、クエリ文字列パラメータに基づいてキャッシュを設定することができます。クエリ文字列パラメータとは、URLの最後に付け加える文字列のことです。クエリ文字列パラメータに基づきキャッシュ設定を行うことにより、特定の文字列を含む接続の場合、接続をキャッシュすることができます。
ビューワーとCloudFrontの通信プロトコルについて
CloudFrontとビューワー(送信元)との通信をHTTPSプロトコルを利用した通信にしたい場合、Viewer Protocol Policyに対して、HTTPS必須に設定することにより、実現することができます。
Viewer Protocol Policyでは、「HTTPS Only」または、「Redirect HTTP to HTTPS」を設定する事ができ、日本語訳の通り、HTTPS必須もしくは、HTTPをHTTPSにリダイレクトする設定ができます。
ちなみに、HTTPS通信は、暗号化した通信となる為、SSL/TLS証明書の利用が必要となります。
HTTPS経由の設定(SSL証明書)
前述した通り、CloudFrontとビューワーでの通信をHTTPSで通信する場合、SSL証明書を利用する必要があります。SSL証明書は、独自で用意するもしくは、AWS上でSSL証明書を作成する事ができます。それぞれの設定については、以下の通りです。
独自でSSL証明書を作成する場合
- IAMでカスタムSSL証明書を作成する。
AWS上でSSL証明書を作成する場合
- ACMでカスタムSSL証明書を作成する。
CloudFrontが出力するエラーの対応について
こちらでは、CloudFrontを構築した際に頻繁に発生する主要なエラー出力の対応方法について、ご紹介します。
“The request could not be satisfied.Bad Request. ” のエラー対応について
“The request could not be satisfied.Bad Request. “(リクエストに失敗しました。無効なリクエストです。)のエラーが発生した場合、以下を確認する。
- HTTP and HTTPS または Redirect HTTP to HTTPSで通信されていることを確認する。
- 代替ドメイン名 (CNAME) が CloudFront ディストリビューションと関連付けられていることを確認する。
No ‘Access-Control-Allow-Origin’ header is present on the requested resource エラーの対応について
“No ‘Access-Control-Allow-Origin’ header is present on the requested resource “のエラーが発生した場合、以下を確認する。
- HTTP リクエストに対してOPTIONS メソッドが許可されているか確認する。
- CORS ポリシーで、オリジンが「Access-Control-Allow-Origin」ヘッダーを返すことを許可しているか確認する。
- CloudFront ディストリビューションで、適切なヘッダーがホワイトリストに登録されているか確認する。
まとめ
本記事では、CloudFrontについて、より重要な機能に絞り込みご紹介しました。オンプレとAWSシステムをDirect ConnectやVPNなどでプライベートに接続する際は、CloudFrontは利用しないと思いますが、AWSシステムをインターネット(Public)に接続する際は、良く利用するサービスですので、是非構築する際は、利用を検討してみる事をおすすめします。
コメント