ディストリビューションでの CloudFrontさまざまなオリジンの使用 - Amazon CloudFront

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ディストリビューションでの CloudFrontさまざまなオリジンの使用

ディストリビューションを作成するときは、 がファイルのリクエスト CloudFront を送信するオリジンを指定します。では、さまざまな種類のオリジンを使用できます CloudFront。例えば、Amazon S3 バケット、 MediaStore コンテナ、 MediaPackage チャネル、Application Load Balancer、または AWS Lambda関数 URL を使用できます。

Amazon S3 バケットの使用

以下のトピックでは、Amazon S3 バケットを CloudFront ディストリビューションのオリジンとして使用するさまざまな方法について説明します。

標準的な 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 バケットへのオブジェクトの保存には、通常の Amazon S3 料金が発生します。の使用料金の詳細については CloudFront、「Amazon CloudFront 料金表」を参照してください。既存の S3 バケット CloudFront で を使用する方法の詳細については、「」を参照してください既存の Amazon S3 バケット CloudFront への追加

重要

バケットで を使用するには CloudFront、名前が DNS 命名要件に準拠している必要があります。詳細については、Amazon Simple Storage Service ユーザーガイドの「バケットの命名規則」を参照してください。

のオリジンとして Amazon S3 バケットを指定する場合は CloudFront、次の形式を使用することをお勧めします。

bucket-name.s3.region.amazonaws.com

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

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

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

  • Amazon S3 の CNAME

Amazon S3 Object Lambda の使用

Object Lambda アクセスポイントを作成すると、Amazon S3 は Object Lambda アクセスポイントの固有のエイリアスを自動的に生成します。Amazon S3 バケット名の代わりにこのエイリアスを CloudFront ディストリビューションのオリジンとして使用できます。

Object Lambda アクセスポイントエイリアスを のオリジンとして使用する場合は CloudFront、次の形式を使用することをお勧めします。

alias.s3.region.amazonaws.com

alias の検索の詳細については、「Amazon S3 ユーザーガイド」の「S3 バケット Object Lambda アクセスポイントにおけるバケット形式のエイリアスの使用」を参照してください。

重要

Object Lambda アクセスポイントを のオリジンとして使用する場合は CloudFront、オリジンアクセスコントロール を使用する必要があります。

ユースケースの例については、「Amazon S3 Object Lambda と Amazon CloudFront を使用してエンドユーザーのコンテンツを調整する」を参照してください。

CloudFront は、Object Lambda アクセスポイントのオリジンを標準の Amazon S3 バケットオリジン と同じように扱います。

Amazon S3 Object Lambda をディストリビューションのオリジンとして使用する場合は、次の 4 つのアクセス許可を設定する必要があります。

Object Lambda アクセスポイントのアクセス許可
  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. 左のナビゲーションペインで、[Object Lambda アクセスポイント] を選択します。

  3. 使用する Object Lambda アクセスポイントを選択します。

  4. [アクセス許可] タブを選択します。

  5. [Object Lambda アクセスポイントポリシー] セクションで [編集] を選択します。

  6. 以下のポリシーを [ポリシー] フィールドに貼り付けます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3-object-lambda:Get*", "Resource": "arn:aws:s3-object-lambda:<region>:<AWS アカウント ID>:accesspoint/<Object Lambda Access Point name>", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudfront::<AWS アカウント ID>:distribution/<CloudFront distribution ID>" } } } ] }
  7. [変更の保存] をクリックします。

Amazon S3 アクセスポイントのアクセス許可
  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. ナビゲーションペインで、[アクセスポイント] を選択します。

  3. 使用する Amazon S3 アクセスポイントを選択します。

  4. [アクセス許可] タブを選択します。

  5. [アクセスポイントポリシー] セクションで [編集] を選択します。

  6. 以下のポリシーを [ポリシー] フィールドに貼り付けます。

    { "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "s3objlambda", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:<region>:<AWS アカウント ID>:accesspoint/<Access Point name>", "arn:aws:s3:<region>:<AWS アカウント ID>:accesspoint/<Access Point name>/object/*" ], "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": "s3-object-lambda.amazonaws.com" } } } ] }
  7. [保存] を選択します。

