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 からのトラフィックを指定されたサービスに転送します。次の表に、コンテンツとサービスをホストできるバックエンドの種類をまとめています。
ロードバランサのバックエンド構成 | 一般的なコンテンツ タイプ | バックエンド タイプ |
---|---|---|
バックエンド サービス | 動的(データなど) |
|
バックエンド バケット | 静的(画像など) |
|
始める前に
gcloud
またはgsutil
ユーティリティを使用している場合は、クイックスタート:gsutil
ツールの使用を確認してインストールしてください。-
Console
- Google Cloud Console で、[ホーム] ページに移動します。
- Google Cloud の右側にあるプルダウン メニューでプロジェクトを選択します。
gcloud または gsutil
gcloud config set project PROJECT_ID
または
gsutil config set project PROJECT_ID
PROJECT_ID
は、このガイドで使用するプロジェクトに置き換えます。
Cloud Storage バケットを作成する
ロードバランサにまだ割り当てられていない既存の Cloud Storage バケットがある場合は、次の手順にスキップできます。
Cloud CDN で外部 HTTP(S) ロードバランサのバックエンドとして使用する Cloud Storage バケットを作成する場合は、マルチリージョン バケットを選択することをおすすめします。このバケットは、複数の Google Cloud リージョンにオブジェクトを自動的に複製します。これにより、コンテンツの可用性が高まり、アプリケーション全体のフォールト トレラントが向上します。
Console
- Google Cloud Console で、Cloud Storage ブラウザを開きます。
- [バケットを作成] をクリックします。
以下の表にあるフィールドの値を指定します。その他の値はデフォルトのままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択) 名前 バケットごとに、グローバルに一意の名前を入力します。入力した名前が一意でない場合は、別の名前を入力するよう求めるメッセージが表示されます。 ロケーション タイプ マルチリージョン ロケーション [米国(マルチリージョン)] などのリージョンを選択します。 デフォルトのストレージ クラス Standard アクセス制御 均一 [作成] をクリックします。
新たに作成された Cloud Storage バケットの名前をメモします。これは次のステップで使用します。
gsutil
gsutil mb -p PROJECT_ID -c standard -l us-east1 -b on gs://BUCKET_NAME
Cloud Storage バケットにグラフィック ファイルをコピーする
設定をテストするには、Cloud Storage の公開バケットから独自の Cloud Storage バケットにグラフィック ファイルをコピーします。
Cloud Shell で次のコマンドを実行します。
BUCKET_NAME
を一意の Cloud Storage バケット名に置き換えます。gsutil cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_NAME/never-fetch/
Cloud Console で [更新] をクリックして、グラフィック ファイルがコピーされたことを確認します。
Cloud Storage バケットを一般公開する
この例では、Cloud Storage バケットを一般公開します。これは、公開コンテンツで推奨される方法です。この設定を使用すると、インターネット上のすべてのユーザーが、オブジェクトとそのメタデータ(ACL を除く)を表示および一覧表示できます。公開オブジェクト専用の Cloud Storage バケットを作成することをおすすめします。詳細については、推奨されるバケット アーキテクチャをご覧ください。
Cloud Storage バケットを公開する代わりに、次の方法を使用することもできます。
個別の Cloud Storage バケット オブジェクトを公開して読み取り可能にする。この方法はおすすめしません。
署名付き URL を使用する。
次の手順により、すべてのユーザーに Cloud Storage バケット内のオブジェクトを参照するためのアクセス権が付与され、バケットが一般公開されます。
Console
- Google Cloud Console で、Cloud Storage ブラウザを開きます。
- バケットに移動して、[権限] タブをクリックします。
- [メンバーを追加] をクリックします。
- [新しいメンバー] に「
allUsers
」と入力します。 - ロールとして [Cloud Storage] > [Storage オブジェクト閲覧者] を選択します。
- [保存] をクリックします。
gsutil
gsutil iam ch allUsers:objectViewer gs://BUCKET_NAME
外部 IP アドレスの予約
Cloud Storage バケットが稼働を開始したところで、次に顧客がロードバランサに接続する際に使用するグローバル静的外部 IP アドレスを設定します。
この手順は省略可能ですが、静的外部 IP アドレスはドメインを指定するための単一アドレスを提供するため、行うことをおすすめします。
Console
- Google Cloud Console で、[外部 IP アドレス] ページに移動します。
- IPv4 アドレスを予約するには、[静的アドレスを予約] をクリックします。
- [名前] に「
example-ip
」を割り当てます。 - [ネットワーク サービス階層] を [プレミアム] に設定します。
- [IP バージョン] で [IPv4] をオンにします。
- [タイプ] で [グローバル] をオンにします。
- [予約] をクリックします。
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 を有効にできます。
Console
外部 HTTP(S) ロードバランサの構成プロセスを開始する
- Google Cloud Console で、[負荷分散] ページに移動します。
- [HTTP(S) 負荷分散] で [構成を開始] をクリックします。
- [インターネットから自分の VM へ] をオンにし、[続行] をクリックします。
- [名前] を
http-lb
に設定し、次の手順に進みます。
バックエンドを構成して Cloud CDN を有効にする
ロードバランサのバックエンド バケットを作成します。これは、Cloud Storage バケットのラッパーとして機能します。バックエンド バケットを作成または編集するときに、Cloud CDN を有効にできます。
- [バックエンドの構成] をクリックします。
- [バックエンド サービスとバックエンド バケット] で、[バックエンド サービスとバックエンド バケットの作成または選択] をクリックし、[バックエンド バケット] > [バックエンド バケットの作成] の順にクリックします。
- [名前] を
cat-backend-bucket
に設定します。この名前はグローバルに一意である必要はなく、実際の Cloud Storage バケットとは異なる名前を設定できます。 - [Cloud Storage バケット] で、[参照] をクリックします。
- 作成した Cloud Storage のグローバルに一意な
BUCKET_NAME
を選択し、[選択] をクリックします。 [Cloud CDN を有効にする] をクリックします。
[作成] をクリックします。
ホストルールとパスマッチャーを構成する
ホストルールとパスマッチャーは、外部 HTTP(S) ロードバランサの URL マップの構成要素です。
[ホストとパスのルール] では、デフォルト設定をそのまま使用できます。
カスタマイズされた設定の例については、バックエンド バケットをロードバランサに追加するをご覧ください。
ホストルールとパスマッチャーの詳細については、URL マップの概要をご覧ください。
フロントエンドを構成する
- [フロントエンドの構成] をクリックします。
オプションが次の値で構成されていることを確認します。
プロパティ 値(値を入力するか、指定されたオプションを選択) プロトコル HTTP ネットワーク サービス階層 Premium IP バージョン IPv4 IP アドレス example-ip
ポート 80 HTTP ロードバランサの代わりに HTTPS ロードバランサを作成する場合は、SSL 証明書(
gcloud compute ssl-certificates list
)が必要です。また、次のようにフィールドに入力する必要があります。プロパティ 値(値を入力するか、指定されたオプションを選択) プロトコル HTTPS ネットワーク サービス階層 Premium IP バージョン IPv4 IP アドレス example-ip
ポート 443 証明書 証明書を選択する、または新しい証明書を作成する [完了] をクリックします。
構成を確認する
- [確認と完了] をクリックします。
- [バックエンド バケット]、[ホストとパスのルール]、[フロントエンド] セクションを確認します。
- [作成] をクリックします。
- ロードバランサの作成が完了するまで待ちます。
- ロードバランサの名前(http-lb)をクリックします。
- ロードバランサの 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
- Google Cloud Console で、[負荷分散] ページに移動します。
http-lb
をクリックして、先ほど作成したロードバランサを展開します。[バックエンド] セクションで、バックエンド バケットが正常であることを確認します。バックエンド バケットの横に緑色のチェックマークが表示されます。それ以外の場合は、最初にページを再読み込みしてみてください。Cloud Console で、バックエンドが正常と表示されるまでに時間がかかることがあります。
Cloud Console でバックエンド バケットが正常であることが表示されたら、
http://IP_ADDRESS/never-fetch/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/never-fetch/three-cats.jpg
Cloud CDN が動作していることを確認する
http://ip-address/never-fetch/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/never-fetch/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
- Google Cloud Console で、[負荷分散] ページに移動します。
http-lb
をクリックして、先ほど作成したロードバランサを展開します。[バックエンド] セクションで、バックエンド バケットが正常であることを確認します。バックエンド バケットの横に緑色のチェックマークが表示されます。それ以外の場合は、最初にページを再読み込みしてみてください。Cloud Console で、バックエンドが正常と表示されるまでに時間がかかることがあります。
Cloud Console でバックエンド バケットが正常であることが表示されたら、
http://IP_ADDRESS/never-fetch/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/never-fetch/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 を有効にするときに明示的にキャッシュ モードを選択しない場合、API とgcloud
コマンドライン ツールはデフォルトで USE_ORIGIN_HEADERS
に設定され、Cloud Console はデフォルトで CACHE_ALL_STATIC
に設定されます。
Cloud CDN が有効になっている新しいバックエンド バケットは、デフォルトで自動的に CACHE_ALL_STATIC
モードに設定されます。
- バックエンド バケットで Cloud CDN を有効にします。
- すべての静的コンテンツを自動的にキャッシュに保存するように、キャッシュ モードを設定します。
- 適切なデフォルトの TTL(1 日など)を設定して、Cloud CDN がキャッシュに保存できるようにします。
Cloud CDN を無効にする
Console
単一のバックエンド バケットを対象に Cloud CDN を無効にする
- Google Cloud Console で、[Cloud CDN] ページに移動します。
- 送信元の行の右側で [メニュー] をクリックし、[編集] を選択します。
- Cloud CDN の使用を停止するバックエンド バケットのチェックボックスをオフにします。
- [更新] をクリックします。
送信元のすべてのバックエンド バケットを対象に Cloud CDN の削除を実施する
- Cloud Console で、[Cloud CDN] ページに移動します。
- 送信元の行の右側で [メニュー] をクリックし、[削除] を選択します。
- 確認のため、もう一度 [削除] をクリックします。
gcloud
gcloud compute backend-buckets update BACKEND_BUCKET_NAME \ --no-enable-cdn
Cloud CDN を無効にしても、キャッシュの無効化や消去は行われません。Cloud CDN を無効にして再度有効にすると、キャッシュに保存されたコンテンツの大半はキャッシュに残っています。キャッシュのコンテンツを使用しないようにするには、コンテンツの無効化が必要です。
次のステップ
- キャッシュに保存されるコンテンツの詳細については、キャッシュの概要をご覧ください。
- GKE で Cloud CDN を使用するには、Ingress の機能をご覧ください。
- Cloud CDN がキャッシュからレスポンスを配信しているかどうかを確認するには、ログの表示をご覧ください。
- よくある問題と解決策については、トラブルシューティングをご覧ください。