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

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

この設定ガイドでは、Cloud CDN を有効にした Compute Engine マネージド インスタンス グループ バックエンドで外部 HTTP(S) ロードバランサを作成する方法を説明します。

この例がユースケースと一致しない場合は、次のいずれかのページをご覧ください。

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

ロードバランサのトポロジ

HTTPS ロードバランサの場合は、次の図に示す構成を作成します。

マネージド インスタンス グループ(MIG)バックエンドを使用した HTTPS ロードバランサ。
図 1. マネージド インスタンス グループ(MIG)バックエンドを使用した HTTPS ロードバランサ(クリックして拡大)

HTTP ロードバランサの場合は、次の図に示す構成を作成します。

マネージド インスタンス グループ(MIG)バックエンドを使用した HTTP ロードバランサ。
図 2. マネージド インスタンス グループ(MIG)のバックエンドを使用した HTTP ロードバランサ(クリックして拡大)

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

  1. クライアントが転送ルールで定義された外部 IPv4 アドレスにコンテンツのリクエストを送信します。
  2. ロードバランサは、リクエストをキャッシュの配信が可能かどうかを確認します。可能な場合、ロードバランサはリクエストされたコンテンツをキャッシュから配信します。できない場合は、処理を続行します。

  3. HTTPS ロードバランサの場合、リクエストは、転送ルールによってターゲット HTTPS プロキシに転送されます。

    HTTP ロードバランサの場合、リクエストは、転送ルールによってターゲット HTTP プロキシに転送されます。

  4. ターゲット プロキシは、URL マップのルールを使用して、単一のバックエンド サービスがすべてのリクエストを受信していることを確認します。

  5. ロードバランサは、このバックエンド サービスにはインスタンス グループが 1 つのみ存在していることを確認し、このグループに属する仮想マシン(VM)インスタンスの 1 つにリクエストを振り向けます。

  6. その結果、その VM によって、ユーザーがリクエストしたコンテンツが配信されます。

マネージド インスタンス グループ(MIG)バックエンドと Cloud CDN を有効にした HTTP(S) ロード バランシング。
マネージド インスタンス グループ(MIG)バックエンドと Cloud CDN を有効にした HTTP(S) ロード バランシング(クリックして拡大)

始める前に

ロードバランサを作成する前に次の手順を完了します。

SSL 証明書リソースを設定する

HTTPS ロードバランサの場合、SSL 証明書リソースは、次のように作成します。

Google マネージド証明書を使用することをおすすめします。

この例では、SSL 証明書リソース www-ssl-cert をすでに利用していることを前提としています。

権限を設定する

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

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

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

マネージド インスタンス グループを作成する

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

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

マネージド インスタンス グループを作成する前に、インスタンス テンプレートを作成します。

Console

  1. Cloud Console で [インスタンス テンプレート] ページに移動します。

    [インスタンス テンプレート] に移動

  2. [インスタンス テンプレートを作成] をクリックします。

  3. [名前] に「lb-backend-template」と入力します。

  4. [ブートディスク] が Debian GNU/Linux 9 (stretch) などの Debian イメージに設定されていることを確認します。これらの手順では、apt-get などの Debian でのみ使用できるコマンドを使用します。

  5. [ファイアウォール] オプションは構成しないでください。

    外部 HTTP(S) ロードバランサはプロキシであるため、[ファイアウォール] で、[HTTPS トラフィックを許可する] や [HTTP トラフィックを許可する] を選択する必要はありません。ファイアウォール ルールの構成では、このロードバランサに必要な唯一のファイアウォール ルールを作成します。

  6. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] の [管理] タブで、次のスクリプトを [起動スクリプト] フィールドに挿入します。

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

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

gcloud

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

    gcloud compute instance-templates create TEMPLATE_NAME \
       --region=us-east1 \
       --network=default \
       --subnet=default \
       --tags=allow-health-check \
       --image-family=debian-9 \
       --image-project=debian-cloud \
       --metadata=startup-script='#! /bin/bash
         sudo apt-get update
         sudo apt-get install apache2 -y
         sudo a2ensite default-ssl
         sudo a2enmod ssl
         sudo vm_hostname="$(curl -H "Metadata-Flavor:Google" \
       http://169.254.169.254/computeMetadata/v1/instance/name)"
       sudo echo "Page served from: $vm_hostname" | \
       tee /var/www/html/index.html
       sudo systemctl restart apache2'
    

マネージド インスタンス グループを作成して、インスタンス テンプレートを選択します。

