
Cloud Run のリビジョン管理機能について試してみた
はじめに
こんにちは。
クラウド事業本部コンサルティング部の渡邉です。
Cloud Run はサーバーレスでコンテナを実行できる Google Cloud のマネージドサービスです。Cloud Run はデプロイのたびにリビジョンが自動生成され、これを活用することでトラフィックを細かく制御した安全なリリースを実現することができます。
本記事では、Cloud Run のリビジョン管理機能である トラフィック分割を使った段階的ロールアウト、タグ付きリビジョンを使ったテスト、ロールバック について、ハンズオン形式でご紹介します。
Cloud Run のリビジョン管理とは
Cloud Run では、サービスをデプロイするたびにリビジョンが作成されます。リビジョンはコンテナイメージ・環境変数・スケーリング設定などを含むイミュータブルなスナップショットで、一度作成されると変更されません。
複数のリビジョンに対してトラフィックの割合を指定できるため、以下のようなユースケースに対応できます。
| ユースケース | 概要 |
|---|---|
| 段階的ロールアウト | 新リビジョンに少量のトラフィックから徐々に流す |
| タグ付きリビジョンのテスト | 専用URLで新リビジョンをテストしてから本番移行 |
| ロールバック | 問題発生時に旧リビジョンへ即座に切り戻す |
| A/Bテスト | 複数リビジョンにトラフィックを分散して比較 |
主要機能の概要
段階的ロールアウト
段階的ロールアウトでは、新しいリビジョンを --no-traffic オプションでデプロイすると、コンテナのビルドとデプロイだけが行われ、本番トラフィックは旧リビジョンへ流れ続けます。その後 gcloud run services update-traffic コマンドでトラフィック割合を少しずつ増やすことで、問題が発生した際の影響範囲を最小化しながらリリースできます。また LATEST=10 オプションのように LATEST キーワードを使うと、「常に最新リビジョンへ 10% を流す」継続的なカナリア設定も可能です。
以下の図は、--no-trafficオプションで新リビジョンをデプロイし、トラフィックを段階的に移行するフローです。
タグ付きリビジョンによるテスト
リビジョンにタグを付与すると、https://TAG---SERVICE-HASH.a.run.app という形式の専用 URL が発行されます。この URL への通信はそのリビジョンだけで処理されるため、本番ユーザーへのトラフィックを一切変えずに本番環境で動作確認できます。タグはデプロイ時に --tag で付与する方法と、デプロイ済みのリビジョンに --update-tags で後から付与する方法(再デプロイ不要)の2通りがあります。
ロールバック
新リビジョンで問題が発生した場合、gcloud run services update-traffic --to-revisions REVISION=100 コマンドを実行するだけで特定リビジョンへ 100% のトラフィックを戻せます(ロールバック)。新しいコンテナイメージのビルドやデプロイは不要なため、数秒〜数十秒で切り戻しが完了します。なお、トラフィック変更は即時ではなく、切り替え中のリクエストはドロップされずに処理が完了します。
実際に試してみる
前提条件
- Google Cloud プロジェクトが作成済みであること
gcloudCLI がインストール・認証済みであること- Cloud Run API が有効化されていること
roles/run.developer相当の IAM 権限があること
ステップ1: サンプルサービスのデプロイ(v1)
まず、サンプルのコンテナイメージを使って最初のリビジョン(v1)をデプロイします。
# Cloud Run API を有効化
gcloud services enable run.googleapis.com \
--project=YOUR_PROJECT_ID
# v1 としてサービスをデプロイ
gcloud run deploy my-app \
--image us-docker.pkg.dev/cloudrun/container/hello \
--region asia-northeast1 \
--allow-unauthenticated \
--project=YOUR_PROJECT_ID
Deploying container to Cloud Run service [my-app] in project [YOUR_PROJECT_ID] region [asia-northeast1]
✓ Deploying new service... Done.
✓ Creating Revision...
✓ Routing traffic...
✓ Setting IAM Policy...
Done.
Service [my-app] revision [my-app-00001-4ch] has been deployed and is serving 100 percent of traffic.
Service URL: https://my-app-<PROJECT_NUMBER>.asia-northeast1.run.app
デプロイ後にリビジョン一覧を確認します。
gcloud run revisions list \
--service my-app \
--region asia-northeast1 \
--project=YOUR_PROJECT_ID
REVISION ACTIVE SERVICE DEPLOYED DEPLOYED BY
✔ my-app-00001-4ch yes my-app 2026-06-22 02:38:04 UTC your-email@example.com

