このページでは、従来のアプリケーション ロードバランサの例を 2 つ紹介します。
グローバル外部アプリケーション ロードバランサとリージョン外部アプリケーション ロードバランサのトラフィック管理を構成するには、次のページをご覧ください。
始める前に
- 外部アプリケーション ロードバランサのトラフィック管理の概要をお読みください。
- URL マップ API を十分理解しておいてください。
クエリ パラメータ ベースのルーティングを設定する
次の例では、クエリ文字列を照合することで、クエリ パラメータを利用した A/B テストを行う方法を示しています。
2 つのバックエンド インスタンス グループを追加する
ルーティングを有効に活用するには、複数のバックエンドが必要です。
2 つのバックエンドを設定するには、VM が 2 つのインスタンス グループに属している必要があります。このガイドでは、Apache が稼働している Linux VM からなるマネージド インスタンス グループを作成し、負荷分散を設定する方法について説明します。
このマネージド インスタンス グループの VM で外部 HTTP ロードバランサのバックエンド サーバーを実行します。わかりやすく説明するために、バックエンド サーバーはそれぞれのホスト名をコンテンツとして提供します。
バックエンドを同じリージョンに配置して、わかりやすくしています。マルチリージョンを使用する場合は、2 つ目のリージョンのインスタンス テンプレートを設定する必要があります。
コンソール
インスタンス テンプレートを作成します。Google Cloud コンソールで [インスタンス テンプレート] ページに移動します。
- [インスタンス テンプレートを作成] をクリックします。
- [名前] に「
lb-backend-template
」と入力します。 - [ブートディスク] が Debian GNU/Linux 10 (buster) などの 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
[作成] をクリックします。
マネージド インスタンス グループを作成します。Google Cloud コンソールで [インスタンス グループ] ページに移動します。
- [インスタンス グループを作成] をクリックします。
- [新しいマネージド インスタンス グループ(ステートレス)] を選択します。詳細については、ステートレス MIG とステートフル MIG をご覧ください。
- [名前] に「
first-example-ig
」と入力します。 - [ロケーション] で [シングルゾーン] を選択します。
- [リージョン] で、使用するリージョンを選択します。この例では
us-east1
を使用しています。 - [ゾーン] で、[
us-east1-b
] を選択します。 - [インスタンス テンプレート] で、インスタンス テンプレート
lb-backend-template
を選択します。 - [インスタンスの最大数] に「
2
」と入力します。 - [自動スケーリング モード] で [
Off:do not autoscale
] を選択します。 - [作成] をクリックします。
このようなマネージド インスタンス グループをもう 1 つ作成します。2 つ目は second-example-ig
という名前を付け、lb-backend-template
テンプレートに基づいて作成します。
gcloud
インスタンス テンプレートを作成します。
gcloud compute instance-templates create `lb-backend-template` \ --region=us-east1 \ --network=default \ --subnet=default \ --tags=allow-health-check \ --image-family=debian-10 \ --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'
そのテンプレートに基づいてマネージド インスタンス グループを作成します。
gcloud compute instance-groups managed create first-example-ig \ --template=lb-backend-template --size=2 --zone=us-east1-b
同じテンプレートに基づいて 2 つ目のマネージド インスタンス グループを作成します。
gcloud compute instance-groups managed create second-example-ig \ --template=lb-backend-template --size=2 --zone=us-east1-c
ファイアウォール ルールの構成
この例では、ファイアウォール ルール fw-allow-health-check
を作成します。これは Google Cloud ヘルスチェック システム(130.211.0.0/22
と 35.191.0.0/16
)からのトラフィックを許可する上り(内向き)ルールです。この例では、ターゲットタグ allow-health-check
を使用して VM が識別されます。
コンソール
- Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。
[ファイアウォール ポリシー] に移動 - [ファイアウォール ルールを作成] をクリックして、2 つ目のファイアウォール ルールを作成します。
- [名前] に「
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 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 アドレスを設定します。
コンソール
- Google Cloud コンソールで [外部 IP アドレス] ページに移動します。
[外部 IP アドレス] ページに移動 - [静的アドレスを予約] をクリックして、IPv4 アドレスを予約します。
- [名前] に「
lb-ipv4-1
」を割り当てます。 - ネットワーク ティアを [スタンダード] に設定します。
- [IP バージョン] で [IPv4] をオンにします。
- [タイプ] で [グローバル] をオンにします。
- [予約] をクリックします。
- [タイプ] が [グローバル] に設定されていることを確認します。
- [予約] をクリックします。
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
ロードバランサのバックエンドの設定
コンソール
Google Cloud コンソールは現在、ヘッダーベースとパラメータ ベースのルーティングの設定をサポートしていません。代わりに gcloud
または API を使用してください。
gcloud
- ヘルスチェックを作成します。
gcloud compute health-checks create http http-basic-check \ --port 80
- 最初のバックエンド サービスを作成します。
-
グローバル外部アプリケーション ロードバランサの場合は、
load-balancing-scheme=EXTERNAL_MANAGED
を指定して gcloud CLI コマンドを使用します。この設定では、高度なトラフィック管理機能が提供されます。 - 従来のアプリケーション ロードバランサの場合は、
load-balancing-scheme=EXTERNAL
を使用します。
gcloud compute backend-services create service-a \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --global-health-checks \ --protocol HTTP \ --health-checks http-basic-check \ --global
-
グローバル外部アプリケーション ロードバランサの場合は、
- 2 つ目のバックエンド サービスを作成します。
gcloud compute backend-services create service-b \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --global-health-checks \ --protocol HTTP \ --health-checks http-basic-check \ --global
- 最初のインスタンス グループをバックエンドとして最初のバックエンド サービスに追加します。
gcloud compute backend-services add-backend service-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --capacity-scaler=1 \ --instance-group=first-example-ig \ --instance-group-zone=us-east1-b \ --global
- 2 つ目のインスタンス グループをバックエンドとして 2 つ目のバックエンド サービスに追加します。
gcloud compute backend-services add-backend service-b \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --capacity-scaler=1 \ --instance-group=second-example-ig \ --instance-group-zone=us-east1-c \ --global
URL マップの作成
コンソール
Google Cloud コンソールは現在、ヘッダーベースとパラメータ ベースのルーティングの設定をサポートしていません。代わりに gcloud
または API を使用してください。
gcloud
YAML ファイル
/tmp/web-map-http.yaml
を作成します。PROJECT_ID
は実際のプロジェクト ID に置き換えます。defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a hostRules: - hosts: - '*' pathMatcher: path-matcher-1 name: web-map-http pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a name: path-matcher-1 routeRules: - matchRules: - prefixMatch: / queryParameterMatches: - name: ABTest exactMatch: A priority: 0 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a - matchRules: - prefixMatch: / queryParameterMatches: - name: ABTest exactMatch: B priority: 1 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http tests: - description: Test routing for query ABTest with A host: example.com path: /?ABTest=A service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a expectedOutputUrl: http://example.com/?ABTest=A - description: Test routing for query ABTest with B host: example.com path: /?ABTest=B service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b expectedOutputUrl: http://example.com/?ABTest=B
URL マップを検証します。
gcloud compute url-maps validate --source /tmp/web-map-http.yaml
テストに合格し、コマンドによって成功メッセージが出力された場合は、URL マップに変更を保存します。
URL マップを更新します。
gcloud compute url-maps import web-map-http \ --source /tmp/web-map-http.yaml \ --global
ターゲット プロキシと転送ルールの作成
コンソール
Google Cloud コンソールは現在、ヘッダーベースとパラメータ ベースのルーティングの設定をサポートしていません。代わりに gcloud
または API を使用してください。
gcloud
- URL マップにリクエストをルーティングするターゲット HTTP プロキシを作成します。
gcloud compute target-http-proxies create http-lb-proxy \ --url-map web-map-http
- 受信リクエストをプロキシにルーティングするグローバル転送ルールを作成します。
-
グローバル外部アプリケーション ロードバランサの場合は、
load-balancing-scheme=EXTERNAL_MANAGED
を指定して gcloud CLI コマンドを使用します。この設定では、高度なトラフィック管理機能が提供されます。 - 従来のアプリケーション ロードバランサの場合は、
load-balancing-scheme=EXTERNAL
を使用します。
gcloud compute forwarding-rules create http-content-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=lb-ipv4-1 \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
-
グローバル外部アプリケーション ロードバランサの場合は、
テスト
予約された IPv4 アドレスをメモします。
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
次のコマンドを実行して、これまでの設定をテストします。
curl http://IP_ADDRESS?ABTest=A
curl http://IP_ADDRESS?ABTest=B
ブラウザで、http://IP_ADDRESS?ABTest=A
と http://IP_ADDRESS?ABTest=B
を開きます。
HTTP ヘッダーベースのルーティングを設定する
この例では、HTTP ヘッダーを追加および削除して、インテリジェントなルーティングを行います。
始める前に
既存の外部アプリケーション ロードバランサを使用することも、新しい外部ロードバランサを作成することもできます。
この機能は、サポート対象のバックエンド タイプであればどれでも使用できます。この例では、VM が 1 つのインスタンス グループにあることを前提としています。
シンプルなロードバランサを設定するには、前述のクエリ パラメータ ベースの例を参照してください。
URL マップの更新
コンソール
Google Cloud コンソールは現在、ヘッダーベースとパラメータ ベースのルーティングの設定をサポートしていません。代わりに gcloud
または API を使用してください。
gcloud
この例では、リクエストの HTTP ヘッダーの値を照合することで、HTTP リクエスト ヘッダーを利用した A/B テストを行う方法を示しています。
YAML ファイル
/tmp/web-map-http.yaml
を作成します。PROJECT_ID
は実際のプロジェクト ID に置き換えます。defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a kind: compute#urlMap name: web-map-http hostRules: - hosts: - '*' pathMatcher: path-matcher-1 pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a name: path-matcher-1 routeRules: - matchRules: - prefixMatch: / headerMatches: - headerName: ABTest exactMatch: A priority: 0 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a - matchRules: - prefixMatch: / headerMatches: - headerName: ABTest exactMatch: B priority: 1 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b tests: - description: Test routing for query ABTest with A host: example.com path: / headers: - name: ABTest value: A service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a - description: Test routing for query ABTest with B host: example.com path: / headers: - name: ABTest value: B service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
URL マップを検証します。
gcloud compute url-maps validate --source /tmp/web-map-http.yaml
テストに合格し、コマンドによって成功メッセージが出力された場合は、URL マップに変更を保存します。
URL マップを更新します。
gcloud compute url-maps import web-map-http \ --source /tmp/web-map-http.yaml \ --global
テスト
関連付けられたロードバランサの IPv4 アドレスを使用して次のコマンドを実行し、この設定をテストします。
curl http://IP_ADDRESS -H "ABTest: A"
curl http://IP_ADDRESS -H "ABTest: B"