Console

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

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

  2. [インスタンス グループを作成] をクリックします。
  3. 左側で [新しいマネージド インスタンス グループ(ステートレス)] を選択します。
  4. [名前] に「lb-backend-example」と入力します。
  5. [ロケーション] で [シングルゾーン] を選択します。
  6. [リージョン] で、使用するリージョンを選択します。この例では us-east1 を使用しています。
  7. [ゾーン] で us-east1-b を選択します。
  8. [インスタンス テンプレート] で、インスタンス テンプレート lb-backend-template を選択します。
  9. [自動スケーリング モード] で [自動スケーリングしない] を選択します。
  10. [インスタンスの数] に「2」と入力します。
  11. 新しいインスタンス グループを作成するには、[作成] をクリックします。

gcloud

  1. そのテンプレートに基づいてマネージド インスタンス グループを作成します。

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

インスタンス グループへの名前付きポートの追加

インスタンス グループに HTTP サービスを定義し、ポート名を該当するポートにマッピングします。ロード バランシング サービスは、名前付きポートにトラフィックを転送します。詳細については、名前付きポートをご覧ください。

Console

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

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

  2. インスタンス グループの名前をクリックします(この例では lb-backend-example)。
  3. インスタンス グループの [概要] ページで、[EDIT] をクリックします。
  4. [ポート マッピング] で、[ポートを追加] をクリックします。
    1. ポート名に「http」と入力します。ポート番号に「80」と入力します。
  5. [保存] をクリックします。

gcloud

gcloud compute instance-groups set-named-ports コマンドを使用します。

gcloud compute instance-groups set-named-ports lb-backend-example \
    --named-ports http:80 \
    --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. [ソースフィルタ] を [IPv4 範囲] に設定します。
  8. [送信元 IPv4 範囲] を 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:80

外部 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 \
    --network-tier=PREMIUM \
    --global

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

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

ロードバランサの設定

この例では、クライアントとロードバランサ間に HTTP または HTTPS を使用します。HTTPS の場合、プロキシを構成するために SSL 証明書リソースが 1 つ以上必要になります。Google マネージド証明書を使用することをおすすめします。

フロントエンドで HTTPS を使用している場合でも、バックエンドでは HTTP を使用できます。Google では、Google Cloud VPC ネットワーク内にある Google Front End(GFE)とバックエンド間のトラフィックを自動的に暗号化します。

Console

構成を開始する
  1. Google Cloud Console で、[ロード バランシング] ページに移動します。
    [ロード バランシング] に移動
  2. [HTTP(S) ロード バランシング] で [構成を開始] をクリックします。
  3. [インターネット接続または内部専用] で [インターネットから自分の VM へ] を選択します。
  4. [グローバル / リージョン] で、[グローバル HTTP(S) ロードバランサ(従来型)] を選択します。
  5. [続行] をクリックします。
  6. ロードバランサの [名前] には、「web-map-https」や「web-map-http」などを入力します。
  7. [バックエンドの構成] をクリックします。
    1. [バックエンド サービスとバックエンド バケットの作成または選択] で、[バックエンド サービス] > [バックエンド サービスを作成] の順に選択します。
    2. バックエンド サービスの名前(web-backend-service など)を追加します。
    3. [プロトコル] で、HTTP を選択します。
    4. [名前付きポート] に「http」と入力します。
    5. [バックエンド] > [新しいバックエンド] > [インスタンス グループ] で、インスタンス グループ lb-backend-example を選択します。
    6. [ポート番号] に「80」と入力します。
    7. 他のデフォルト設定は残します。
    8. [ヘルスチェック] で [ヘルスチェックを作成] を選択し、ヘルスチェックの名前(http-basic-check など)を追加します。
    9. プロトコルを HTTP に設定し、[保存して次へ] をクリックします。
    10. [Cloud CDN を有効にする] を選択します。
    11. (省略可)キャッシュ モードTTL の設定を変更します。
    12. 他のデフォルト設定は残します。
    13. [作成] をクリックします。
  8. [ホストとパスのルール] で、デフォルト設定をそのまま使用します。
  9. [フロントエンド構成] で、次の値を使用します。
    1. [プロトコル] を HTTPS または HTTP に設定します。
    2. [IP アドレス] を前の手順で作成した lb-ipv4-1 に設定します。
    3. [ポート] が、HTTPS トラフィックを許可する 443 か、HTTP トラフィックを許可する 80 になっていることを確認します。
    4. [HTTPS] を選択した場合は、次の操作を行います。
      1. [証明書] をクリックし、プライマリ SSL 証明書を選択します。
      2. (省略可)[HTTP から HTTPS へのリダイレクトを有効にする] チェックボックスをオンにして、ポート 80 からポート 443 へのリダイレクトを有効にします。

        このチェックボックスをオンにすると、HTTPS ロードバランサと同じ IP アドレスを使用し、受信する HTTP リクエストをロードバランサの HTTPS フロントエンドにリダイレクトする追加の部分的な HTTP ロードバランサが作成されます。

        このチェックボックスは、HTTPS プロトコルが選択されていて、予約済みの IP アドレスが使用されている場合にのみ選択できます。

    5. [完了] をクリックします。
  10. [確認と完了] をクリックします。
  11. ロードバランサの構成が完了したら、[作成] をクリックします。
  12. ロードバランサの作成が完了するまで待ちます。

    HTTPS ロードバランサを作成し、[HTTP から HTTPS へのリダイレクトを有効にする] チェックボックスをクリックすると、-redirect サフィックスを付けて作成した HTTP ロードバランサも表示されます。

  13. ロードバランサの名前をクリックします。
  14. [ロードバランサの詳細] 画面で、ロードバランサの [IP:ポート] をメモします。

