Amazon CloudFront
開発者ガイド (API バージョン 2016-09-29)

ウェブディストリビューションでの Amazon S3 オリジン、MediaPackage チャネル、およびカスタムオリジンの使用

ディストリビューションを作成するときに、CloudFront がファイルに対するリクエストを送信する送信先を指定します。CloudFront では、複数の AWS リソースをオリジンとして使用することがサポートされています。たとえば、Amazon S3 バケット、MediaStore コンテナ、MediaPackage チャネル、カスタムオリジン (Amazon EC2 インスタンスや独自の HTTP ウェブサーバーなど) を指定できます。

オリジンとしての Amazon S3 バケットの使用

ディストリビューションのオリジンとして Amazon S3 を使用する場合は、CloudFront で配信するすべてのオブジェクトを Amazon S3 バケットに配置します。オブジェクトを Amazon S3 に配置するには、Amazon S3 でサポートされている任意の方法を使用できます (例: Amazon S3 コンソールまたは API、サードパーティー製ツール)。他の Amazon S3 バケットと同様に、バケット内に階層を作成してオブジェクトを保存できます。

既存の Amazon S3 バケットを CloudFront オリジンサーバーとして使用しても、そのバケットは一切変更されません。Amazon S3 オブジェクトの保存やアクセスで通常使用しているとおりに、通常の Amazon S3 価格でバケットを使用できます。バケットへのオブジェクトの保存には、通常の Amazon S3 料金が発生します。CloudFront の使用料の詳細については、「コンソールのCloudFront レポート」を参照してください。

重要

バケットが CloudFront で正常に機能するには、その名前が DNS 命名要件に沿ったものでなければなりません。詳細については、Amazon Simple Storage Service 開発者ガイド の「バケットの制約と制限」を参照してください。

CloudFront がオブジェクトの取得先としている Amazon S3 バケットをお客様が指定するときは、次の形式を使用してバケットにアクセスすることをお勧めします。

bucket-name.s3.region.amazonaws.com

もう 1 つのオプションとして、次のより一般的な形式を使用することができますが、この形式は 2019 年以降に開始されたリージョンでは機能しないことに注意してください。

bucket-name.s3.amazonaws.com

この形式でバケット名を指定した場合は、以下の CloudFront 機能を使用できます。

以下の形式を使用してバケットを指定しないでください。

  • Amazon S3 のパススタイル (s3.amazonaws.com/bucket-name)

  • Amazon S3 の CNAME (ある場合)

オリジンのウェブサイトエンドポイントとして構成された Amazon S3 バケットの使用

ウェブサイトエンドポイントとして設定されている Amazon S3 バケットを、CloudFront のカスタムオリジンとしてセットアップできます。

  • CloudFront ディストリビューションを設定するときに、バケットの Amazon S3 静的ウェブサイトホスティングエンドポイントをオリジンとして指定します。この値は、Amazon S3 コンソールの [Static Website Hosting (静的ウェブサイトホスティング)] の [Properties (プロパティ)] ページに表示されます。例:

    https://bucket-name.s3-website.region.amazonaws.com

Amazon S3 静的ウェブサイトエンドポイントを指定する方法の詳細については、Amazon S3 ドキュメントの「ウェブサイトエンドポイント」を参照してください。

この形式でバケット名をオリジンとして指定すると、Amazon S3 リダイレクトと Amazon S3 カスタムエラードキュメントを使用できます。Amazon S3 機能の詳細については、Amazon S3 ドキュメントを参照してください。(CloudFront ではカスタムエラーページも提供されています。詳細については、「特定の HTTP ステータスコードのカスタムエラーページを作成する」を参照してください)

Amazon S3 バケットを CloudFront オリジンサーバーとして使用しても、バケットは一切変更されません。通常使用しているとおりに使用でき、通常の Amazon S3 料金が発生します。CloudFront の使用料の詳細については、「コンソールのCloudFront レポート」を参照してください。

注記

CloudFront API で、ウェブサイトエンドポイントとして設定されている Amazon S3 バケットを使用してディストリビューションを作成する場合は、そのウェブサイトが Amazon S3 バケットでホストされていても、CustomOriginConfig を使用して設定する必要があります。CloudFront API を使用してディストリビューションを作成する方法の詳細については、Amazon CloudFront API リファレンス の「CreateDistribution」を参照してください。

オリジンとしての MediaStore コンテナまたは MediaPackage チャネルの使用

CloudFront を使用してビデオをストリーミングするには、MediaStore コンテナとして構成されている Amazon S3 バケットをセットアップするか、または MediaPackage でチャネルとエンドポイントを作成します。その後、CloudFront でディストリビューションを作成し設定して、ビデオをストリーミングします。

詳細と手順については、以下のトピックを参照してください。

Amazon EC2 または他のカスタムオリジンの使用

カスタムオリジンは、HTTP サーバーです (例: ウェブサーバー)。HTTP サーバーとして、Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、またはプライベートに管理している HTTP サーバーを使用できます。ウェブサイトエンドポイントとして設定された Amazon S3 オリジンは、カスタムオリジンと見なされます。

