マネージド インスタンス グループを使用した Cloud CDN の設定

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

この設定ガイドでは、Cloud CDN を有効にしたシンプルな外部 HTTP ロードバランサを作成する方法について説明します。ロードバランサには次のリソースがあります。
  • デフォルトの Virtual Private Cloud(VPC)ネットワーク
  • Compute Engine マネージド インスタンス グループ
  • デフォルトの URL マップ
  • 予約済み外部 IP アドレス
TLS の解除を使用するシンプルな HTTPS ロードバランサについては、シンプルな外部 HTTPS ロードバランサの設定方法をご覧ください。

IPv6 と SSL 証明書の設定を含むコンテンツ ベースのマルチリージョンの例については、マルチ リージョンのコンテンツ ベースの外部 HTTPS ロードバランサの設定をご覧ください。

一般的なコンセプトについては、外部 HTTP(S) 負荷分散の概要をご覧ください。

GKE を使用している場合は、ロードバランサは通常、Kubernetes Ingress コントローラによって構成されます。詳細については、外部負荷分散向け Ingress の構成をご覧ください。

トポロジ

このガイドでは、次の図に示す構成を作成します。

シンプルな HTTP 負荷分散(クリックして拡大)
シンプルな HTTP 負荷分散(クリックして拡大)

この図のイベントの順序は次のとおりです。

  1. クライアントが転送ルールで定義された外部 IPv4 アドレスにコンテンツのリクエストを送信します。
  2. ロードバランサは、リクエストをキャッシュの配信が可能かどうかを確認します。可能な場合、ロードバランサはリクエストされたコンテンツをキャッシュから配信します。 できない場合は、処理を続行します。
  3. 次の転送ルールによって、リクエストがターゲット HTTP プロキシに転送されます。
  4. ターゲット プロキシは、URL マップのルールを使用して、単一のバックエンド サービスがすべてのリクエストを受信していることを確認します。
  5. ロードバランサは、このバックエンド サービスにはインスタンス グループが 1 つのみ存在していることを確認し、このグループに属する仮想マシン(VM)インスタンスの 1 つにリクエストを振り向けます。
  6. その結果、その VM によって、ユーザーがリクエストしたコンテンツが配信されます。
Cloud CDN を有効にしたシンプルな HTTP(S) 負荷分散(クリックして拡大)
Cloud CDN を有効にしたシンプルな HTTP(S) 負荷分散(クリックして拡大)

権限

このガイドの手順を完了するには、プロジェクト内に Compute Engine インスタンス、ファイアウォール ルール、予約済み IP アドレスを作成する権限が必要です。プロジェクトのオーナーまたは編集者ロール、あるいは次に示す Compute Engine IAM ロールが必要です。

タスク 必要な役割
インスタンスの作成 インスタンス管理者
ファイアウォール ルールの追加と削除 セキュリティ管理者
ロードバランサのコンポーネントを作成する ネットワーク管理者
プロジェクトを作成する(省略可) プロジェクト作成者

詳細については、次のガイドをご覧ください。

マネージド インスタンス グループの作成

Compute Engine バックエンドでロードバランサを設定するには、VM がインスタンス グループに属している必要があります。このガイドでは、Apache が稼働している Linux VM からなるマネージド インスタンス グループを作成し、負荷分散を設定する方法について説明します。

このマネージド インスタンス グループの VM で外部 HTTP ロードバランサのバックエンド サーバーを実行します。わかりやすく説明するために、バックエンド サーバーはそれぞれ独自のホスト名を提供します。

