サードパーティのオブジェクト ストレージを使用した Cloud CDN の設定

コンテンツがオンプレミスまたは別のクラウドでホストされている場合は、カスタムの送信元を使用できます。カスタムの送信元を使用すると、Google の Cloud CDN からコンテンツを配信できます。

このドキュメントでは、Amazon Simple Storage Service(Amazon S3)や Azure Blob Storage などのサードパーティのオブジェクト ストレージを Cloud CDN のカスタム送信元として設定するプロセスについて説明します。カスタム送信元と Cloud CDN は、外部 HTTP(S) ロードバランサと連動して動作します。

アーキテクチャ

カスタム送信元を作成するには、ロードバランサのバックエンドとしてサードパーティのストレージ サービスを指すインターネット ネットワーク エンドポイント グループ(NEG)を作成します。インターネット NEG はカスタム送信元に使用します。

サードパーティ ストレージ バケットをバックエンドとして設定するには、次の手順を行う必要があります。

  1. コンテンツを配信するためのサードパーティのストレージ バケットを準備します。
  2. バケットの FQDN を使用するインターネット NEG を作成します。
  3. インターネット NEG をバックエンドとして使用し、外部 HTTP(S) ロードバランサを構成します。
  4. セットアップをテストします。

コンテンツを配信するためのバケットの準備

Google Cloud での設定を開始する前に、バケットが正しく構成されていることを確認してください。以下の手順は、Amazon S3 を使用しており、Amazon S3 バケットとオブジェクトに変更を加えるために必要な権限を付与されていることを前提としています。

  1. Amazon S3 バケットとバケット内のオブジェクトが一般公開されていることを確認します。手順については、AWS ナレッジベースをご覧ください。例: Amazon S3 バケット内の一部のオブジェクトに対する公開読み取りアクセス権を付与するにはどうすればよいですか?

  2. コンテンツが、キャッシュに保存可能なコンテンツに記載されているキャッシュ保存が可能であるための要件を満たしていることを確認します。オブジェクト メタデータを追加する必要がある場合は、AWS ナレッジベースをご覧ください。例: オブジェクト メタデータの編集

  3. Amazon S3 バケットのエンドポイント(FQDN)に留意してください。この情報は、インターネット NEG の設定時に必要になります。エンドポイント情報を取得するには、AWS ナレッジベースに記載されている手順に沿って進めてください。例: バケットへのアクセス。また、オブジェクトの概要ページから Amazon S3 エンドポイントの URL を取得することもできます。

バケットのホスト名を使用するインターネット NEG を作成する