v1リビジョンのデプロイ結果
ステップ2: 新しいリビジョンをトラフィックなしでデプロイ
--no-traffic フラグを使い、新リビジョン(v2)を本番トラフィックを受けない状態でデプロイします。--revision-suffix を指定すると、リビジョン名のサフィックスを人間が読みやすい文字列にできます。
gcloud run deploy my-app \
--image us-docker.pkg.dev/cloudrun/container/hello \
--region asia-northeast1 \
--no-traffic \
--revision-suffix v2 \
--project=YOUR_PROJECT_ID
Deploying container to Cloud Run service [my-app] in project [YOUR_PROJECT_ID] region [asia-northeast1]
✓ Deploying... Done.
✓ Creating Revision...
✓ Routing traffic...
Done.
Service [my-app] revision [my-app-v2] has been deployed and is serving 0 percent of traffic.

v2リビジョンをトラフィックなしでデプロイした結果
デプロイ後は v1 が 100% のトラフィックを継続して受けます。
# トラフィック状況を確認
gcloud run services describe my-app \
--region asia-northeast1 \
--project=YOUR_PROJECT_ID
✔ Service my-app in region asia-northeast1
URL: https://my-app-<PROJECT_NUMBER>.asia-northeast1.run.app
Ingress: all
Traffic:
100% my-app-00001-4ch
Scaling: Auto (Min: 0, Max: 100)
Last updated on 2026-06-22T02:41:19.689956Z by your-email@example.com:
Revision my-app-v2
Container None
Image: us-docker.pkg.dev/cloudrun/container/hello
Port: 8080
Memory: 512Mi
CPU: 1000m
Startup Probe:
TCP every 240s
Port: 8080
Initial delay: 0s
Timeout: 240s
Failure threshold: 1
Type: Default
Service account: <PROJECT_NUMBER>-compute@developer.gserviceaccount.com
Concurrency: 80
Scaling:
Max instances: 100
Timeout: 300s
ステップ3: タグを付けてテスト用 URL を発行
タグを付与することで、本番トラフィックを受けずにリビジョンを専用 URL でテストできます。タグを付ける方法は2通りあります。
方法A: デプロイ時にタグを付与する
新リビジョンをデプロイする際に --tag を同時に指定します。
gcloud run deploy my-app \
--image us-docker.pkg.dev/cloudrun/container/hello \
--region asia-northeast1 \
--no-traffic \
--tag green \
--project=YOUR_PROJECT_ID
Deploying container to Cloud Run service [my-app] in project [YOUR_PROJECT_ID] region [asia-northeast1]
✓ Deploying... Done.
✓ Creating Revision...
Done.
Service [my-app] revision [my-app-00003-hel] has been deployed and is serving 0 percent of traffic.
The revision can be reached directly at https://green---my-app-<HASH>.a.run.app

タグ付きリビジョンのデプロイと専用URL
方法B: 既存リビジョンに後からタグを付与する(再デプロイ不要)
ステップ2 でデプロイ済みのリビジョンのように、すでに存在するリビジョンに --update-tags でタグを追加できます。新リビジョンをデプロイせずにタグだけを操作したい場合に便利です。
# 特定のリビジョンにタグを付与(REVISION-NAME を実際のリビジョン名に置き換える)
gcloud run services update-traffic my-app \
--update-tags green=REVISION-NAME \
--region asia-northeast1 \
--project=YOUR_PROJECT_ID
✓ Updating traffic... Done.
✓ Routing traffic...
Done.
URL: https://my-app-<HASH>.a.run.app
Traffic:
100% my-app-00001-4ch
0% my-app-v2
green: https://green---my-app-<HASH>.a.run.app

既存リビジョンへのタグ付与結果
タグが付いたリビジョンには以下の形式の専用 URL が発行されます。
https://green---my-app-<HASH>.a.run.app
この URL にアクセスすることで、本番トラフィックに影響を与えずに新リビジョンの動作を確認できます。
ステップ4: 段階的にトラフィックを移行
テストで問題がなければ、タグ付きリビジョンへ少量のトラフィックから移行を開始します。
# タグ付きリビジョン(green)に 10% のトラフィックを流す
gcloud run services update-traffic my-app \
--to-tags green=10 \
--region asia-northeast1 \
--project=YOUR_PROJECT_ID
✓ Updating traffic... Done.
✓ Routing traffic...
Done.
URL: https://my-app-<HASH>.a.run.app
Traffic:
90% my-app-00001-4ch
10% my-app-v2
green: https://green---my-app-<HASH>.a.run.app