Console

  1. Google Cloud Console で、[インスタンス グループ] ページに移動します。

    [インスタンス グループ] ページに移動

  2. [インスタンス グループを作成] をクリックします。
  3. 左側で [新しいマネージドインスタンスグループ]を選択します。
  4. [名前] に「lb-backend-example」と入力します。
  5. [ロケーション] で [シングルゾーン] を選択します。
  6. [リージョン] で、使用するリージョンを選択します。この例では us-east1 を使用しています。
  7. [ゾーン] で us-east1-b を選択します。
  8. [インスタンス テンプレート] で [新しいインスタンス テンプレートを作成] を選択します。
  9. [名前] に「lb-backend-template」と入力します。
  10. [ブートディスク] が Debian GNU/Linux 9 (stretch) などの Debian イメージに設定されていることを確認します。これらの手順では、apt-get などの Debian でのみ使用できるコマンドを使用します。
  11. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] の [管理] タブで、次のスクリプトを [起動スクリプト] フィールドに挿入します。

    #! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    
  12. [ネットワーキング] タブで、[ネットワーク タグ] に allow-health-check を追加します。

  13. [保存して次へ] をクリックします。

  14. [自動スケーリング モード] で [自動スケーリングしない] を選択します。

  15. [インスタンスの数] に「2」と入力します。

  16. [作成] をクリックして、新しいインスタンス グループを作成します。

gcloud

  1. テンプレートを作成します。

    gcloud compute instance-templates create lb-backend-template \
       --region=us-east1 \
       --network=default \
       --subnet=default \
       --tags=allow-health-check \
       --image-family=debian-9 \
       --image-project=debian-cloud \
       --metadata=startup-script='#! /bin/bash
         apt-get update
         apt-get install apache2 -y
         a2ensite default-ssl
         a2enmod ssl
         vm_hostname="$(curl -H "Metadata-Flavor:Google" \
         http://169.254.169.254/computeMetadata/v1/instance/name)"
         echo "Page served from: $vm_hostname" | \
         tee /var/www/html/index.html
         systemctl restart apache2'
    
  2. そのテンプレートに基づいてマネージド インスタンス グループを作成します。

    gcloud compute instance-groups managed create lb-backend-example \
       --template=lb-backend-template --size=2 --zone=us-east1-b
    

ファイアウォール ルールの構成

この例では、ファイアウォール ルール fw-allow-health-check を作成します。 これは Google Cloud ヘルスチェック システム(130.211.0.0/2235.191.0.0/16)からのトラフィックを許可する上り(内向き)ルールです。この例では、ターゲットタグ allow-health-check を使用して VM が識別されます。

Console

  1. Google Cloud Console で [ファイアウォール] ページに移動します。

    [ファイアウォール] ページに移動

  2. [ファイアウォール ルールを作成] をクリックして、2 つ目のファイアウォール ルールを作成します。
  3. [名前] に「fw-allow-health-check」と入力します。
  4. [ネットワーク] で [default] を選択します。
  5. [ターゲット] で [指定されたターゲットタグ] を選択します。
  6. [ターゲットタグ] フィールドに「allow-health-check」を入力します。
  7. [ソースフィルタ] を IP ranges に設定します。
  8. [ソース IP の範囲] を 130.211.0.0/2235.191.0.0/16 に設定します。
  9. [プロトコルとポート] で [指定したプロトコルとポート] をオンにします。
  10. [tcp] チェックボックスをオンにして、ポート番号に「80」と入力します。
  11. [作成] をクリック

gcloud

gcloud compute firewall-rules create fw-allow-health-check \
    --network=default \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp

外部 IP アドレスの予約

インスタンスが稼働し始めたところで、次にロードバランサにユーザーが接続する際に使用するグローバル静的外部 IP アドレスを設定します。

Console

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

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

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

gcloud

gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --global

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

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

ロードバランサの設定