わかりやすくするために、この例では FQDN backend.example.com を使用します。必ず、サードパーティのストレージ バケットの FQDN (http://unique-name-bucket.s3-us-west-1.amazonaws.com/ など)に置き換えてください。

このガイドでは、インターネット ネットワーク エンドポイント グループ(NEG)でカスタムの送信元を使用する場合の基礎知識について説明します。カスタムの送信元は、Google Cloud の外部にあるインターネット エンドポイントです。インターネット NEG を外部 HTTP(S) ロードバランサのバックエンドとして使用し、Cloud CDN キャッシングを使用してパフォーマンスを向上させることができます。

このガイドでは、カスタムの送信元サーバーに backend.example.com でプロキシする Cloud CDN 対応バックエンド サービスを使用して、グローバル外部 HTTP(S) ロードバランサを構成する方法を説明します。

この例では、ロードバランサはクライアントからの HTTPS リクエストを受け入れ、HTTP/2 としてカスタムの送信元にプロキシします。この例では、カスタムの送信元が HTTP/2 をサポートしていることを前提としています。

他のオプションとしては、HTTP や HTTP/2 のリクエストを受け入れるようにロードバランサを構成し、カスタムの送信元にリクエストをプロキシする場合は HTTPS を使用します。

このガイドでは、すでにロードバランサが設定され、新しいカスタムの送信元のバックエンドを追加していることを前提としています。

アーキテクチャのサンプルを次に示します。

カスタム送信元の S3 バケット ユースケース
カスタム送信元の S3 バケット ユースケース

図では、www.example.com に IP アドレス 120.1.1.1 のロードバランサ フロントエンドがあります。キャッシュミスが発生した場合、/cart/id/1223515 へのユーザー リクエストはカスタムの送信元から HTTP/2 経由で取得されます。その他の受信トラフィックは、Compute Engine VM を使用する Google Cloud バックエンド サービスか、URL マップに基づいてバックエンド バケットに転送されます。

始める前に

このガイドに進む前に、次の内容を理解しておいてください。

権限

このガイドに記載された手順を行う前に、インターネット NEG を作成し、プロジェクト内の外部 HTTP(S) ロードバランサを作成するか、変更しておく必要があります。そのためには、プロジェクトのオーナーまたは編集者であるか、次の両方の Compute Engine IAM ロールを持っている必要があります。

タスク 必要なロール
ロードバランサ コンポーネントの作成と変更 ネットワーク管理者
NEG の作成と変更 Compute インスタンス管理者

カスタムの送信元を持つロードバランサの構成

このガイドでは、インターネット NEG を構成してテストする方法を説明します。

設定の概要

インターネット NEG の設定には、次の作業を行います。

  • インターネット NEG におけるインターネット エンドポイントを定義します。
  • インターネット NEG をバックエンドとしてバックエンド サービスに追加します。
  • 外部 HTTP(S) ロードバランサの URL マップを構成し、このバックエンド サービスにマッピングするユーザー トラフィックを定義します。

この例では、次のリソースを作成します。

  • 120.1.1.1 IP アドレスの転送ルールで、受信リクエストをターゲット プロキシに転送します。
    • 転送ルールの networkTier は、PREMIUM である必要があります。
  • ターゲット プロキシによって、各リクエストが URL マップと照合され、各リクエストに適したバックエンド サービスが決定されます。
    • カスタムの送信元の場合、ターゲット プロキシは TargetHttpProxyTargetHttpsProxy である必要があります。この例では TargetHttpsProxy を使用しています。
  • バックエンド サービスで Cloud CDN を有効にすると(省略可)、Cloud CDN キャッシュからのレスポンスをキャッシュして処理できます。
  • バックエンド サービス構成により、トラフィックが 1 つのインターネット NEG に転送されます。このインターネット NEG には、Cloud CDN キャッシュミスが発生したときに外部 HTTP(S) ロードバランサがトラフィックを送信するネットワーク エンドポイントが含まれます。
  • この例には、ユーザー定義のリクエスト ヘッダーが含まれています。これはカスタムの送信元が HTTP リクエスト Host ヘッダーの特定の値を想定している場合に必要です。

設定は次のようになります。

Amazon S3 バケットのバックエンドを持つ Cloud CDN
Amazon S3 バケットのバックエンドを持つ Cloud CDN

NEG とインターネット エンドポイントの作成

Console

  1. Google Cloud Console で、[ネットワーク エンドポイント グループ] ページに移動します。

    [ネットワーク エンドポイント グループ] ページに移動

  2. [ネットワーク エンドポイント グループを作成] をクリックします。
  3. ネットワーク エンドポイント グループの名前として「example-fqdn-neg」を入力します。
  4. [ネットワーク エンドポイント グループの種類] で、[ネットワーク エンドポイント グループ(インターネット)] を選択します。
  5. [デフォルト ポート] に「443」と入力します。
  6. [新しいネットワーク エンドポイント] で [完全修飾ドメイン名とポート] を選択します。
  7. FQDN の場合は、「backend.example.com」と入力します。
  8. [ポートタイプ] で [デフォルト] を選択し、[ポート番号] が 443 であることを確認します。
  9. [作成] をクリックします。

gcloud

  1. インターネット NEG を作成し、--network-endpoint-typeinternet-fqdn-port(送信元に到達可能なホスト名とポート)に設定します。

    gcloud compute network-endpoint-groups create example-fqdn-neg \
        --network-endpoint-type="internet-fqdn-port" --global
    
  2. エンドポイントを NEG に追加します。ポートが指定されていない場合、バックエンド サービスで構成されるプロトコルによって、デフォルトのポート選択はポート 80(HTTP)または、443(HTTPS、HTTP/2)になります。--global フラグが含まれていることを確認してください。

    gcloud compute network-endpoint-groups update example-fqdn-neg \
        --add-endpoint="fqdn=backend.example.com,port=443" \
        --global
    
  3. 作成されたインターネット NEG を一覧表示します。

    gcloud compute network-endpoint-groups list --global
    

    出力:

    NAME                LOCATION   ENDPOINT_TYPE        SIZE
    example-fqdn-neg    global     INTERNET_FQDN_PORT   1
    

  4. その NEG 内のエンドポイントを一覧表示します。

    gcloud compute network-endpoint-groups list-network-endpoints example-fqdn-neg \
        --global
    

    出力:

    INSTANCE   IP_ADDRESS   PORT   FQDN
                                   backend.example.com
    

ロードバランサへのカスタムの送信元の追加

次の例では、既存のロードバランサを更新します。

既存のロードバランサのデフォルトのサービスは、Google Cloud サービスです。この例では、cart/id/1223515 へのすべてのリクエストを、インターネット NEG に関連付けられた images バックエンド サービスに送信するパスマッチャーの追加により、既存の URL マップを変更します。

Console

バックエンド サービスの作成とインターネット NEG の追加

  1. Google Cloud Console で、[負荷分散] ページに移動します。

    [負荷分散] ページに移動

  2. バックエンド サービスを既存のロードバランサに追加するには、外部 HTTP(S) ロードバランサを選択し、メニュー をクリックして [編集] を選択します。
  3. [バックエンドの構成] をクリックします。
  4. [バックエンド サービスとバックエンド バケットの作成または選択] プルダウン メニューで、[バックエンド サービス] > [バックエンド サービスを作成] の順に選択します。
  5. バックエンド サービスの名前を images に設定します。
  6. [バックエンド タイプ] で [インターネット ネットワーク エンドポイント グループ] を選択します。
  7. ロードバランサからインターネット NEG へ使用するプロトコルを選択します。この例では、[HTTP/2] を選択します。
  8. [新しいバックエンド] > [インターネット ネットワーク エンドポイント グループ] で [example-fqdn-neg] を選択し、[完了] をクリックします。
  9. [Cloud CDN を有効にする] を選択します。
  10. デフォルトのキャッシュ モードTTL の設定を維持します。
  11. [詳細構成] の [カスタム リクエスト ヘッダー] で [ヘッダーを追加] をクリックします。
    1. [ヘッダー名] に「Host」と入力します。
    2. [ヘッダーの値] に「backend.example.com」と入力します。
  12. [作成] をクリックします。
  13. ウィンドウを開いたままにして続行します。

バックエンド サービスを既存の URL マップに接続する

  1. [ホストとパスのルール] をクリックします。
  2. 先頭行または最初の数行の右側の列には Google Cloud サービスがあり、それらの 1 つに [ホスト] と [パス] へのデフォルト ルール Any unmatched (default) がすでに入力されています。
  3. 右側の列に images が選択されている行があることを確認します。存在しない場合は、[ホストとパスのルールを追加] をクリックして、images を選択します。他のフィールドには次のように入力します。
    1. [ホスト] に「*」と入力します。
    2. [パス] に「/cart/id/1223515」と入力します。

確認と完了

  1. [確認と完了] をクリックします。
  2. 現在の設定と作成しようとしている内容を比較します。
  3. すべて問題なければ、[作成] をクリックして外部 HTTP(S) ロードバランサを作成します。

gcloud

  1. NEG の新しいバックエンド サービスを作成します。

    gcloud compute backend-services create images \
       --global \
       --enable-cdn \
       --protocol=HTTP2
    
  2. バックエンド サービスを構成して、カスタム リクエスト ヘッダー Host: backend.example.com をリクエストに追加します。

    gcloud compute backend-services update images \
       --custom-request-header "Host: backend.example.com" --global
    
  3. backend-services add-backend コマンドを使用して、インターネット NEG をバックエンド サービスに追加します。

    gcloud compute backend-services add-backend images \
      --network-endpoint-group "example-fqdn-neg" \
      --global-network-endpoint-group \
      --global
    
  4. 新しいマッチング ルールを作成して、新しいバックエンド サービスをロードバランサの URL マップに接続し、バックエンドにリクエストを転送します。

    gcloud compute url-maps add-path-matcher EXAMPLE_URL_MAP \
      --default-service=GCP_SERVICE_EXAMPLE \
      --path-matcher-name=CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE \
      --backend-service-path-rules=/CART/ID/1223515=IMAGES
    

    次のように置き換えます。

    • EXAMPLE_URL_MAP: 既存の URL マップの名前
    • GCP_SERVICE_EXAMPLE: 既存のデフォルトのバックエンド サービスの名前
    • CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE: この新しいパスルールの名前
    • /CART/ID/1223515 パス
    • IMAGES: インターネット NEG が接続された新しいバックエンド サービスの名前

外部 HTTP(S) ロードバランサのテスト

ロードバランサを構成したので、ロードバランサの IP アドレスにトラフィックを送信できるようになりました。ドメインを構成した場合、ドメイン名にトラフィックを送信することもできます。ただし、DNS の伝播が完了するまでに時間がかかることがあるため、テスト用の IP アドレスで始めることもできます。

  1. Google Cloud Console の [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. 作成したロードバランサをクリックします。
  3. ロードバランサの IP アドレスをメモします。
  4. HTTP ロードバランサを作成した場合は、ウェブブラウザで http://IP_ADDRESS に移動してロードバランサをテストできます。IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。helloworld サービスのホームページが表示されます。

    HTTPS ロードバランサを作成した場合は、ウェブブラウザで https://IP_ADDRESS に移動してロードバランサをテストできます。IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。helloworld サービスのホームページが表示されます。

    結果に問題があり、Google マネージド証明書を使用している場合は、証明書リソースのステータスが ACTIVE であることを確認します。詳しくは、Google マネージド SSL 証明書リソースのステータスをご覧ください。

    あるいは、ローカルマシンのコマンドラインから curl を使用することもできます。IP_ADDRESS は、ロードバランサの IPv4 アドレスに置き換えます。

    Google マネージド証明書を使用している場合は、ロードバランサの IP アドレスを指すドメインをテストします。次に例を示します。

    curl -s 'backend.example.com:443' --connect-to test.example.com:443:IP_ADDRESS:443
    

  5. (省略可)カスタム ドメインを使用する場合は、更新された DNS 設定が反映されるまでに時間がかかる場合があります。次に、ウェブブラウザでドメイン(backend.example.com など)をテストします。

    トラブルシューティングについては、カスタムの送信元とインターネット NEG に関する問題のトラブルシューティングをご覧ください。

Cloud CDN のテスト

テスト 1: バケットのエンドポイントに直接ヒットする

このテストでは、VM の time コマンドと wget コマンドを使用します。この例では、バケット backend.example.com から /cart/id/1223515/image.jpg をダウンロードします。

出力から、リクエスト全体では 780 ミリ秒を要することを確認できます。今回は、Amazon S3 から 3.3 MB のイメージを直接取得します。

time wget backend.example.com/cart/id/1223515/image.jpg
--2020-06-26 18:22:46--  backend.example.com/cart/id/1223515/image.jpg
Resolving backend.example.com (backend.example.com)... 52.219.120.233
Connecting to backend.example.com (backend.example.com)|52.219.120.233|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3447106 (3.3M) [image/jpeg]
Saving to: '/cart/id/1223515/image.jpg.47'
/cart/id/1223515/image.jpg.47                                                 100%[==============================================================================================================================================>]   3.29M  6.25MB/s    in 0.5s
2020-06-26 18:22:47 (6.25 MB/s) - '/cart/id/1223515/image.jpg.47' saved [3447106/3447106]
real    0m0.780s
user    0m0.003s
sys     0m0.012s

テスト 2: Cloud CDN を介した最初のリクエスト

このテストでは、ロードバランサの IP アドレスを使用して /cart/id/1223515/image.jpg ファイルを取得します。これは最初のリクエストであるために失敗し、Cloud CDN は送信元(Amazon S3)から画像を取得する必要があります。出力から、リクエストが 844 ミリ秒を要したことを確認できます。

time wget http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
--2020-06-26 18:19:27--  http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
Connecting to LOAD_BALANCER_IP_ADDRESS:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3447106 (3.3M) [image/jpeg]
Saving to: '/cart/id/1223515/image.jpg.44'
/cart/id/1223515/image.jpg.44                                                 100%[==============================================================================================================================================>]   3.29M  8.23MB/s    in 0.4s
2020-06-26 18:19:28 (8.23 MB/s) - '/cart/id/1223515/image.jpg.44' saved [3447106/3447106]
real    0m0.844s
user    0m0.003s
sys     0m0.012s

テスト 3: CDN 経由の 2 回目のリクエスト

このロードバランサの IP を使用してさらに 1 つのリクエストを行います。今回は、最初の 2 つのテストよりも高速に処理されるように、キャッシュに保存されたレスポンスを取得する必要があります。

同じ LB IP LOAD_BALANCER_IP_ADDRESS を再度使用しています。出力から、リクエストに要したのがわずか 18 ミリ秒であったことを確認できます。

time wget http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
--2020-06-26 18:19:29--  http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
Connecting to LOAD_BALANCER_IP_ADDRESS:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3447106 (3.3M) [image/jpeg]
Saving to: '/cart/id/1223515/image.jpg.45'
/cart/id/1223515/image.jpg.45                                                 100%[==============================================================================================================================================>]   3.29M  --.-KB/s    in 0.008s
2020-06-26 18:19:29 (423 MB/s) - '/cart/id/1223515/image.jpg.45' saved [3447106/3447106]
real    0m0.018s
user    0m0.001s
sys     0m0.010s

ログを使用した確認

Cloud CDN のログは、Cloud CDN 対応バックエンドが接続されている外部 HTTP(S) ロードバランサに関連付けられます。ログを使用すると、リクエストがヒットまたはミスのいずれであるかを確認できます。Cloud CDN ログの詳細については、ログの表示をご覧ください。

制限事項

  • サードパーティのバケットとオブジェクトが一般公開されている必要があります。カスタムの送信元は、署名付き URL や署名付き Cookie をサポートしていません。

次のステップ

  • Cloud CDN がキャッシュからレスポンスを配信しているかどうかを確認するには、ログの表示をご覧ください。
  • キャッシュに保存可能なコンテンツと保存できないコンテンツについては、キャッシュの概要をご覧ください。
  • GFE の接続拠点を確認するには、キャッシュのロケーションをご覧ください。