使用するカスタムオリジンが独自の HTTP サーバーである場合、サーバーの DNS 名に加えて、オリジンからオブジェクトを取得するときに CloudFront が使用する HTTP ポート、HTTPS ポート、およびプロトコルを指定します。

カスタムオリジンを使用する場合、以下の機能を除いて、ほとんどの CloudFront 機能がサポートされます。

  • RTMP ディストリビューション — サポートされていません。

  • プライベートコンテンツ — 署名付き URL を使用してカスタムオリジンからコンテンツを配信できますが、CloudFront がカスタムオリジンにアクセスするには、そのオリジンがパブリックにアクセス可能な状態のままである必要があります。詳細については、「署名付き URL と署名付き Cookie を使用してプライベートコンテンツを供給する」を参照してください。

Amazon EC2 インスタンスおよび他のカスタムオリジンを CloudFront で使用するには、次のガイドラインに従います。

  • 同じ CloudFront オリジンのコンテンツを提供するすべてのサーバーで同じコンテンツをホストし、提供します。詳細については、「オリジンの設定」トピックの「ディストリビューションを作成または更新する場合に指定する値」を参照してください。

  • すべてのサーバーで X-Amz-Cf-Id ヘッダーエントリをログ記録します。CloudFront はデバッグのためにこの情報を必要とします。

  • カスタムオリジンがリッスンしている HTTP および HTTPS ポートへのアクセスリクエストを制限します。

  • 実装内のすべてのサーバーの時計を同期します。CloudFront では、署名付き URL と署名付き Cookie、アクセスログ、およびレポートで協定世界時 (UTC) を使用します。また、CloudWatch メトリクスを使用して CloudFront アクティビティをモニタリングする場合は、CloudWatch でも UTC が使用されることに注意してください。

  • 冗長サーバーを使用して障害に対処します。

  • カスタムオリジンを使用したプライベートコンテンツ供給の詳細については、「 カスタムオリジン上のファイルへのアクセス制限」を参照してください。

  • リクエストとレスポンス動作、およびサポートされる HTTP ステータスコードについては、「リクエストとレスポンスの動作」を参照してください。

カスタムオリジンで Amazon EC2 を使用する場合は、以下のようにすることをお勧めします。

  1. ウェブサーバーのソフトウェアを自動的にインストールする Amazon マシンイメージを使用します。詳細については、Amazon EC2 ドキュメントを参照してください。

  2. Elastic Load Balancing ロードバランサーを使用して、複数の Amazon EC2 インスタンスにわたるトラフィックを処理し、Amazon EC2 インスタンスの変更からアプリケーションを隔離します。たとえば、ロードバランサーを使用する場合、アプリケーションを変更せずに Amazon EC2 インスタンスの追加と削除ができます。詳細については、Elastic Load Balancing ドキュメントを参照してください。

  3. CloudFront ディストリビューションを作成する場合は、オリジンサーバーのドメイン名にロードバランサーの URL を指定します。詳細については、「ディストリビューションの作成」を参照してください。

CloudFront オリジングループの使用

たとえば、高可用性が必要なシナリオでオリジンフェイルオーバーを設定する場合は、CloudFront オリジンのオリジングループを指定できます。オリジンフェイルオーバーを使用して、CloudFront のプライマリオリジンと、プライマリオリジンが特定の HTTP ステータスコードの失敗応答を返したときに CloudFront が自動的に切り替わる 2 番目のオリジンを指定します。

オリジングループをセットアップする手順および詳細について確認するには、「CloudFront オリジンフェイルオーバーによる高可用性の最適化」を参照してください。

Amazon S3 からすでにコンテンツを配信しているときに CloudFront を追加する

オブジェクトを Amazon S3 バケットに保存している場合は、ユーザーがオブジェクトを S3 から直接取得できるようにするか、または CloudFront が S3 からオブジェクトを取得してからユーザーに配信するように設定できます。

注記

CloudFront でオリジンとして Amazon S3 バケットを使用する方法 (ウェブサイトエンドポイントとして設定されている Amazon S3 バケットがある場合も含む) の詳細については、「ウェブディストリビューションでの Amazon S3 オリジン、MediaPackage チャネル、およびカスタムオリジンの使用」を参照してください。

使用量が多いと CloudFront データ転送の価格は Amazon S3 データ転送の価格より低くなるため、ユーザーがコンテンツに頻繁アクセスする場合は CloudFront を使用するとコスト効率が向上することがあります。さらに、オブジェクトがよりユーザーに近い場所に保存されているため、CloudFront でのダウンロードは Amazon S3 だけの場合より高速です。

注記

CloudFront で Amazon S3 のクロスオリジンリソース共有設定に対応する場合は、Origin ヘッダーを Amazon S3 に転送するように CloudFront を設定します。詳細については、「リクエストヘッダーに基づくコンテンツのキャッシュ」を参照してください。

現在、Amazon S3 バケットのドメイン名 (MyAWSBucket.s3.us-west-2.amazonaws.com など) を使わずに、お客様自身のドメイン名 (example.com など) を使って Amazon S3 バケットから直接コンテンツを配信している場合は、以下の手順を行うことにより、支障なく CloudFront を追加できます。