Amazon S3 バケットのアクセス許可
  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. ナビゲーションペインで、バケットを選択します。

  3. 使用する Amazon S3 バケットを選択します。

  4. [アクセス許可] タブを選択します。

  5. [バケットポリシー] セクションで、[編集] を選択します。

  6. 以下のポリシーを [ポリシー] フィールドに貼り付けます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "*", "Resource": [ "arn:aws:s3:::<bucket name>", "arn:aws:s3:::<bucket name>/*" ], "Condition": { "StringEquals": { "s3:DataAccessPointAccount": "<AWS アカウント ID>" } } } ] }
  7. [変更の保存] をクリックします。

AWS Lambda アクセス許可
  1. AWS Management Console にサインインして AWS Lambda コンソール (https://console.aws.amazon.com/lambda/) を開きます。

  2. ナビゲーションペインで、[関数] を選択します。

  3. 使用する AWS Lambda 関数を選択します。

  4. [設定] タブを開き、次に [アクセス許可] をクリックします。

  5. [リソースベースのポリシーステートメント] セクションで [アクセス許可の追加] を選択します。

  6. [AWS アカウント] を選択します。

  7. [ステートメント ID] の名前を入力します。

  8. [プリンシパル]cloudfront.amazonaws.com を入力します。

  9. [アクション] ドロップダウンメニューから lambda:InvokeFunction を選択します。

  10. [保存] を選択します。

ウェブサイトのエンドポイントとして設定された Amazon S3 バケットの使用

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

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

Amazon S3 静的ウェブサイトエンドポイントを指定する方法の詳細については、Amazon Simple Storage Service ユーザーガイドの「ウェブサイトエンドポイント」を参照してください。

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

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

注記

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

既存の Amazon S3 バケット CloudFront への追加

オブジェクトを Amazon S3 バケットに保存する場合、ユーザーに S3 から直接オブジェクトを取得するか、S3 からオブジェクトを取得してユーザーに配信 CloudFront するように を設定できます。を使用すると CloudFront 、データ転送の料金が Amazon S3 CloudFront データ転送の料金よりも低くなるため、ユーザーが頻繁にオブジェクトにアクセスする場合、コスト効率が向上します。さらに、オブジェクトはユーザーの近くに保存されるため、Amazon S3 のみの場合 CloudFront よりも のダウンロードが高速です。

注記

Amazon S3 の Cross-Origin Resource Sharing 設定を優先 CloudFront する場合は、 Originヘッダーを Amazon S3 CloudFront に転送するように を設定します。 Amazon S3 詳細については、「リクエストヘッダーに基づくコンテンツのキャッシュ」を参照してください。

現在、Amazon S3 バケットのドメイン名 (example.com など) の代わりに独自のドメイン名 (DOC-EXAMPLE-BUCKET.s3.us-west-2.amazonaws.com など) を使用して Amazon S3 バケットから直接コンテンツを配信している場合は、次の手順を使用して中断することなく を追加できます CloudFront。

Amazon S3 からコンテンツをすでに配信している CloudFront ときに を追加するには
  1. CloudFront ディストリビューションを作成します。詳細については、「ディストリビューションを作成するためのステップ (概要)」を参照してください。

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

    重要

    バケットで を使用するには CloudFront、名前が DNS 命名要件に準拠している必要があります。詳細については、Amazon Simple Storage Service ユーザーガイドの「バケットの命名規則」を参照してください。

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

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

    CloudFront URLs「」を参照してくださいのファイルの URL 形式のカスタマイズ CloudFront

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

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

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

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

    https://DOC-EXAMPLE-BUCKET.s3.amazonaws.com/images/image.jpg

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

    注記

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

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

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

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

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

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

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

OAIs、 はリージョン (特に値) CloudFront を使用して、バケットからオブジェクトをリクエストするために使用する署名を計算します。OAI の詳細については、「オリジンアクセスアイデンティティの使用 (レガシー、非推奨)」を参照してください。署名バージョン 2 をサポートする AWS リージョンのリストについては、「Amazon Web Services 全般のリファレンス」の「署名バージョン 2 の署名プロセス」を参照してください。

CloudFrontのレコードをより速く更新するには、 CloudFront コンソールの 全般タブの説明フィールドを更新するなどして、ディストリビューションを更新できます CloudFront。ディストリビューションを更新すると、 はバケットがあるリージョンを CloudFront 直ちに確認します。すべてのエッジロケーションへの変更の伝達には数分しかかかりません。

MediaStore コンテナまたは MediaPackage チャンネルの使用

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

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

Application Load Balancer の使用

オリジンが 1 つ以上の Amazon EC2 インスタンスでホストされている 1 つ以上の HTTP サーバー (ウェブサーバー) である場合、Application Load Balancer を使用してインスタンスにトラフィックを分散できます。Application Load Balancer を のオリジンとして使用する方法の詳細については CloudFront、「」を参照してください。ロードバランサーに直接アクセスして CloudFront ではなく、ビューワーが を介してのみウェブサーバーにアクセスできることを確認する方法などですApplication Load Balancers へのアクセスを制限する

Lambda 関数 URL の使用

Lambda 関数 URL は、AWS Lambda 関数専用の HTTPS エンドポイントです。Lambda 関数 URL を使用して、サーバーレスウェブアプリケーションを完全に AWS Lambda 内で構築できます。API Gateway またはApplication Load Balancer と統合する必要なく、関数 URL を介して Lambda ウェブアプリケーションを直接呼び出すことができます。

関数 URLs、 を追加して次の利点 CloudFront を得ることができます。

  • コンテンツを視聴者の近くにキャッシュしてアプリケーションを高速化する

  • ウェブアプリケーションのカスタムドメイン名を使用する

  • CloudFront キャッシュ動作を使用して異なる Lambda 関数に異なる URL パスをルーティングする

  • CloudFront 地理的制限または AWS WAF (またはその両方) を使用して特定のリクエストをブロックする

  • AWS WAF と CloudFront を併用することで、悪意のあるボットからアプリケーションを保護し、一般的なアプリケーションの悪用を防ぎ、DDoS 攻撃からの保護を強化できます。

Lambda 関数 URL を CloudFront ディストリビューションのオリジンとして使用するには、Lambda 関数 URL の完全なドメイン名をオリジンドメインとして指定します。Lambda 関数 URL ドメイン名は、次の形式を使用します。

function-URL-ID.lambda-url.AWS-Region.on.aws

Lambda 関数 URL を CloudFront ディストリビューションのオリジンとして使用する場合は、関数 URL がパブリックにアクセス可能であることを確認する必要があります。これを行うには、関数の URL の AuthType パラメータを NONE に設定し、リソースベースのポリシーで lambda:InvokeFunctionUrl 許可を付与します。詳細については、「 AWS Lambdaデベロッパーガイド」の「NONE の使用 AuthType」を参照してください。ただし、 がオリジンに送信するリクエストにカスタムオリジンヘッダーを追加し、ヘッダーがリクエストに存在しない場合はエラーレスポンスを返す関数コードを記述することもできます。 CloudFront これにより、ユーザーは Lambda 関数 URL を直接使用するのではなく CloudFront、 を介してのみウェブアプリケーションにアクセスできるようになります。

Lambda 関数 URL の詳細については、AWS Lambda デベロッパーガイドの以下のトピックを参照してください。

  • Lambda 関数 URL – Lambda 関数 URL 機能の一般的な概要

  • Lambda 関数 URL の呼び出し – サーバーレスウェブアプリケーションのコーディングに使用するリクエストおよびレスポンスのペイロードに関する詳細が含まれます。

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

カスタムオリジンは、HTTP サーバーです (例: ウェブサーバー)。HTTP サーバーとして、Amazon EC2 インスタンス、または別の場所でホストしている HTTP サーバーを使用できます。ウェブサイトエンドポイントとして設定された Amazon S3 オリジンは、カスタムオリジンと見なされます。

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

ほとんどの CloudFront 機能は、プライベートコンテンツを除くカスタムオリジンを使用する場合にサポートされます。署名付き URL を使用してカスタムオリジンからコンテンツを配信することはできますが、 CloudFront がカスタムオリジンにアクセスするには、オリジンがパブリックにアクセス可能である必要があります。詳細については、「署名付き URL と署名付き Cookie を使用したプライベートコンテンツの提供」を参照してください。

で Amazon EC2 インスタンスおよびその他のカスタムオリジンを使用するには、以下のガイドラインに従ってくださいCloudFront。

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

  • デバッグにこの値を使用する必要がある場合AWS Supportや使用する必要がある場合は、すべてのサーバーで X-Amz-Cf-IdヘッダーエントリCloudFront をログに記録します。

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

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

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

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

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

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

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

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

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

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

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

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