gcloud

  1. ヘルスチェックを作成します。
        gcloud compute health-checks create http http-basic-check \
            --port 80
        
  2. バックエンド サービスを作成します。
        gcloud compute backend-services create web-backend-service \
            --load-balancing-scheme=EXTERNAL \
            --protocol=HTTP \
            --port-name=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. HTTP 用に、受信リクエストをデフォルトのバックエンド サービスに転送する URL マップを作成します。
        gcloud compute url-maps create web-map-http \
            --default-service web-backend-service
        
  5. HTTPS 用に、受信リクエストをデフォルトのバックエンド サービスに転送する URL マップを作成します。
        gcloud compute url-maps create web-map-https \
            --default-service web-backend-service
        

HTTPS フロントエンドの設定

HTTP ロードバランサの場合、このセクションはスキップしてください。
  1. HTTPS 用に、次のリンク先で示されているようにグローバル SSL 証明書リソースを作成します。
  2. HTTPS 用に、リクエストを URL マップに転送するターゲット HTTPS プロキシを作成します。プロキシはロードバランサの一部であり、HTTPS ロードバランサ用の SSL 証明書を保持するため、この手順で証明書も読み込みます。
        gcloud compute target-https-proxies create https-lb-proxy \
            --url-map=web-map-https \
            --ssl-certificates=www-ssl-cert
        
  3. HTTPS 用に、受信リクエストをプロキシに転送するグローバル転送ルールを作成します。
        gcloud compute forwarding-rules create https-content-rule \
            --load-balancing-scheme=EXTERNAL \
            --network-tier=PREMIUM \
            --address=lb-ipv4-1 \
            --global \
            --target-https-proxy=https-lb-proxy \
            --ports=443
        

HTTP フロントエンドの設定

HTTPS ロードバランサの場合、このセクションはスキップしてください。

  1. HTTP 用に、リクエストを URL マップに転送するターゲット HTTP プロキシを作成します。
        gcloud compute target-http-proxies create http-lb-proxy \
            --url-map=web-map-http
        
  2. HTTP 用に、受信リクエストをプロキシに転送するグローバル転送ルールを作成します。
        gcloud compute forwarding-rules create http-content-rule \
            --load-balancing-scheme=EXTERNAL \
            --address=lb-ipv4-1 \
            --global \
            --target-http-proxy=http-lb-proxy \
            --ports=80
        

Cloud CDN を有効にする

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

gcloud compute backend-services update web-backend-service 
--enable-cdn
--cache-mode=CACHE_MODE

CACHE_MODE を次のいずれかに置き換えて、キャッシュ モードを設定します。

  • CACHE_All_STATIC: 静的コンテンツを自動的にキャッシュに保存します。

  • USE_ORIGIN_HEADERS(デフォルト): コンテンツをキャッシュに保存するには、送信元で有効なキャッシュ ヘッダーを設定する必要があります。

  • FORCE_CACHE_ALL: Cache-Control レスポンス ヘッダー内の privateno-store、または no-cache のディレクティブを無視して、すべてのコンテンツをキャッシュに保存します。

ドメインをロードバランサに接続する

ロードバランサが作成されたら、ロードバランサに関連付けられた IP アドレスをメモします(例: 30.90.80.100)。ドメインがロードバランサを指すようするには、ドメイン登録サービスを使用して A レコードを作成します。SSL 証明書に複数のドメインを追加する場合は、それぞれについて A レコードを追加して、すべてがロードバランサの IP アドレスを指すようにする必要があります。たとえば、www.example.comexample.comA レコードを作成するには、次のようにします。

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

Google Domains を使用している場合は、Google Domains のヘルプページで詳細をご確認ください。

インスタンスに送信されるトラフィックのテスト

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

Console

  1. Google Cloud Console で、[ロード バランシング] ページに移動します。

    [ロード バランシング] ページに移動

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

gcloud

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

数分経過したら、次の curl コマンドを実行して設定をテストします。

curl http://IP_ADDRESS

または

curl https://HOSTNAME

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 の概要をご覧ください。