Amazon S3 からコンテンツを既に配信している場合に CloudFront を追加するには

  1. 以下のいずれかの手順に従って CloudFront ディストリビューションを作成します。

    ディストリビューションを作成するときに、オリジンサーバーとして Amazon S3 バケットの名前を指定します。

    重要

    バケットが CloudFront で正常に機能するには、その名前が DNS 命名要件に沿ったものでなければなりません。詳細は、Amazon Simple Storage Service 開発者ガイドの「Bucket Restrictions and Limitations」を参照してください。

    Amazon S3 で CNAME を使用している場合、ディストリビューションにもその CNAME を指定します。

  2. Amazon S3 バケット内にあるパブリックに読み出し可能なオブジェクトへのリンクが含まれているテストウェブページを作成して、リンクをテストします。この初期テストでは、オブジェクト URL にディストリビューションの CloudFront ドメイン名 (例: http://d111111abcdef8.cloudfront.net/images/image.jpg) を使用します。

    CloudFront URL の形式の詳細については、「CloudFront でファイルの URL の形式をカスタマイズする」を参照してください。

  3. Amazon S3 の CNAME を使用している場合、お客様のアプリケーションは Amazon S3バケットの名前 (例: aws-s3-bucket1.s3.amazonaws.com) ではなくお客様のドメイン名 (例: example.com) を使用してバケット内のオブジェクトを参照しています。引き続き、ディストリビューションの CloudFront ドメイン名 (例: d111111abcdef8.cloudfront.net) ではなくお客様のドメイン名を使用してオブジェクトを参照するには、DNS サービスプロバイダで設定を更新する必要があります。

    Amazon S3 の CNAME が機能するためには、DNS サービスプロバイダに、現在ドメインに対するクエリを Amazon S3 バケットにルーティングしているドメインの CNAME リソースレコードセットが必要です。たとえば、ユーザーが次のオブジェクトをリクエストした場合、

    http://example.com/images/image.jpg

    このリクエストは自動的に再ルーティングされ、次のオブジェクトがユーザーに表示されます。

    http://aws-s3-bucket1.s3.amazonaws.com/images/image.jpg

    クエリを Amazon S3 バケットではなく CloudFront ディストリビューションにルーティングするには、DNS サービスプロバイダで提供されている方法を使用して、ドメインの CNAME リソースレコードセットを更新する必要があります。この更新された CNAME レコードによって、お客様のドメインからディストリビューションの CloudFront ドメイン名に、DNS クエリのリダイレクトが開始されます。詳細については、DNS サービスプロバイダから提供されたドキュメントを参照してください。

    注記

    Route 53 を DNS サービスとして使用している場合は、CNAME リソースレコードセットまたはエイリアスリソースレコードセットを使用できます。リソースレコードセットの編集については、「リソースレコードセットの編集」を参照してください。エイリアスリソースレコードセットについては、「エイリアスおよび非エイリアスリソースレコードセットの選択」を参照してください。どちらのトピックも Amazon Route 53 開発者ガイド にあります。

    CloudFront での CNAME の使用の詳細については、「代替ドメイン名 (CNAME) を追加してカスタム URL を使用する」を参照してください。

    CNAME リソースレコードセットを更新してから変更が DNS システム全体に伝達されるまで最大で 72 時間かかりますが、通常は、それよりも早く終了します。この間、コンテンツに対する一部のリクエストは引き続き Amazon S3 バケットにルーティングされ、それ以外のリクエストは CloudFront にルーティングされます。

Amazon S3 バケットを別のリージョンに移動する

CloudFront ディストリビューションのオリジンとして Amazon S3 バケットを使用していて、そのバケットを別のリージョンに移動する場合、以下の両方の条件に該当すると、リージョンの変更が含まれるように CloudFrontがレコードを更新するのに最大 1 時間かかることがあります。

  • CloudFront オリジンアクセスアイデンティティ (OAI) を使用してバケットへのアクセスを制限している

  • バケットの移動先の Amazon S3 リージョンで認証に署名バージョン 4 が要求される

OAI を使用している場合、CloudFront はリージョン (数ある値の中で) を使用して、バケットのオブジェクトをリクエストするために使用する署名を計算します。OAI の詳細については、「オリジンアクセスアイデンティティを使用して Amazon S3 コンテンツへのアクセスを制限する」を参照してください。Amazon S3 リージョンと各リージョンでサポートされている署名バージョンのリストについては、アマゾン ウェブ サービス全般のリファレンス の「リージョンとエンドポイント」章の「Amazon Simple Storage Service (Amazon S3)」を参照してください。

CloudFront のレコードの更新を速めるには、CloudFront コンソールの [General (全般)] タブの [Comment (コメント)] フィールドを更新するなどして、CloudFront ディストリビューションを更新します。ディストリビューションを更新すると、CloudFront はバケットがあるリージョンを即座に確認します。すべてのエッジロケーションに変更が反映されるまでに 15 分近くかかる場合があります。