G-gen の佐々木です。当記事では Cloud Run のマルチリージョンサービスについて解説します。
マルチリージョンサービスとは
マルチリージョンサービスとは、一度の操作で複数リージョンに Cloud Run サービスをデプロイすることができる機能です。
Cloud Run は通常、サービスのデプロイ時に単一のリージョンを選択するリージョナルなサービスです。しかし、マルチリージョンサービス機能を用いることで、一度の操作で複数リージョンにサービスをデプロイすることができます。
マルチリージョンサービスは2024年10月現在、Preview 版の機能であり、本番環境での利用は非推奨です。
Cloud Run の基礎知識については、以下の記事も参照してください。
メリット
サービスのレイテンシ低下
グローバルアプリケーションロードバランサのバックエンドとして、複数リージョンで Cloud Run サービスを展開すると、ユーザーのトラフィックを最も近いリージョンにあるサービスにルーティングすることができます。これにより、リクエスト処理のレイテンシ低下が期待できます。
リージョン障害への耐性
サービスをマルチリージョンに展開することで、Google Cloud の障害により特定のリージョンが使用できなくなった場合でも、障害の影響がない正常なリージョンでサービスを継続することができます。
なお、アプリケーションロードバランサのデフォルトの設定では、リージョン障害等で特定リージョンのサービスが使用不可になった際、正常なリージョンに自動的にルーティングされることはありません。このようなユースケースでは、ロードバランサのバックエンドで外れ値検出を有効化し、ロードバランサが HTTP エラー率に基づいた異常を検知できるように構成しておく必要があります。
- 参考 : 外れ値検出の構成
各リージョンへの一括デプロイ
マルチリージョンサービス機能を使用しないでも、複数のリージョンでそれぞれサービスをデプロイすることで、 Cloud Run サービスを複数リージョンに展開することができます。しかしその場合、サービスを展開するリージョン数に応じたデプロイパイプラインを構築する必要があります。
マルチリージョンサービスを使用することで、単一のデプロイパイプラインから複数リージョンへのデプロイを一括で行うことができます。これにより、CI/CD パイプラインの構成をシンプルに保つことができます。
注意点
利用料金
マルチリージョンサービスでは、単にサービスを複数リージョンにデプロイする場合と同様に、リージョンごとに Cloud Run の利用コストが発生します。前述のメリットとコストのトレードオフを考慮し、サービスの要件に応じて利用を検討しましょう。
構成は全リージョン一律
マルチリージョンサービスでは、すべてのリージョンのサービスに同じ設定がされるため、リージョンごとに個別に設定を定義することはできません。例えば、リージョンごとに CPU、メモリの設定を最適化したり、異なる環境変数の設定などはできません。
たとえば、以下のように特定のリージョンを指定してサービスを更新しようとすると、エラーが発生してしまいます。
$ gcloud run services update run-multi-regions \ --cpu=2 \ --memory=1 \ --region=asia-northeast1 X Deploying... . Creating Revision... . Routing traffic... Deployment failed ERROR: (gcloud.run.services.update) service: Multi-region Services are read-only at the regional endpoint. Please use the multi-region Services API to manage them.
利用手順
マルチリージョンサービスの作成
2024年10月現在の Preview 提供時点では、Google Cloud コンソールからのマルチリージョンサービスのデプロイはサポートされていません。
gcloud CLI を利用する場合、マルチリージョンサービスをデプロイするための最小限のコマンドは以下のようになります。
# Cloud Run サービスをマルチリージョンサービスとしてデプロイする $ gcloud beta run deploy {サービス名} \ --{コンテナイメージ} \ # コンテナイメージ --regions={リージョン} # サービスをデプロイするリージョンをカンマ区切りで複数指定
# 実行例 $ gcloud beta run deploy run-multi-regions \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --regions=asia-northeast1,us-central1 # asia-northeast1 と us-central1 にデプロイ
マルチリージョンサービスを作成すると、コンソール上では以下のスクリーンショットのように表示されます。
リージョンごとの「サービスの詳細」画面を確認すると、それぞれのリージョンでリビジョンが作成され、https://{サービス名}-{プロジェクトID}-{リージョン名}.run.app
形式の URL が発行されています。また、この画面からサービスを編集することができなくなっています。
マルチリージョンサービスの更新
マルチリージョンサービスの更新は gcloud run multi-region-services update
コマンドを使用します。
--add-regions
フラグを使用することで、新たに指定したリージョンにサービスをデプロイすることができます。リージョンは、複数指定することができます。
# リージョンを追加する $ gcloud beta run multi-region-services update {サービス名} \ --add-regions={リージョン}
--remove-regions
フラグにより、指定したリージョンのサービスを削除することができます(複数指定可)。
# リージョンを削除する $ gcloud beta run multi-region-services update {サービス名} \ --remove-regions={リージョン}
- 参考:gcloud beta run multi-region-services update(プレビュー版のコマンドリファレンス)
ロードバランサのバックエンドにマルチリージョンサービスを設定
基本的には以下の記事で解説しているものと同様の手順でロードバランサを設定します。
ロードバランサのバックエンドとしてマルチリージョンサービスを設定する場合、リージョンごとにサーバーレス NEG を作成し、バックエンドサービスに設定します。
佐々木 駿太 (記事一覧)
G-gen最北端、北海道在住のクラウドソリューション部エンジニア
2022年6月にG-genにジョイン。Google Cloud Partner Top Engineer 2024に選出。好きなGoogle CloudプロダクトはCloud Run。
趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。
Follow @sasashun0805