Console

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

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

  2. [ロードバランサを作成] をクリックします。
  3. [HTTP(S) 負荷分散] で [設定を開始] をクリックします。
  4. [インターネットから自分の VM へ] を選択して、[続行] をクリックします。
  5. ロードバランサの名前に「web-map-http」を入力します。
  6. [バックエンドの設定] をクリックします。
    1. [バックエンド サービスとバックエンド バケットの作成または選択] で [バックエンド サービス] > [バックエンド サービスを作成] の順に選択します。
    2. バックエンド サービスの名前(web-backend-service など)を追加します。
    3. [プロトコル] で、HTTP を選択します。
    4. [バックエンド] > [新しいバックエンド] > [インスタンス グループ] で、インスタンス グループ lb-backend-example を選択します。
    5. 他のデフォルト設定は残します。
    6. [ヘルスチェック] で [ヘルスチェックを作成] を選択し、ヘルスチェックの名前(http-basic-check など)を追加します。
    7. プロトコルを HTTP に設定し、[保存して次へ] をクリックします。
    8. [Cloud CDN を有効にする] を選択します。
    9. 他のデフォルト設定は残します。
    10. [作成] をクリック
  7. [ホストとパスのルール] では、デフォルト設定をそのまま使用します。
  8. [フロントエンド構成] では、次の値を使用します。
    1. [プロトコル] を HTTP に設定します。
    2. [IP アドレス] を前の手順で作成した lb-ipv4-1 に設定します。
    3. [ポート] が 80 に設定され、HTTP トラフィックが許可されていることを確認します。
    4. [完了] をクリックします。
  9. [確認と完了] をクリックします。
  10. ロードバランサの構成が完了したら、[作成] をクリックします。
  11. ロードバランサの作成が完了するまで待ちます。
  12. ロードバランサの名前をクリックします。
  13. [ロードバランサの詳細] 画面で、ロードバランサの IP: ポートをメモします。

gcloud

  1. ヘルスチェックを作成します。
        gcloud compute health-checks create http http-basic-check \
            --port 80
        
  2. バックエンド サービスを作成します。
        gcloud compute backend-services create web-backend-service \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
  3. インスタンス グループをバックエンドとしてバックエンド サービスに追加します。
        gcloud compute backend-services add-backend web-backend-service \
            --instance-group=lb-backend-example \
            --instance-group-zone=us-east1-b \
            --global
        
  4. デフォルトのバックエンド サービスに受信リクエストの経路を指定する URL マップを作成します。
        gcloud compute url-maps create web-map-http \
            --default-service web-backend-service
        
  5. URL マップにリクエストの経路を指定するターゲット HTTP プロキシを作成します。
        gcloud compute target-http-proxies create http-lb-proxy \
            --url-map web-map-http
        
  6. プロキシに受信リクエストの経路を指定するグローバル転送ルールを作成します。
        gcloud compute forwarding-rules create http-content-rule \
            --address=lb-ipv4-1\
            --global \
            --target-http-proxy=http-lb-proxy \
            --ports=80
        

Cloud CDN を有効にする

バックエンド サービスの作成時に Cloud CDN をまだ有効にしていない場合は、バックエンド サービスを更新することで有効にできます。

gcloud compute backend-services update-backend web-backend-service \
    --enable-cdn

Cloud CDN で認識されるキャッシュ ディレクティブと、Cloud CDN でキャッシュに保存されないものについては、キャッシュの概要をご覧ください。

インスタンスへのトラフィックの送信

これで負荷分散サービスが稼働中になったため、転送ルールへトラフィックを送信し、各インスタンスに分散されるトラフィックを監視できます。

Console

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

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

  2. 作成したロードバランサをクリックします。
  3. [バックエンド]セクションで、VM が正常であることを確認します。[正常] 列には、両方の VM が正常であること(2/2)が示されます。それ以外の場合は、最初にページを再読み込みしてみてください。VM が正常な状態であることが Cloud Console に表示されるまでに時間がかかる場合があります。数分経ってもバックエンドが正常に動作しない場合は、ファイアウォールの構成と、バックエンド VM に割り当てられているネットワーク タグを確認します。
  4. Cloud Console でバックエンド インスタンスが正常であることを確認したら、http://IP_ADDRESS にアクセスし、ウェブブラウザでロードバランサをテストできます。IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。
  5. ページを提供したインスタンスの名前とそのゾーン(Page served from: lb-backend-example-xxxx など)を示すコンテンツを含むページがブラウザで表示されます。お使いのブラウザでこのページがレンダリングされない場合は、このガイドの構成設定を確認してください。

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-services update BACKEND_SERVICE_NAME \
    --no-enable-cdn

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

次のステップ

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