このドキュメントでは、従来のアプリケーション ロードバランサのインフラストラクチャ リソースをグローバル外部アプリケーション ロードバランサのインフラストラクチャに移行する方法について説明します。
始める前に
設定が次の前提条件を満たしていることを確認します。
デフォルト プロジェクトを設定する
コンソール
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
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 でマネージド インスタンス グループを作成する方法について説明します。マネージド インスタンス グループは、指定したインスタンス テンプレートに基づいて各マネージド インスタンスを作成します。
インスタンス テンプレートを作成する
コンソール
Google Cloud コンソールで、[インスタンス テンプレート] ページに移動します。
[インスタンス テンプレートを作成] をクリックします。
[名前] に「
lb-backend-template
」と入力します。[リージョン] で
REGION
を選択します。[ブートディスク] セクションで、ブートディスクのイメージが Debian GNU/Linux 12(bookworm)などの Debian イメージに設定されていることを確認します。以降の手順では、
apt-get
などの Debian でのみ使用できるコマンドを使用します。[詳細オプション] をクリックします。
[ネットワーキング] をクリックし、[ネットワーク タグ] フィールドに「
allow-health-check
」と入力します。[管理] をクリックし、次のスクリプトを [起動スクリプト] フィールドに入力します。
#! /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
[作成] をクリックします。
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'
マネージド インスタンス グループを作成します。
コンソール
Google Cloud コンソールの [インスタンス グループ] ページに移動します。
[インスタンス グループを作成] をクリックします。
[新しいマネージド インスタンス グループ(ステートレス)] を選択します。
[名前] に「
lb-backend-example
」と入力します。[インスタンス テンプレート] で、インスタンス テンプレート
lb-backend-template
を選択します。[ロケーション] で [シングルゾーン] を選択します。
[リージョン] で
REGION
を選択します。[ゾーン] で、[
ZONE
] を選択します。[自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択します。
[インスタンスの最小数] と [インスタンスの最大数] を
2
に設定します。[ポート マッピング] セクションで、[ポートを追加] をクリックします。
ポート名に「
http
」と入力します。ポート番号に「80
」と入力します。[作成] をクリックします。
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/22
と 35.191.0.0/16
)からのトラフィックを許可する上り(内向き)ルールです。
コンソール
Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。
[ファイアウォール ルールを作成] をクリックします。
[名前] に「
fw-allow-health-check
」と入力します。[ネットワーク] で [default] を選択します。
[ターゲット] で [指定されたターゲットタグ] を選択します。
[ターゲットタグ] フィールドに「
allow-health-check
」と入力します。[ソースフィルタ] を [IPv4 範囲] に設定します。
[送信元 IPv4 範囲] を
130.211.0.0/22
と35.191.0.0/16
に設定します。[プロトコルとポート] セクションで、[指定したプロトコルとポート] を選択します。
[TCP] チェックボックスをオンにし、ポート番号に「
80
」と入力します。[作成] をクリックします。
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 リージョンにオブジェクトを自動的に複製するマルチリージョン バケットを選択することをおすすめします。これにより、コンテンツの可用性が高まり、アプリケーション全体のフォールト トレラントが向上します。
コンソール
Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。
[作成] をクリックします。
[バケットに名前を付ける] ボックスに「
storage-backend-bucket
」と入力し、[続行] をクリックします。[データの保存場所の選択] をクリックします。
[ロケーション タイプ] を [リージョン] に設定し、
REGION
を指定します。[作成] をクリックします。
省略可: [公開アクセスの防止] ダイアログが表示された場合は、[このバケットに対する公開アクセス禁止を適用する] チェックボックスをオフにして、[確認] をクリックします。
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
「
Cloud Shell をアクティブにする」をクリックします。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 を除く)の表示を行えるようになります。公開バケットに機密情報を含めないでください。
機密情報が誤って公開される可能性を減らすため、公開オブジェクトと機密データを同じバケットに保存しないでください。
コンソール
バケット内のオブジェクトを表示する権限をすべてのユーザーに付与するには、次の操作を行います。
Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。
storage-backend-bucket
名をクリックし、[権限] タブをクリックします。[アクセス権を付与] をクリックします。
[新しいプリンシパル] ボックスに「
allUsers
」と入力します。[ロールを選択] ボックスで、[Cloud Storage] > [Storage オブジェクト閲覧者] を選択します。
[保存] をクリックします。
[一般公開アクセスを許可] をクリックします。
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 アドレスを設定します。
コンソール
Google Cloud コンソールで、[外部 IP アドレス] ページに移動します。
IPv4 アドレスを予約するには、[外部静的 IP アドレスを予約] をクリックします。
[名前] に「
lb-ipv4-1
」と入力します。[ネットワーク サービス階層] に [プレミアム] を設定します。
[IP バージョン] を IPv4 に設定します。
[タイプ] を [グローバル] に設定します。
[予約] をクリックします。
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(フロントエンド)を使用します。
コンソール
構成を開始する
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
- [ロードバランサを作成] をクリックします。
- [ロードバランサの種類] で [アプリケーション ロードバランサ(HTTP / HTTPS)] を選択し、[次へ] をクリックします。
- [インターネット接続または内部] で [インターネット接続(外部)] を選択し、[次へ] をクリックします。
- [グローバルまたはシングル リージョンのデプロイ] で [グローバル ワークロードに最適] を選択し、[次へ] をクリックします。
- [ロードバランサの世代] で [従来のアプリケーション ロードバランサ] を選択し、[次へ] をクリックします。
- [構成] をクリックします。
基本構成
- [ロードバランサ名] フィールドに「
web-map-http
」と入力します。 - [フロントエンドの構成] をクリックして次のフィールドを構成し、[完了] をクリックします。
- プロトコル: HTTP.
- IP バージョン: IPv4
- IP アドレス:
lb-ipv4-1
- ポート:
443
- [バックエンドの構成] をクリックします。
- [バックエンド サービスとバックエンド バケット] で [バックエンド サービスを作成] をクリックし、次の操作を行います。
- 次のフィールドを構成します。
- 名前:
web-backend-service
- プロトコル: HTTP
- 名前付きポート: http
- 名前:
- [バックエンド > [新しいバックエンド] セクションで、次のフィールドを構成し、[完了] をクリックします。
- インスタンス グループ: lb-backend-example
- ポート番号:
80
- [ヘルスチェック] で [ヘルスチェックを作成] をクリックし、次のフィールドを指定して [保存] をクリックします。
- 名前:
http-basic-check
- プロトコル: HTTP
- 名前:
- [ロギング] セクションで、[ロギングを有効にする] チェックボックスをオンにします。
- [作成] をクリックします。
- 次のフィールドを構成します。
- [OK] をクリックします。
- [バックエンド サービスとバックエンド バケット] で [バックエンド バケットを作成] をクリックし、次のフィールドを構成して、[作成] をクリックします。
- バックエンド バケット名:
cats
- Cloud Storage バケット:
storage-backend-bucket
- バックエンド バケット名:
- [OK] をクリックします。
- [ホストとパスのルール] をクリックします。
cats
で、[ホスト 2] フィールドに「*
」、[パス 2] フィールドに「/never-fetch/*
」と入力します。- [確認と完了] をクリックします。
- ロードバランサの構成を確認します。
- [作成] をクリックします。
gcloud
ヘルスチェックを作成します。
gcloud compute health-checks create http http-basic-check \ --port 80
バックエンド サービスを作成します。
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
インスタンス グループをバックエンドとしてバックエンド サービスに追加します。
gcloud compute backend-services add-backend web-backend-service \ --instance-group=lb-backend-example \ --instance-group-zone=ZONE \ --global
バックエンド バケットを追加します。
gcloud compute backend-buckets create cats \ --gcs-bucket-name=storage-backend-bucket
受信リクエストをバックエンド サービスとバックエンド バケットに転送する 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"
URL マップにリクエストをルーティングするターゲット HTTP プロキシを作成します。
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=web-map-http
受信リクエストをプロキシにルーティングするグローバル転送ルールを作成します。
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
インスタンスに送信されるトラフィックをテストする
ロード バランシング サービスが稼働中になったので、転送ルールへトラフィックを送信できます。また、各インスタンスに分散されるトラフィックを監視できます。
コンソール
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
[
web-map-http
] をクリックします。[フロントエンド] セクションで、ロードバランサの IP:ポート をメモします。
バックエンド インスタンスをテストするには、ウェブブラウザのアドレスバーに「
http://IP_ADDRESS
」と入力します。ページを提供したインスタンスの名前とそのゾーン(
Page served from: lb-backend-example-xxxx
など)を示すコンテンツを含むページがブラウザで表示されます。バックエンド バケットをテストするには、ウェブブラウザのアドレスバーに「
http://IP_ADDRESS/never-fetch/three-cats.jpg
」と入力します。ブラウザで画像がレンダリングされます。
従来のアプリケーション ロードバランサのリソースを移行する
このセクションでは、バックエンド サービス、バックエンド バケット、転送ルールをグローバル外部アプリケーション ロードバランサ インフラストラクチャに移行します。
バックエンド サービスを移行する
移行用にバックエンド サービスを準備します。
gcloud compute backend-services update web-backend-service \ --external-managed-migration-state=PREPARE \ --global
しばらく待ちます(約 6 分)。
トラフィック(10% など)をバックエンド サービスに送信します。
gcloud compute backend-services update web-backend-service \ --external-managed-migration-state=TEST_BY_PERCENTAGE \ --external-managed-migration-testing-percentage=10 \ --global
しばらく待ちます(約 6 分)。
リソースの準備が整うと、リソースはリクエストの 10% をグローバル外部アプリケーション ロードバランサ インフラストラクチャに、90% を従来のアプリケーション ロードバランサ インフラストラクチャに送信します。
バックエンド サービスにアクセスします。
ウェブブラウザのアドレスバーに「
http://IP_ADDRESS
」と入力します。Page served from: lb-backend-example-xxxx
メッセージが表示された場合は、次のコマンドを実行して割合を増やします。gcloud compute backend-services update web-backend-service \ --external-managed-migration-state=TEST_BY_PERCENTAGE \ --external-managed-migration-testing-percentage=50 \ --global
100% に達するまでこのプロセスを繰り返します。
省略可: バックエンド サービスのログを確認します。
テストを完了し、すべてのトラフィックをバックエンド サービスに送信します。
gcloud compute backend-services update web-backend-service \ --external-managed-migration-state=TEST_ALL_TRAFFIC \ --global
省略可: バックエンド サービスのログを確認します。
バックエンド サービスのスキームを
EXTERNAL_MANAGED
に変更します。gcloud compute backend-services update web-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
バックエンド サービスがグローバル外部アプリケーション ロードバランサ インフラストラクチャに完全に移行されるまで、しばらく待ちます(約 6 分)。
省略可: バックエンド サービスのログを確認します。ロード バランシング スキームが
EXTERNAL_MANAGED
と表示されます。
バックエンド バケットを移行する
移行用にバックエンド バケットを準備します。
gcloud compute forwarding-rules update web-map-http-forwarding-rule \ --external-managed-backend-bucket-migration-state=PREPARE \ --global
しばらく待ちます(約 6 分)。
トラフィック(10% など)をバックエンド バケットに送信します。
gcloud 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% を従来のアプリケーション ロードバランサ インフラストラクチャに送信します。
バックエンド バケットにアクセスします。
ウェブブラウザのアドレスバーに「
http://IP_ADDRESS/never-fetch/three-cats.jpg
」と入力します。猫の画像が表示された場合は、次のコマンドを実行して割合を増やします。100% に達するまでこのプロセスを繰り返します。gcloud 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
省略可: バックエンド バケットのログを確認します。
テストを完了し、すべてのトラフィックをバックエンド バケットに送信します。
gcloud compute forwarding-rules update web-map-http-forwarding-rule \ --external-managed-backend-bucket-migration-state=TEST_ALL_TRAFFIC \ --global
省略可: バックエンド バケットのログを確認します。
転送ルールを移行する
転送ルールのスキームを
EXTERNAL_MANAGED
に変更します。gcloud compute forwarding-rules update web-map-http-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
転送ルールがグローバル外部アプリケーション ロードバランサ インフラストラクチャに完全に移行されるまで、しばらく待ちます(約 6 分)。
省略可: 転送ルールのログをチェックします。ロード バランシング スキームが
EXTERNAL_MANAGED
と表示されます。