複数のリージョンにサービスをデプロイし、最も近いリージョンにユーザーを転送することで、世界中のユーザーに迅速にレスポンスを返します。複数のリージョンにデプロイすることで、低レイテンシを実現し、リージョン停止時の高可用性を確保できます。
Cloud Run サービスは個々のリージョンにデプロイされるため、サービスを複数のリージョンにデプロイしてから、サービスのグローバル ロード バランシングを構成する必要があります。
Cloud Run サービスの健全性を使用して、クロスリージョン フェイルオーバーを自動化できます。
始める前に
- 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Google Cloud プロジェクトで Cloud Run 開発環境を設定します。
- gcloud CLI をインストールして初期化します。
- アカウントに次の IAM ロールがあることを確認します。
- Cloud Run 管理者(
roles/run.admin) - プロジェクト IAM 管理者(
roles/resourcemanager.projectIamAdmin) - Service Usage ユーザー(
roles/serviceusage.serviceUsageConsumer)
- Cloud Run 管理者(
-
Google Cloud コンソールで、[IAM] ページに移動します。
IAM に移動 - プロジェクトを選択します。
- [ アクセスを許可] をクリックします。
-
[新しいプリンシパル] フィールドに、ユーザー ID を入力します。これは通常、Cloud Run サービスのデプロイに使用する Google アカウントのメールアドレスです。
- [ロールを選択] リストでロールを選択します。
- 追加のロールを付与するには、 [別のロールを追加] をクリックして各ロールを選択します。
- [保存] をクリックします。
- PROJECT_NUMBER: Google Cloud プロジェクト番号。
- PROJECT_ID: 実際の Google Cloud プロジェクト ID。
- PRINCIPAL は、バインディングを追加するアカウントに置き換えます。これは通常、Cloud Run サービスのデプロイに使用される Google アカウントのメールアドレスです。
- ROLE: デプロイするアカウントに付与するロール。
- Cloud Run の料金ページを確認します。料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
- 次のコマンドを実行して、Artifact Registry、Cloud Build、Cloud Run Admin API、Compute Engine、Network Services API の API を有効にします。
- 単一リージョンにデプロイする手順を繰り返します。
- マルチリージョン サービスをデプロイします。
マルチリージョン サービスを作成してデプロイするには、
--regionsフラグを使用してgcloud run deployコマンドを実行します。gcloud run deploy
SERVICE_NAME\ --image=IMAGE_URL\ --regions=REGIONS次のように置き換えます。
SERVICE_NAME: デプロイするマルチリージョン サービスの名前。IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latestなど)。REGIONS: デプロイ先の複数のリージョンのリスト例:europe-west1,asia-east1
サービスの YAML ファイルを作成します。
run.googleapis.com/regions属性を使用して、サービスをデプロイする複数のリージョンを設定します。apiVersion: serving.knative.dev/v1 kind: Service metadata: name:
SERVICE_NAMEannotations: run.googleapis.com/regions:REGIONSspec: template: spec: containers: - image:IMAGE_URL次のように置き換えます。
SERVICE_NAME: デプロイするマルチリージョン サービスの名前。REGIONS: 更新する複数のリージョンのリスト。例:europe-west1,asia-east1IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latestなど)。
次のコマンドを使用してサービスを作成します。
gcloud run multi-region-services replace service.yaml
マルチリージョン サービスを 1 つまたは複数のリージョンに追加するには、
--add-regionsフラグを使用します。gcloud run multi-region-services update
SERVICE_NAME\ --add-regions=REGIONS1 つまたは複数のリージョンからマルチリージョン サービスを削除するには、
--remove-regionsフラグを使用します。gcloud run multi-region-services update
SERVICE_NAME\ --remove-regions=REGIONS次のように置き換えます。
SERVICE_NAME: 更新するマルチリージョン サービスの名前。REGIONS: サービスを追加または削除する 1 つまたは複数のリージョン。例:us-central1,asia-east1
既存のマルチリージョン サービスを更新するには、その YAML 構成をダウンロードします。
gcloud run multi-region-services describe SERVICE_NAME --format export > service.yaml
run.googleapis.com/regions属性を更新して、サービスをデプロイするリージョンのリストを追加または削除します。apiVersion: serving.knative.dev/v1 kind: Service metadata: name:
SERVICE_NAMEannotations: run.googleapis.com/regions:REGIONS次のように置き換えます。
SERVICE_NAME: デプロイするマルチリージョン サービスの名前。REGIONS: サービス リビジョンをデプロイする複数のリージョンの新しいリスト。
次のコマンドを使用してサービスを更新します。
gcloud run multi-region-services replace service.yaml
マルチリージョン サービスを削除するには、
gcloud run multi-region-services deleteコマンドを実行します。gcloud run multi-region-services delete
SERVICE_NAMESERVICE_NAMEは、削除するマルチリージョン サービスの名前に置き換えます。- Cloud Run サービスの健全性を使用してクロスリージョン フェイルオーバーを自動化します。
- 外れ値検出を構成して、正常でない Cloud Run サービスを HTTP エラー率に基づいて識別し、一部のリクエストを別のリージョンに分散します。
- 静的 IP アドレスを予約することにより、ロードバランサを再作成するときに DNS レコードを更新する必要がなくなります。
上記のコマンドの SERVICE_IP は、IP アドレス リソースの名前(gcloud compute addresses create --global SERVICE_IP
myservice-ipなど)に置き換えます。この IP アドレスは、訪問者に最も近い Google データセンターまたはポイント オブ プレゼンスにルーティングするグローバル エニーキャスト IPv4 アドレスです。
-
バックエンド サービスを作成します。
gcloud compute backend-services create \ --global BACKEND_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED
BACKEND_NAME は、バックエンド サービスに付ける名前に置き換えます。例:
myservice-backend - URL マップを作成します。
gcloud compute url-maps create URLMAP_NAME --default-service=BACKEND_NAME
URLMAP_NAME は、URL マップに付ける名前(
myservice-urlmapなど)に置き換えます。 - HTTPS トラフィックを処理するために、ドメインのマネージド TLS 証明書を作成します。example.com はドメイン名で置き換えます。
gcloud compute ssl-certificates create CERT_NAME \ --domains=example.com
CERT_NAME は、マネージド SSL 証明書に付ける名前(
myservice-certなど)に置き換えます。 - ターゲット HTTPS プロキシを作成します。
gcloud compute target-https-proxies create HTTPS_PROXY_NAME \ --ssl-certificates=CERT_NAME \ --url-map=URLMAP_NAME
HTTPS_PROXY_NAME は、ターゲット HTTPS プロキシに付ける名前(
myservice-httpsなど)に置き換えます。 - 作成したネットワーク リソースを IP アドレスに接続する転送ルールを作成します。
gcloud compute forwarding-rules create --global FORWARDING_RULE_NAME \ --target-https-proxy=HTTPS_PROXY_NAME \ --address=SERVICE_IP \ --ports=443 \ --load-balancing-scheme=EXTERNAL_MANAGED
FORWARDING_RULE_NAME は、作成する転送ルールのリソースの名前に置き換えます。例:
myservice-lb -
IP アドレスを構成します。
IP アドレス リソース名を
myservice-service-ipに構成します。この値は独自の値に変更できます。この IP アドレスは、訪問者に最も近い Google データセンターまたはポイント オブ プレゼンスにルーティングするグローバル エニーキャスト IPv4 アドレスです。 -
バックエンド サービスを作成して構成します。
このリソースは、バックエンド サービスを
myservice-backendという名前で構成します。この値は独自の値に変更できます。 -
URL マップを構成する
バックエンド サービス リソース(
myservice-backend)を新しい URL マップリソース(myservice-lb-urlmap)に接続します。これらの値は、独自の値に変更できます。 -
HTTPS トラフィックを処理するために、ドメインのマネージド TLS 証明書を作成します。
example.comは、google_compute_managed_ssl_certificateリソースのドメイン名に置き換えます。 -
HTTPS プロキシを構成します。
ターゲット名
myservice-https-proxyを使用してgoogle_compute_target_https_proxyリソースを作成し、作成しておいた TLS 証明書(myservice-ssl-cert)と URL マッピング リソース(myservice-lb-urlmap)を接続します。これらの値は、独自の値に変更できます。 -
転送ルールを構成します。
ターゲット名
myservice-https-proxyを使用してgoogle_compute_global_forwarding_ruleリソースを作成し、作成しておいた HTTPS プロキシ ターゲット(myservice-https-proxy)と IP アドレス リソース(myservice-service-ip)を接続します。これらの値は、独自の値に変更できます。 -
この構成を適用します。
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
- Cloud Shell を起動します。
-
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
-
Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は
.tfにする必要があります(例:main.tf)。このチュートリアルでは、このファイルをmain.tfとします。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。
新しく作成した
main.tfにサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。
- 環境に適用するサンプル パラメータを確認し、変更します。
- 変更を保存します。
-
Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
terraform init
最新バージョンの Google プロバイダを使用する場合は、
-upgradeオプションを使用します。terraform init -upgrade
変更を適用する
-
構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
terraform plan
必要に応じて構成を修正します。
-
次のコマンドを実行します。プロンプトで「
yes」と入力して、Terraform 構成を適用します。terraform apply
Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。
- Google Cloud プロジェクトを開いて結果を表示します。 Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
-
REGIONに、Cloud Run サービスのネットワーク エンドポイント グループを作成します。gcloud compute network-endpoint-groups create NEG_NAME \ --region=REGION \ --network-endpoint-type=serverless \ --cloud-run-service=SERVICE_NAME
次のように置き換えます。
-
NEG_NAME: ネットワーク エンドポイント グループ リソースの名前。
例:
myservice-neg-uscentral1 - REGION: サービスがデプロイされているリージョン。
- SERVICE_NAME: 実際のサービスの名前。
-
NEG_NAME: ネットワーク エンドポイント グループ リソースの名前。
例:
-
ネットワーク エンドポイント グループをバックエンド サービスに追加します。
gcloud compute backend-services add-backend --global BACKEND_NAME \ --network-endpoint-group-region=REGION \ --network-endpoint-group=NEG_NAME
前の手順で作成した NEG_NAME をリージョンに指定します。
-
リージョンごとに上記の手順を繰り返します。
-
run_regions変数で指定された各リージョンの Cloud Run サービス用に、名前がmyservice-negのネットワーク エンドポイント グループを構成します。 -
ネットワーク エンドポイント グループ(
myservice-neg)を接続するようにバックエンド サービスを構成します。 次のコマンドを実行して、ロードバランサの予約済み IP アドレスを見つけます。
gcloud compute addresses describe SERVICE_IP \ --global \ --format='value(address)'
SERVICE_IP は、前に作成した IP アドレスの名前に置き換えます。このコマンドにより、IP アドレスが出力に表示されます。
この IP アドレスで
Aレコードを追加して、ドメインの DNS レコードを更新します。DNS レコード反映のステータスを確認するには、
digコマンドライン ユーティリティを使用します。dig A +short example.com
DNS レコード内に構成した IP アドレスが、出力に表示されます。
次のコマンドを実行して、マネージド証明書の発行ステータスを確認します。
gcloud compute ssl-certificates describe CERT_NAME
CERT_NAME は、前に SSL 証明書リソース用に選択した名前に置き換えます。
出力には、
status: ACTIVEを含む行が表示されます。-
リダイレクト ルールで URL マップを作成します。
gcloud compute url-maps import HTTP_URLMAP_NAME \ --global \ --source /dev/stdin <<EOF name: HTTP_URLMAP_NAME defaultUrlRedirect: redirectResponseCode: MOVED_PERMANENTLY_DEFAULT httpsRedirect: True EOF
HTTP_URLMAP_NAME は、作成する URL マップリソースの名前(
myservice-httpredirectなど)に置き換えます。 -
URL マップを使用してターゲット HTTP プロキシを作成します。
gcloud compute target-http-proxies create HTTP_PROXY_NAME \ --url-map=HTTP_URLMAP_NAME
HTTP_PROXY_NAME は、作成するターゲット HTTP プロキシの名前(
myservice-httpなど)に置き換えます。 -
同じ予約済み IP アドレスのポート
80での転送ルールを作成します。gcloud compute forwarding-rules create --global HTTP_FORWARDING_RULE_NAME \ --target-http-proxy=HTTP_PROXY_NAME \ --address=SERVICE_IP \ --ports=80
HTTP_FORWARDING_RULE_NAME は、作成する新しい転送ルールの名前(
myservice-httplbなど)に置き換えます。 -
リダイレクト ルールで URL マップリソースを作成します。
-
新しく作成した URL マップリソース(
myservice-https-urlmap)を使用して、ターゲット HTTP プロキシを作成します。 -
同じ予約済み IP アドレス リソース(
myservice-http-proxy)のポート80での転送ルールを作成します。 - 健全性を計算するには、リージョンごとにサービスレベルまたはリビジョン レベルの最小インスタンス数を 1 つ以上構成する必要があります。Cloud Monitoring のコンテナ インスタンス数指標を使用して、リージョンに必要な最小インスタンス数を推定することもできます。
- フェイルオーバーには、異なるリージョンのサービスが少なくとも 2 つ必要です。そうでない場合、1 つのサービスが失敗すると、エラー メッセージ
no healthy upstreamが表示されます。 - Cloud Run サービスの健全性は、5 つを超えるサーバーレス NEG バックエンドを持つクロスリージョン内部アプリケーション ロードバランサをサポートしていません。
- サーバーレス NEG で URL マスクやタグを構成することはできません。
- バックエンド サービスまたはロードバランサから IAP を有効にすることはできません。Cloud Run から直接 IAP を有効にします。
- Cloud Run サービスが削除されると、Cloud Run はロードバランサに異常なステータスを報告しません。
- 新しいインスタンスの起動では最初の準備状況プローブはカウントされないため、リクエストは、正常な状態になる前に、新しく起動されたサービスに短時間ルーティングされる可能性があります。
- Cloud Run サービスの健全性は、すべてのインスタンスで計算されます。プローブのないリビジョンは不明として扱われます。ロードバランサは、不明なインスタンスを正常と見なします。
1 つ以上の最小インスタンスを使用して、複数のリージョンに Cloud Run サービス リビジョンをデプロイします。次のコマンドを実行して、前の手順で構成した準備状況プローブを使用します。
gcloud beta run deploy
SERVICE_NAME\ --regions=REGION_A,REGION_B\ --min=MIN_INSTANCES次のように置き換えます。
- SERVICE_NAME: サービスの名前。
- REGION_A、REGION_B: サービス リビジョンの異なるリージョン。たとえば、REGION_A を
us-central1に、REGION_B をeurope-west1に設定します。 - MIN_INSTANCES: ウォーム状態を維持し、リクエストを受信できるコンテナ インスタンスの数。最小値は 1 以上に設定する必要があります。
各コンテナ インスタンスに設定された gRPC または HTTP 準備状況プローブを構成します。
クロスリージョン内部アプリケーション ロードバランサを構成して、異常なリージョンからトラフィックを転送します。
各リージョンの各 Cloud Run サービスにサーバーレス NEG を設定します。
サーバーレス NEG と接続するようにバックエンド サービスを構成します。
準備状況プローブが構成された単一の「カナリア」リージョンに新しいリビジョンをデプロイします。
新しいリビジョンに少量のトラフィック(1% など)を送信します。
最小インスタンス数には、リビジョン レベルではなくサービスレベルでゼロ以外の値を使用します。
準備状況プローブ指標(
run.googleapis.com/container/instance_count_with_readiness)を調べて、新しいインスタンスが正常であることを確認します。段階的に、新しいリビジョンへのトラフィックの割合を増やします。ランプアップするときは、ロードバランサで使用されるリージョン Cloud Run サービスの健全性指標(
run.googleapis.com/service_health_count)をモニタリングします。十分なトラフィックが新しいリビジョンに転送されるまで、Cloud Run サービスの健全性はUNKNOWNを返します。リビジョンが 100% のトラフィックを受信し、リージョン Cloud Run サービスの健全性が安定して正常になったら、他のすべてのリージョンでこのプロセスを繰り返します。
グローバル外部アプリケーション ロードバランサの URL マップを更新するには、
--globalフラグを使用して、バックエンド サービスから NEG を削除します。gcloud compute backend-services remove-backend
BACKEND_NAME\ --network-endpoint-group=NEG_NAME\ --network-endpoint-group-region=REGION\ --global次のように置き換えます。
BACKEND_NAME: バックエンド サービスの名前。NEG_NAME: ネットワーク エンドポイント グループ リソースの名前(例:myservice-neg-uscentral1)。REGION: NEG が作成され、サービスを削除するリージョン。例:us-central1,asia-east1
正常なリージョンがトラフィックを処理していることを確認するには、https://
<domain-name>に移動します。- 準備状況プローブなど、Cloud Run サービスのヘルスチェックを構成する方法を確認する。
- Cloud Run の準備状況プローブとサービスの健全性に関する Go コードサンプルを確認する。
ロールを付与する
コンソール
gcloud
プロジェクトで自分のアカウントに必要な IAM ロールを付与するには:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
次のように置き換えます。
gcloud services enable artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com \ compute.googleapis.com \ networkservices.googleapis.com
サービスを複数のリージョンにデプロイする
構成したスケーリング パラメータは、複数のリージョンに適用されます。たとえば、マルチリージョン デプロイでは、最小インスタンス値は複数のリージョンそれぞれに適用されます。
次のいずれかの方法で、同じサービスを複数のリージョンにデプロイします。
マルチリージョン サービスをデプロイする
このセクションでは、1 つの gcloud CLI コマンドで、または YAML ファイルか Terraform ファイルを使用して、マルチリージョン サービスをデプロイして構成する方法について説明します。
gcloud
YAML
Terraform
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
Terraform 構成の google_cloud_run_v2_service リソースに次の内容を追加します。
resource "google_cloud_run_v2_service" "default" {
name = "cloudrun-service-multi-region"
regions = [
"REGION_1",
"REGION_2",
]
template {
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
}
}
}
"REGION_1" と "REGION_2" は、必要なGoogle Cloud リージョンに置き換えます。例: europe-west1、us-central1
マルチリージョン サービスを更新する
このセクションでは、1 つの gcloud CLI コマンドまたは YAML ファイルからマルチリージョン サービスにリージョンを追加または削除する方法について説明します。
gcloud
マルチリージョン サービスからリージョンを追加または削除するには、gcloud run multi-region-services update コマンドを実行します。
YAML
マルチリージョン サービスを削除する
グローバル外部アプリケーション ロードバランサを構成する
このガイドでは、グローバル エニーキャスト IP アドレスを指しているマネージド TLS 証明書で保護されたドメインを使用してグローバル外部アプリケーション ロードバランサを構成する方法を説明します(これにより、ユーザーは、サービスがデプロイされている最寄りの Google データセンターに転送されます)。
次のセクションで説明するアーキテクチャでは、リージョンの Cloud Run サービスが応答しなくなったり、エラーが返されたりしても、リクエストが別のリージョンに自動的に転送されることはありません。
マルチリージョン サービスの可用性を高めるには:
グローバル外部アプリケーション ロードバランサを作成する
グローバル外部アプリケーション ロードバランサを作成するには、さまざまなネットワーク リソースを作成し、相互に接続する必要があります。
gcloud
Terraform
このセクションで説明する手順の代わりに、グローバル HTTP ロードバランサの Terraform モジュールを使用することもできます。
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
リージョン単位のネットワーク エンドポイント グループを構成する
前の手順でデプロイしたリージョンごとに、次の手順でサーバーレス ネットワーク エンドポイント グループ(NEG)を作成し、バックエンド サービスに追加する必要があります。
gcloud CLI
Terraform
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
ドメインの DNS レコードを構成する
作成した転送ルールをドメイン名が指すように、作成した IP アドレスで DNS レコードを更新する必要があります。
認証済みサービスを使用する場合のカスタム オーディエンスを構成する
認証済みサービスは IAM によって保護されます。このような Cloud Run サービスでは、認証情報の生成時にリクエストの対象とする受信者(オーディエンス)を宣言するクライアント認証が必要です。
オーディエンスは通常ターゲット サービスの正式な URL であり、Cloud Run サービスの場合、デフォルトでは末尾が run.app の URL が生成されます。ただし、マルチリージョン デプロイでは、クライアントはリクエストのルーティング先のリージョン サービスを事前に知ることはできません。したがって、マルチリージョン デプロイでは、カスタム オーディエンスを使用するようにサービスを構成します。
ロードバランサのプロビジョニングを待つ
ロードバランサの IP アドレスでドメインを構成したら、DNS レコードが反映されるまで待ちます。同様に、マネージド TLS 証明書がドメインに発行され、グローバルに HTTPS トラフィックを処理できるようになるまで待つ必要があります。
ロードバランサがトラフィックの処理を開始するまでに、最大で 30 分かかることがあります。
準備ができたら、ウェブサイトの URL の先頭に https:// を付けてアクセスしてみてください。
ステータスを確認
HTTP から HTTPS へのリダイレクトを設定する
デフォルトでは、転送ルールは単一のプロトコルのみを処理するため、http:// エンドポイントへのリクエストには「404 見つかりません」が返されます。http:// URL へのリクエストを https:// プロトコルにリダイレクトする必要がある場合は、次の手順に沿って追加の URL マップと転送ルールを作成します。
gcloud CLI
Terraform
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
その他の構成オプションについては、Cloud Run を使用してグローバル外部アプリケーション ロードバランサを設定するをご覧ください。
Cloud Run サービスの健全性を使用してクロスリージョン フェイルオーバーを自動化する
Cloud Run サービスの健全性により、サービスの中断を最小限に抑え、クロスリージョン フェイルオーバーとフェイルバックを自動化します。内部トラフィック用に自動フェイルオーバーとフェイルバック機能を備えたマルチリージョン高可用性 Cloud Run サービスを設定します。
制限事項
Cloud Run サービスの健全性には、次の制限が適用されます。
リージョンの健全性を報告する
リージョン Cloud Run サービスの健全性を集計し、正常または異常なステータスをロードバランサに報告するには、次の操作を行います。
ベスト プラクティス
準備状況プローブ、トラフィック分割、最小インスタンスを組み合わせて使用すると、安全かつ段階的なロールアウトを実行できます。これにより、新しいリビジョンを昇格させる前に単一の「カナリア」リージョンで健全性を確認し、ロードバランサが正常なリージョン バックエンドにのみトラフィックを送信するようにします。
推奨されるロールアウト プロセス
準備状況プローブまたは Cloud Run サービスの健全性を使用していない既存の Cloud Run サービスにサービス リビジョンをロールアウトできます。このプロセスをリージョンごとに 1 つずつ実行して、新しいリビジョンを安全にデプロイします。
ヘルスチェックをモニタリングする
Cloud Run サービスの健全性を設定すると、サーバーレス NEG は Cloud Monitoring サービスの健全性指標を収集します。既存のリージョン サービスの健全性ステータスを表示できます。次の図は、これらの Cloud Run サービスの健全性コンポーネントがサービスへのリクエストにどのように応答するかを示しています。
リージョンのサービスが異常な状態の場合、ロードバランサは異常なリージョンから正常なリージョンにトラフィックを転送します。リージョンが再び正常になると、トラフィックは回復します。
マルチリージョン デプロイで認証済みの Pub/Sub push サブスクリプションを使用する
デフォルトでは、Pub/Sub サービスは Pub/Sub サービスがメッセージを格納するのと同じ Google Cloud リージョン内の push エンドポイントにメッセージを配信します。この動作を回避するには、マルチリージョンの Cloud Run デプロイで認証済みの Pub/Sub push サブスクリプションを使用するをご覧ください。
手動フェイルオーバーを構成する
正常なリージョンにフェイルオーバーするようにトラフィックを手動で構成するには、グローバル外部アプリケーション ロードバランサの URL マップを変更します。