トラフィックを10%移行した結果
モニタリングを行いながら徐々にトラフィックを増やします。
① 設定値の確認(gcloud run services describe)
まず設定上のトラフィック割合が意図通りか確認します。
gcloud run services describe my-app \
--region asia-northeast1 \
--format="yaml(spec.traffic)" \
--project=YOUR_PROJECT_ID
spec:
traffic:
- percent: 90
revisionName: my-app-00001-4ch
- percent: 10
revisionName: my-app-v2
- revisionName: my-app-v2
tag: green
② 実際にアクセスして分布を確認(curl ループ + Cloud Logging)
設定値の確認だけでなく、実際にリクエストを送って分布を観測します。curl を繰り返しサービス URL に送信します。
# SERVICE_URL はデプロイ時に表示された URL に置き換える
SERVICE_URL="https://my-app-<PROJECT_NUMBER>.asia-northeast1.run.app/"
for i in $(seq 1 20); do
curl -s -o /dev/null "$SERVICE_URL"
done
リクエスト送信後、Cloud Logging でどのリビジョンが何件処理したかを確認します。
gcloud logging read \
'resource.type="cloud_run_revision" AND resource.labels.service_name="my-app"' \
--project=YOUR_PROJECT_ID \
--format="value(resource.labels.revision_name)" \
--limit=20 | sort | uniq -c | sort -rn
19 my-app-00001-4ch
1 my-app-v2
10% 設定であれば 20 リクエスト中おおよそ 1~2 件が my-app-v2 で処理されているはずです。
ステップ5: ロールバック
問題が発生した場合は、旧リビジョンへ即座にロールバックします。
まず現在のリビジョン一覧を確認します。
gcloud run revisions list \
--service my-app \
--region asia-northeast1 \
--project=YOUR_PROJECT_ID
REVISION ACTIVE SERVICE DEPLOYED DEPLOYED BY
✔ my-app-00003-hel my-app 2026-06-22 02:44:14 UTC your-email@example.com
✔ my-app-v2 yes my-app 2026-06-22 02:41:18 UTC your-email@example.com
✔ my-app-00001-4ch yes my-app 2026-06-22 02:38:04 UTC your-email@example.com
旧リビジョン名を確認したら、そのリビジョンへ 100% のトラフィックを向けます。
# REVISION-NAME を旧リビジョン名に置き換える
gcloud run services update-traffic my-app \
--to-revisions my-app-00001-4ch=100 \
--region asia-northeast1 \
--project=YOUR_PROJECT_ID
✓ Updating traffic... Done.
✓ Routing traffic...
Done.
URL: https://my-app-<HASH>.a.run.app
Traffic:
100% my-app-00001-4ch
0% my-app-v2
green: https://green---my-app-<HASH>.a.run.app

旧リビジョンへのロールバック結果
ロールバック後、不要になったリビジョンを削除することもできます。
# トラフィックが 0% のリビジョンを削除
gcloud run revisions delete my-app-v2 \
--region asia-northeast1 \
--project=YOUR_PROJECT_ID

不要リビジョンの削除
まとめ
本記事では、Cloud Run のリビジョン管理機能である 段階的ロールアウト・タグ付きリビジョンを使ったテスト・ロールバック について、ハンズオン形式でご紹介しました。
--no-traffic フラグを使ってデプロイすることで、新しいリビジョンを本番環境に配置しながらトラフィックを旧リビジョンに流し続けることができます。その後 update-traffic コマンドで 10%・50% と段階的に割合を増やし、問題があれば --to-revisions REVISION=100 で旧リビジョンへ即座に切り戻せます。
タグ付きリビジョンを活用すると、本番トラフィックに影響を与えずに専用 URL で新バージョンを検証できます。デプロイ時の --tag による付与と、既存リビジョンへ --update-tags で後から付与する方法(再デプロイ不要)の2通りがあります。テスト後は --remove-tags でタグを削除しておきましょう。タグを削除してもリビジョン自体は削除されません。また、リビジョンレベルのミニマムインスタンスを設定している場合はタグ付きリビジョンも課金対象になるため、使い終わったタグは速やかに削除することを推奨します。
本記事で紹介した機能を組み合わせることで、本番環境での継続的デリバリーをより安全に進めることができます。ぜひ Cloud Run のリビジョン管理機能の活用を検討してみてはいかがでしょうか。
この記事が誰かの助けになれば幸いです。
以上、クラウド事業本部コンサルティング部の渡邉でした!





