バックエンド バケットを使用した Cloud CDN の設定

Cloud CDN は、Google Cloud のグローバル外部 HTTP(S) ロードバランサを利用して、ルーティング、ヘルスチェック、エニーキャスト IP のサポートを提供します。グローバル外部 HTTP(S) ロードバランサには、Compute Engine VM インスタンス、Google Kubernetes Engine Pod、Cloud Storage バケット、Google Cloud 以外の外部送信元など、複数のバックエンド インスタンス タイプを設定できるため、Cloud CDN を有効にするバックエンド(送信元)を選択できます。

この設定ガイドでは、Cloud CDN を有効にしたシンプルな外部 HTTP(S) ロードバランサを作成する方法を説明します。この例では、次のリソースを使用します。

  • デフォルトの Virtual Private Cloud(VPC)ネットワーク
  • デフォルトの URL マップ
  • 予約済み外部 IP アドレス
  • バックエンドとしての Cloud Storage バケット
  • Cloud Storage バケットのラッパーとして機能する単一のロードバランサ バックエンド バケット

バックエンド バケットは以下の対象をサポートします。

Cloud CDN の仕組みについては、Cloud CDN の概要をご覧ください。

ロードバランサのバックエンド

外部 HTTP(S) ロードバランサは、URL マップを使用して、指定された URL からのトラフィックを指定されたサービスに転送します。次の表に、コンテンツとサービスをホストできるバックエンドの種類をまとめています。

ロードバランサのバックエンド構成 一般的なコンテンツ タイプ バックエンド タイプ
バックエンド サービス 動的(データなど)
  • 非マネージド インスタンス グループ
  • マネージド インスタンス グループ
  • Google Cloud 内部のネットワーク エンドポイント グループ
  • Google Cloud 外部のネットワーク エンドポイント グループ
バックエンド バケット 静的(画像など)
  • Cloud Storage バケット(このページで説明)

始める前に

Cloud Storage バケットを作成する

ロードバランサにまだ割り当てられていない既存の Cloud Storage バケットがある場合は、次の手順にスキップできます。

Cloud CDN で外部 HTTP(S) ロードバランサのバックエンドとして使用する Cloud Storage バケットを作成する場合は、マルチリージョン バケットを選択することをおすすめします。このバケットは、複数の Google Cloud リージョンにオブジェクトを自動的に複製します。これにより、コンテンツの可用性が高まり、アプリケーション全体のフォールト トレラントが向上します。

Console

  1. Google Cloud Console で、Cloud Storage ブラウザを開きます。

    Storage ブラウザを開く

  2. [バケットを作成] をクリックします。
  3. 以下の表にあるフィールドの値を指定します。その他の値はデフォルトのままにします。

    プロパティ 値(値を入力するか、指定されたオプションを選択)
    名前 バケットごとに、グローバルに一意の名前を入力します。入力した名前が一意でない場合は、別の名前を入力するよう求めるメッセージが表示されます。
    ロケーション タイプ マルチリージョン
    ロケーション [米国(マルチリージョン)] などのリージョンを選択します。
    デフォルトのストレージ クラス Standard
    アクセス制御 均一
  4. [作成] をクリックします。

  5. 新たに作成された Cloud Storage バケットの名前をメモします。これは次のステップで使用します。

gsutil

gsutil mb -p PROJECT_ID -c standard -l us-east1 -b on gs://BUCKET_NAME

Cloud Storage バケットにグラフィック ファイルをコピーする

設定をテストするには、Cloud Storage の公開バケットから独自の Cloud Storage バケットにグラフィック ファイルをコピーします。

  1. Cloud Shell で次のコマンドを実行します。BUCKET_NAME を一意の Cloud Storage バケット名に置き換えます。

    gsutil cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_NAME/static/us/
    
  2. Cloud Console で [更新] をクリックして、グラフィック ファイルがコピーされたことを確認します。

Cloud Storage バケットを一般公開する

この例では、Cloud Storage バケットを一般公開します。これは、公開コンテンツで推奨される方法です。この設定を使用すると、インターネット上のすべてのユーザーが、オブジェクトとそのメタデータ(ACL を除く)を表示および一覧表示できます。公開オブジェクト専用の Cloud Storage バケットを作成することをおすすめします。詳細については、推奨されるバケット アーキテクチャをご覧ください。

Cloud Storage バケットを公開する代わりに、次の方法を使用することもできます。

次の手順により、すべてのユーザーに Cloud Storage バケット内のオブジェクトを参照するためのアクセス権が付与され、バケットが一般公開されます。

