従来のアプリケーション ロードバランサからグローバル外部アプリケーション ロードバランサにリソースを移行する

このドキュメントでは、従来のアプリケーション ロードバランサのインフラストラクチャ リソースをグローバル外部アプリケーション ロードバランサのインフラストラクチャに移行する方法について説明します。

始める前に

設定が次の前提条件を満たしていることを確認します。

デフォルト プロジェクトの設定

コンソール

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

gcloud

gcloud config set project PROJECT_ID

PROJECT_ID は、このガイドで使用しているプロジェクトに置き換えます。

権限

このドキュメントの手順を行うには、Google Cloud プロジェクトで Compute Engine 仮想マシン(VM)インスタンス、ファイアウォール ルール、予約済み IP アドレス、Cloud Storage バケットを作成する権限が必要です。プロジェクトのオーナーまたは編集者であるか、次の Compute Engine IAM ロールが必要です。

タスク 必要なロール
インスタンスの作成 Compute インスタンス管理者(ベータ版)のロールroles/compute.instanceAdmin
ファイアウォール ルールの追加と削除 Compute セキュリティ管理者のロールroles/compute.securityAdmin
ロードバランサのコンポーネントの作成 Compute ネットワーク管理者ロールroles/compute.networkAdmin
プロジェクトの作成(省略可) プロジェクト作成者のロールroles/resourcemanager.projectCreator
Cloud Storage バケットを作成する ストレージ オブジェクト管理者のロールroles/storage.objectAdmin

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

従来のアプリケーション ロードバランサ リソースを作成する

このドキュメントでは、次の従来のアプリケーション ロードバランサ リソースを作成し、グローバル外部アプリケーション ロードバランサ インフラストラクチャに移行します。

  • VM を含むマネージド インスタンス グループ。
  • Cloud Storage バケット。
  • マネージド インスタンス グループと Cloud Storage バケットをバックエンドとして使用する HTTP 従来のアプリケーション ロードバランサ。

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

このセクションでは、Apache が実行されている Linux VM でマネージド インスタンス グループを作成する方法について説明します。マネージド インスタンス グループは、指定したインスタンス テンプレートに基づいて各マネージド インスタンスを作成します。

インスタンス テンプレートの作成

コンソール

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

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

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

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

  4. [リージョン] で、REGION を選択します。

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

  6. [詳細オプション] をクリックします。

  7. [ネットワーキング] をクリックし、[ネットワーク タグ] フィールドに「allow-health-check」と入力します。

  8. [管理] をクリックし、[起動スクリプト] フィールドに次のスクリプトを入力します。

    #! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2
    
  9. [作成] をクリックします。

gcloud

gcloud compute instance-templates create コマンドを実行してテンプレートを作成します。