Console

  1. Google Cloud Console で、Cloud Storage ブラウザを開きます。

    Storage ブラウザを開く

  2. バケットに移動して、[権限] タブをクリックします。
  3. [メンバーを追加] をクリックします。
  4. [新しいメンバー] に「allUsers」と入力します。
  5. ロールとして [Cloud Storage] > [Storage オブジェクト閲覧者] を選択します。
  6. [保存] をクリックします。

gsutil

gsutil iam ch allUsers:objectViewer gs://BUCKET_NAME

外部 IP アドレスの予約

Cloud Storage バケットが稼働を開始したところで、次に顧客がロードバランサに接続する際に使用するグローバル静的外部 IP アドレスを設定します。

この手順は省略可能ですが、静的外部 IP アドレスはドメインを指定するための単一アドレスを提供するため、行うことをおすすめします。

Console

  1. Google Cloud Console で、[外部 IP アドレス] ページに移動します。

    [外部 IP アドレス] ページに移動

  2. IPv4 アドレスを予約するには、[静的アドレスを予約] をクリックします。
  3. [名前] に「example-ip」を割り当てます。
  4. [ネットワーク サービス階層] を [プレミアム] に設定します。
  5. [IP バージョン] で [IPv4] をオンにします。
  6. [タイプ] で [グローバル] をオンにします。
  7. [予約] をクリックします。

gcloud

gcloud compute addresses create example-ip \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

予約されている IPv4 アドレスをメモします。

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

外部 HTTP(S) ロードバランサの作成

この手順では、ロードバランサのバックエンド バケットを作成します。これは、Cloud Storage バケットのラッパーとして機能します。バックエンド バケットを作成または編集するときに、Cloud CDN を有効にできます。

コンソール

外部 HTTP(S) ロードバランサの構成プロセスを開始する

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

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

  2. [HTTP(S) 負荷分散] で [構成を開始] をクリックします。
  3. [インターネットから自分の VM へ] をオンにし、[続行] をクリックします。
  4. [名前] を http-lb に設定し、次の手順に進みます。

バックエンドを構成して Cloud CDN を有効にする

ロードバランサのバックエンド バケットを作成します。これは、Cloud Storage バケットのラッパーとして機能します。バックエンド バケットを作成または編集するときに、Cloud CDN を有効にできます。

  1. [バックエンドの構成] をクリックします。
  2. [バックエンド サービスとバックエンド バケット] で、[バックエンド サービスとバックエンド バケットの作成または選択] をクリックし、[バックエンド バケット] > [バックエンド バケットの作成] の順にクリックします。
  3. [名前] を cat-backend-bucket に設定します。この名前はグローバルに一意である必要はなく、実際の Cloud Storage バケットとは異なる名前を設定できます。
  4. [Cloud Storage バケット] で、[参照] をクリックします。
  5. 作成した Cloud Storage のグローバルに一意な BUCKET_NAME を選択し、[選択] をクリックします。
  6. [Cloud CDN を有効にする] をクリックします。

  7. [作成] をクリックします。

ホストルールとパスマッチャーを構成する

ホストルールとパスマッチャーは、外部 HTTP(S) ロードバランサの URL マップの構成要素です。

[ホストとパスのルール] では、デフォルト設定をそのまま使用できます。

カスタマイズされた設定の例については、バックエンド バケットをロードバランサに追加するをご覧ください。

ホストルールとパスマッチャーの詳細については、URL マップの概要をご覧ください。

フロントエンドを構成する

  1. [フロントエンドの設定] をクリックします。
  2. オプションが次の値で構成されていることを確認します。

    プロパティ 値(値を入力するか、指定されたオプションを選択)
    プロトコル HTTP
    ネットワーク サービス階層 Premium
    IP バージョン IPv4
    IP アドレス example-ip
    ポート 80

    HTTP ロードバランサの代わりに HTTPS ロードバランサを作成する場合は、SSL 証明書gcloud compute ssl-certificates list)が必要です。また、次のようにフィールドに入力する必要があります。

    プロパティ 値(値を入力するか、指定されたオプションを選択)
    プロトコル HTTPS
    ネットワーク サービス階層 Premium
    IP バージョン IPv4
    IP アドレス example-ip
    ポート 443
    証明書 証明書を選択する、または新しい証明書を作成する
  3. [完了] をクリックします。

構成を確認する

  1. [確認と完了] をクリックします。
  2. [バックエンド バケット]、[ホストとパスのルール]、[フロントエンド] セクションを確認します。
  3. [作成] をクリックします。
  4. ロードバランサの作成が完了するまで待ちます。
  5. ロードバランサの名前(http-lb)をクリックします。
  6. ロードバランサの IP アドレスをメモします(次のタスクで使用します)。次のタスクでは IP_ADDRESS とします。

gcloud

バックエンドを構成する

gcloud compute backend-buckets create cat-backend-bucket \
    --gcs-bucket-name=BUCKET_NAME \
    --enable-cdn

URL マップの構成

gcloud compute url-maps create http-lb \
    --default-backend-bucket=cat-backend-bucket

ターゲット プロキシの構成

gcloud compute target-http-proxies create http-lb-proxy \
    --url-map=http-lb

転送ルールを構成する

gcloud compute forwarding-rules create http-lb-forwarding-rule \
    --address=example-ip \
    --global \
    --target-http-proxy=http-lb-proxy \
    --ports=80

バックエンド バケットへのトラフィックの送信

グローバル転送ルールの作成後、構成が全世界に反映されるまでに数分かかることがあります。数分後、ロードバランサの IP アドレスへのトラフィック送信を開始できます。

Console

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

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

  2. http-lb をクリックして、先ほど作成したロードバランサを展開します。

    [バックエンド] セクションで、バックエンド バケットが正常であることを確認します。バックエンド バケットの横に緑色のチェックマークが表示されます。それ以外の場合は、最初にページを再読み込みしてみてください。Cloud Console で、バックエンドが正常と表示されるまでに時間がかかることがあります。

  3. Cloud Console でバックエンド バケットが正常であることが表示されたら、http://IP_ADDRESS/static/us/three-cats.jpg にアクセスし、ウェブブラウザでロードバランサをテストできます。IP_ADDRESSロードバランサの IP アドレスに置き換えます。グラフィック ファイルを含むコンテンツのページがブラウザに表示されます。

gcloud

curl コマンドを使用して、URL からのレスポンスをテストします。IP_ADDRESSロードバランサの IPv4 アドレスに置き換えます。

予約されている IPv4 アドレスをメモします。

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

curl リクエストを送信します。

curl http://IP_ADDRESS/static/us/three-cats.jpg

Cloud CDN が動作していることを確認する

http://ip-address/static/us/three-cats.jpg ページを短時間で何度か再読み込みすると、複数のキャッシュ ヒットが発生します。

次のログエントリはキャッシュ ヒットを示しています。キャッシュ ヒットを表示するには、Google Cloud Console でログビューアを開き、転送ルール名でフィルタリングします。

ログビューアを開く

ログビューア

{
    insertId: "1oek5rg3l3fxj7"
    jsonPayload: {
        @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
        cacheId: "SFO-fbae48ad"
        statusDetails: "response_from_cache"
    }
    httpRequest: {
        requestMethod: "GET"
        requestUrl: "http://LOAD_BALANCER_IP_ADDRESS/static/us/three-cats.jpg"
        requestSize: "577"
        status: 254
        responseSize: "157"
        userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
        remoteIp: "CLIENT_IP_ADDRESS"
        cacheHit: true
        cacheLookup: true
    }
    resource: {
        type: "http_load_balancer"
        labels: {
            zone: "global"
            url_map_name: "URL_MAP_NAME"
            forwarding_rule_name: "FORWARDING_RULE_NAME"
            target_proxy_name: "TARGET_PROXY_NAME"
            backend_service_name: ""
            project_id: "PROJECT_ID"
        }
    }
    timestamp: "2020-06-08T23:41:25.078651Z"
    severity: "INFO"
    logName: "projects/PROJECT_ID/logs/requests"
    trace: "projects/PROJECT_ID/traces/241d69833e64b3bf83fabac8c873d992"
    receiveTimestamp: "2020-06-08T23:41:25.588272510Z"
    spanId: "7b6537d3672e08e1"
}

Console

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

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

  2. http-lb をクリックして、先ほど作成したロードバランサを展開します。

    [バックエンド] セクションで、バックエンド バケットが正常であることを確認します。バックエンド バケットの横に緑色のチェックマークが表示されます。それ以外の場合は、最初にページを再読み込みしてみてください。Cloud Console で、バックエンドが正常と表示されるまでに時間がかかることがあります。

  3. Cloud Console でバックエンド バケットが正常であることが表示されたら、http://IP_ADDRESS/static/us/three-cats.jpg にアクセスし、ウェブブラウザでロードバランサをテストできます。IP_ADDRESSロードバランサの IP アドレスに置き換えます。グラフィック ファイルを含むコンテンツのページがブラウザに表示されます。