gcloud compute instance-templates create lb-backend-template \
    --region=REGION \
    --network=default \
    --subnet=default \
    --tags=allow-health-check \
    --image-family=debian-12 \
    --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://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'

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

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

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

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

  3. [新しいマネージド インスタンス グループ(ステートレス)] を選択します。

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

  5. [インスタンス テンプレート] で、インスタンス テンプレート lb-backend-template を選択します。

  6. [ロケーション] で [シングルゾーン] を選択します。

  7. [リージョン] で、REGION を選択します。

  8. [ゾーン] で、[ZONE] を選択します。

  9. [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択します。

    [インスタンスの最小数] と [インスタンスの最大数] を 2 に設定します。

  10. [ポート マッピング] セクションで、[ポートを追加] をクリックします。

  11. ポート名に「http」と入力します。ポート番号に「80」と入力します。

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

gcloud

gcloud compute instance-groups managed create コマンドを実行して、テンプレートに基づいてマネージド インスタンス グループを作成します。

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

次のコマンドを実行して、インスタンス グループに名前付きポートを追加します。

gcloud compute instance-groups set-named-ports lb-backend-example \
    --named-ports http:80 \
    --zone ZONE

ファイアウォール ルールを構成する

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

コンソール

  1. Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。

    [ファイアウォール ポリシー] に移動

  2. [ファイアウォール ルールを作成] をクリックします。

  3. [名前] に「fw-allow-health-check」と入力します。

  4. [ネットワーク] で [default] を選択します。

  5. [ターゲット] で [Specified target tags] を選択します。

  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 コマンドを実行してファイアウォール ルールを作成します。

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

Cloud Storage バケットを作成する

このセクションでは、ロードバランサがアクセスする Cloud Storage バケットを作成します。本番環境のデプロイでは、複数の Google Cloud リージョンにオブジェクトを自動的に複製するマルチリージョン バケットを選択することをおすすめします。これにより、コンテンツの可用性が高まり、アプリケーション全体のフォールト トレラントが向上します。

コンソール

  1. Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。

    Cloud Storage の [バケット] に移動

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

  3. [バケットに名前を付ける] ボックスに「storage-backend-bucket」と入力し、[続行] をクリックします。

  4. [データの保存場所の選択] をクリックします。

  5. [ロケーション タイプ] を [リージョン] に設定し、REGION を指定します。

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

  7. 省略可: [公開アクセスの防止] ダイアログが表示されたら、[このバケットに対する公開アクセス禁止を適用する] チェックボックスをオフにして、[確認] をクリックします。

gcloud

gcloud storage buckets create コマンドを実行してバケットを作成します。

gcloud storage buckets create gs://storage-backend-bucket \
    --default-storage-class=standard \
    --location=REGION --uniform-bucket-level-access

Cloud Storage バケットにコンテンツを転送する

ロードバランサの作成後にバケットをテストするには、次のイメージ ファイルを一般公開の Cloud Storage バケットから独自の Cloud Storage バケットにコピーします。

gcloud

  1. [Cloud Shell をアクティブにする] をクリックします。

  2. Cloud Shell で次のコマンドを実行します。

gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://storage-backend-bucket/never-fetch/

Google Cloud コンソールで、バケットの詳細ページで [更新] をクリックし、ファイルが正常にコピーされたことを確認します。

Cloud Storage バケットを公開する

Cloud Storage バケットを公開読み取り可能にすると、インターネット上の誰でもオブジェクトの一覧の取得と表示、メタデータ(ACL を除く)の表示を行えるようになります。公開バケットに機密情報を含めないでください。

機密情報が誤って公開される可能性を減らすため、公開オブジェクトと機密データを同じバケットに保存しないでください。

コンソール

バケット内のオブジェクトを表示する権限をすべてのユーザーに付与するには、次の操作を行います。

  1. Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。

    Cloud Storage の [バケット] に移動

  2. storage-backend-bucket 名をクリックし、[権限] タブをクリックします。

  3. [アクセス権を付与] をクリックします。

  4. [新しいプリンシパル] ボックスに「allUsers」と入力します。

  5. [ロールを選択] ボックスで、[Cloud Storage] > [Storage オブジェクト閲覧者] を選択します。

  6. [保存] をクリックします。

  7. [一般公開アクセスを許可] をクリックします。

gcloud

gcloud storage buckets add-iam-policy-binding コマンドを実行して、バケット内のオブジェクトを表示する権限をすべてのユーザーに付与します。

gcloud storage buckets add-iam-policy-binding gs://storage-backend-bucket \
    --member=allUsers \
    --role=roles/storage.objectViewer

外部 IP アドレスを予約する

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

コンソール

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

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

  2. IPv4 アドレスを予約するには、[外部静的 IP アドレスを予約] をクリックします。

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

  4. [ネットワーク サービス階層] に [プレミアム] を設定します。

  5. [IP バージョン] を IPv4 に設定します。

  6. [タイプ] を [グローバル] に設定します。

  7. [予約] をクリックします。

gcloud

外部 IP アドレスを予約するには、次のコマンドを実行します。

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(フロントエンド)を使用します。

コンソール

構成を開始する

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

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

  2. [ロードバランサを作成] をクリックします。
  3. [ロードバランサの種類] で [アプリケーション ロードバランサ(HTTP / HTTPS)] を選択し、[次へ] をクリックします。
  4. [インターネット接続または内部] で [インターネット接続(外部)] を選択し、[次へ] をクリックします。
  5. [グローバルまたはシングル リージョンのデプロイ] の場合、[グローバル ワークロードに最適] を選択し、[次へ] をクリックします。
  6. [ロードバランサの世代] で [従来のアプリケーション ロードバランサ] を選択し、[次へ] をクリックします。
  7. [構成] をクリックします。

基本構成

  1. [ロードバランサ名] フィールドに「web-map-http」と入力します。
  2. [フロントエンドの構成] をクリックして次のフィールドを構成し、[完了] をクリックします。
    • プロトコル: HTTP
    • IP バージョン: IPv4
    • IP アドレス: lb-ipv4-1
    • ポート: 443
  3. [バックエンドの構成] をクリックします。
  4. [バックエンド サービスとバックエンド バケット] で [バックエンド サービスを作成] をクリックし、次の操作を行います。
    1. 次のフィールドを構成します。
      • 名前: web-backend-service
      • プロトコル: HTTP
      • 名前付きポート: http
    2. [バックエンド > 新しいバックエンド] セクションで、次のフィールドを構成し、[完了] をクリックします。
      • インスタンス グループ: lb-backend-example
      • ポート番号: 80
    3. [ヘルスチェック] で [ヘルスチェックを作成] をクリックし、次のフィールドを指定して [保存] をクリックします。
      • 名前: http-basic-check
      • プロトコル: HTTP
    4. [ロギング] セクションで、[ロギングを有効にする] チェックボックスをオンにします。
    5. [作成] をクリックします。
  5. [OK] をクリックします。
  6. [バックエンド サービスとバックエンド バケット] で [バックエンド バケットを作成] をクリックし、次のフィールドを構成して、[作成] をクリックします。
    • バックエンド バケット名: cats
    • Cloud Storage バケット: storage-backend-bucket
  7. [OK] をクリックします。
  8. [ホストとパスのルール] をクリックします。
  9. cats の場合は、[ホスト 2] フィールドに「*」、[パス 2] フィールドに「/never-fetch/*」と入力します。
  10. [確認と完了] をクリックします。
  11. ロードバランサの構成を確認します。
  12. [作成] をクリックします。

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 \
        --enable-logging \
        --logging-sample-rate=1.0 \
        --enable-cdn \
        --global
    
  3. インスタンス グループをバックエンドとしてバックエンド サービスに追加します。

    gcloud compute backend-services add-backend web-backend-service \
        --instance-group=lb-backend-example \
        --instance-group-zone=ZONE \
        --global
    
  4. バックエンド バケットを追加します。

    gcloud compute backend-buckets create cats \
        --gcs-bucket-name=storage-backend-bucket
    
  5. 受信リクエストをバックエンド サービスとバックエンド バケットに転送する URL マップを作成します。

    gcloud compute url-maps create web-map-http \
        --default-service web-backend-service
    
    gcloud compute url-maps add-path-matcher web-map-http \
        --path-matcher-name=cats-path-matcher \
        --default-backend-bucket=cats \
        --new-hosts="*" \
        --backend-bucket-path-rules="/never-fetch/*=cats"
    
  6. URL マップにリクエストをルーティングするターゲット HTTP プロキシを作成します。

    gcloud compute target-http-proxies create http-lb-proxy \
        --url-map=web-map-http
    
  7. 受信リクエストをプロキシにルーティングするグローバル転送ルールを作成します。

    gcloud compute forwarding-rules create web-map-http-forwarding-rule \
        --load-balancing-scheme=EXTERNAL \
        --address=lb-ipv4-1 \
        --global \
        --target-http-proxy=http-lb-proxy \
        --ports=80
    

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

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

コンソール

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

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

  2. [web-map-http] をクリックします。

  3. [フロントエンド] セクションで、ロードバランサの IP:ポート をメモします。

  4. バックエンド インスタンスをテストするには、ウェブブラウザのアドレスバーに http://IP_ADDRESS と入力します。

    ページを提供したインスタンスの名前とそのゾーン(Page served from: lb-backend-example-xxxx など)を示すコンテンツを含むページがブラウザで表示されます。

  5. バックエンド バケットをテストするには、ウェブブラウザのアドレスバーに http://IP_ADDRESS/never-fetch/three-cats.jpg と入力します。

    ブラウザが画像をレンダリングします。

従来のアプリケーション ロードバランサのリソースを移行する

このセクションでは、バックエンド サービス、バックエンド バケット、転送ルールをグローバル外部アプリケーション ロードバランサ インフラストラクチャに移行します。

バックエンド サービスを移行する

  1. 移行用にバックエンド サービスを準備します。

    gcloud beta compute backend-services update web-backend-service \
        --external-managed-migration-state=PREPARE \
        --global
    

    しばらく待ちます(約 6 分)。

  2. 10% などのトラフィックをバックエンド サービスに送信します。

    gcloud beta compute backend-services update web-backend-service \
        --external-managed-migration-state=TEST_BY_PERCENTAGE \
        --external-managed-migration-testing-percentage=10 \
        --global
    

    しばらく待ちます(約 6 分)。

    リソースの準備が整うと、リソースはリクエストの 10% をグローバル外部アプリケーション ロードバランサ インフラストラクチャに、90% を従来のアプリケーション ロードバランサ インフラストラクチャに送信します。

  3. バックエンド サービスにアクセスします。

    ウェブブラウザのアドレスバーに http://IP_ADDRESS と入力します。Page served from: lb-backend-example-xxxx メッセージが表示された場合は、次のコマンドを実行して割合を増やします。

    gcloud beta compute backend-services update web-backend-service \
        --external-managed-migration-state=TEST_BY_PERCENTAGE \
        --external-managed-migration-testing-percentage=50 \
        --global
    

    100% に達するまでこのプロセスを繰り返します。

  4. 省略可: バックエンド サービスのログを確認します。

  5. テストを完了し、すべてのトラフィックをバックエンド サービスに送信します。

    gcloud beta compute backend-services update web-backend-service \
        --external-managed-migration-state=TEST_ALL_TRAFFIC \
        --global
    
  6. 省略可: バックエンド サービスのログを確認します。

  7. バックエンド サービスのスキームを EXTERNAL_MANAGED に変更します。

    gcloud beta compute backend-services update web-backend-service \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --global
    

    バックエンド サービスがグローバル外部アプリケーション ロードバランサ インフラストラクチャに完全に移行されるまで、しばらく待ちます(約 6 分)。

  8. 省略可: バックエンド サービスのログを確認します。ロード バランシング スキームが EXTERNAL_MANAGED であることがわかります。

バックエンド バケットを移行する

  1. 移行用にバックエンド バケットを準備します。

    gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \
        --external-managed-backend-bucket-migration-state=PREPARE \
        --global
    

    しばらく待ちます(約 6 分)。

  2. バックエンド バケットにトラフィックの一部(10% など)を送信します。

    gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \
        --external-managed-backend-bucket-migration-state=TEST_BY_PERCENTAGE \
        --external-managed-backend-bucket-migration-testing-percentage=10 \
        --global
    

    しばらく待ちます(約 6 分)。

    リソースの準備が整うと、リソースはリクエストの 10% をグローバル外部アプリケーション ロードバランサ インフラストラクチャに、90% を従来のアプリケーション ロードバランサ インフラストラクチャに送信します。

  3. バックエンド バケットにアクセスします。

    ウェブブラウザのアドレスバーに http://IP_ADDRESS/never-fetch/three-cats.jpg と入力します。猫の画像が表示された場合は、次のコマンドを実行して割合を増やします。100% に達するまでこのプロセスを繰り返します。

    gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \
        --external-managed-backend-bucket-migration-state=TEST_BY_PERCENTAGE \
        --external-managed-backend-bucket-migration-testing-percentage=50 \
        --global
    
  4. 省略可: バックエンド バケットのログを確認します。

  5. テストを完了し、すべてのトラフィックをバックエンド バケットに送信します。

    gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \
        --external-managed-backend-bucket-migration-state=TEST_ALL_TRAFFIC \
        --global
    
  6. 省略可: バックエンド バケットのログを確認します。

転送ルールを移行する

  1. 転送ルールのスキームを EXTERNAL_MANAGED に変更します。

    gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --global
    

    転送ルールがグローバル外部アプリケーション ロードバランサ インフラストラクチャに完全に移行されるまでしばらく待ちます(約 6 分)。

  2. 省略可: 転送ルールのログをチェックします。ロード バランシング スキームが EXTERNAL_MANAGED であることがわかります。

次のステップ