gcloud

curl コマンドを使用して、URL からのレスポンスをテストします。IP_ADDRESSロードバランサの IPv4 アドレスに置き換えます。

予約されている IPv4 アドレスをメモします。

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

curl リクエストを送信します。

curl http://IP_ADDRESS/static/us/three-cats.jpg

コンテンツは Cloud Storage から取得され、Cloud CDN によってキャッシュに保存されます。コンテンツが期限切れになると検証されて再取得されますが、それ以外の場合はキャッシュから削除されます。TTL よりも前に更新が必要なコンテンツは無効にして、Cloud Storage から再取得できます。

キャッシュ モードと TTL の使用

送信元からの静的レスポンスを自動的にキャッシュに保存するには、CACHE_ALL_STATIC キャッシュ モード設定(ベータ版)を使用します。

HTTP キャッシュ ディレクティブを使用して、キャッシュへの保存をレスポンスごとに制御するには、元のヘッダー(USE_ORIGIN_HEADERS)を使用するようにキャッシュ モードを設定します。Cloud CDN が認識するキャッシュ ディレクティブ、および Cloud CDN によってキャッシュに保存されないコンテンツについては、キャッシュ可能なコンテンツおよびキャッシュ不可のコンテンツをご覧ください。

送信元がユーザーごとに動的なコンテンツを配信していない場合は、送信元からのすべてのレスポンスをキャッシュに保存することをおすすめします。これを行うには、FORCE_CACHE_ALL モードを使用します。このモードでは、コンテンツ タイプやキャッシュ ディレクティブに関係なく、すべてのレスポンスがキャッシュに保存されます。

バックエンドで Cloud CDN を有効にするときに明示的にキャッシュ モードを選択しない場合は、次のデフォルトが適用されます。

  • ベータ版。Cloud CDN を有効にするときにキャッシュ モードを指定しない場合、API と gcloud コマンドライン ツールはデフォルトで USE_ORIGIN_HEADERS に設定されます。バックエンドで Cloud CDN を有効にする場合、Cloud Console(サポートされている場合)はデフォルトで CACHE_ALL_STATIC に設定されます。

  • 一般提供。新たに Cloud CDN 対応になるすべてのバックエンドは、構成方法(Cloud Console、API、gcloud ツール)に関係なく、デフォルトで CACHE_ALL_STATIC に設定されます。

Cloud CDN が有効になっている新しいバックエンド バケットは、デフォルトで自動的に CACHE_ALL_STATIC モードに設定されます。

  1. バックエンド バケットで Cloud CDN を有効にします。
  2. すべての静的コンテンツを自動的にキャッシュに保存するように、キャッシュ モードを設定します。
  3. 適切なデフォルトの TTL(1 日など)を設定して、Cloud CDN がキャッシュに保存できるようにします。

Cloud CDN を無効にする

Console

単一のバックエンド バケットを対象に Cloud CDN を無効にする

  1. Google Cloud Console で、[Cloud CDN] ページに移動します。

    Cloud CDN ページに移動

  2. 送信元の行の右側で [メニュー] をクリックし、[編集] を選択します。
  3. Cloud CDN の使用を停止するバックエンド バケットのチェックボックスをオフにします。
  4. [更新] をクリックします。

送信元のすべてのバックエンド バケットを対象に Cloud CDN の削除を実施する

  1. Cloud Console で、[Cloud CDN] ページに移動します。

    Cloud CDN ページに移動

  2. 送信元の行の右側で [メニュー] をクリックし、[削除] を選択します。
  3. 確認のため、もう一度 [削除] をクリックします。

gcloud

gcloud compute backend-buckets update BACKEND_BUCKET_NAME \
    --no-enable-cdn

Cloud CDN を無効にしても、キャッシュの無効化や消去は行われません。Cloud CDN を無効にして再度有効にすると、キャッシュに保存されたコンテンツの大半はキャッシュに残っています。キャッシュのコンテンツを使用しないようにするには、コンテンツの無効化が必要です。

次のステップ

  • キャッシュに保存されるコンテンツの詳細については、キャッシュの概要をご覧ください。
  • GKE で Cloud CDN を使用するには、Ingress の機能をご覧ください。
  • Cloud CDN がキャッシュからレスポンスを配信しているかどうかを確認するには、ログの表示をご覧ください。
  • よくある問題と解決策については、トラブルシューティングをご覧ください。