𝕏 f B! L
案件・求人数 12,345
案件を探す(準備中) エージェントを探す(準備中) お役立ち情報 ログイン
案件・求人数 12,345
Google Cloud Runオートスケーリング完全ガイド|ゼロスケール・同時実行制御・コスト最適化

Google Cloud Runオートスケーリング完全ガイド|ゼロスケール・同時実行制御・コスト最適化

Google CloudCloud Runオートスケーリングサーバーレスコスト最適化
目次

「Cloud Runでトラフィックの急増に対応できるか不安」「ゼロスケールのコールドスタートでユーザー体験が悪化している」「請求額が予想以上に高い」

サーバーレスコンテナプラットフォームであるCloud Runは、正しく設定すればゼロからの自動スケールを実現できますが、設定を間違えるとコストが爆発したり、パフォーマンスが低下したりします。

本記事では、Cloud Runのオートスケーリングの仕組みから、同時実行制御・インスタンス設定・コールドスタート対策・コスト最適化まで、本番運用に必要な知識を網羅的に解説します。

この記事を3秒でまとめると

  • Cloud Runはリクエスト数に応じてインスタンスを0〜1,000まで自動スケールする
  • 同時実行数(concurrency)の設定がパフォーマンスとコストの鍵を握る
  • 最小インスタンス数を1以上にするとコールドスタートを回避できる(ただしコスト増)

Cloud Runオートスケーリングの仕組み

スケーリングモデルの基本

Cloud Runのオートスケーリングは、受信リクエスト数に基づいてインスタンス(コンテナ)の数を自動調整します。

リクエスト数 → スケーラー → インスタンス数を決定

              [最小インスタンス] ≤ 実行数 ≤ [最大インスタンス]

スケーリングの判断要素:

要素説明
同時実行数(concurrency)1インスタンスが同時に処理するリクエスト数
CPU使用率インスタンスのCPU使用率(ターゲット: 60%)
リクエストレート秒あたりのリクエスト到着数
最小インスタンスアイドル時も維持するインスタンス数
最大インスタンススケールアウトの上限

ゼロスケール(Scale to Zero)

Cloud Runの最大の特徴は、リクエストがないときはインスタンスがゼロになることです。これにより、使っていない時間の課金が発生しません。

トラフィックなし → インスタンス数: 0(課金なし)
    ↓ リクエスト到着
コールドスタート → インスタンス数: 1(課金開始)
    ↓ トラフィック増加
スケールアウト → インスタンス数: N(需要に応じて増加)
    ↓ トラフィック減少
スケールイン → インスタンス数: 0(再びゼロに)

同時実行数(Concurrency)の最適化

concurrencyとは

concurrencyは、1つのインスタンスが同時に処理するリクエストの最大数です。この設定がスケーリング特性を大きく左右します。

# concurrencyの設定
gcloud run deploy my-service \
  --image gcr.io/my-project/my-app:latest \
  --concurrency 80 \
  --region asia-northeast1

concurrency値の選び方

アプリケーションタイプ推奨concurrency理由
CPU集中型(画像処理等)1〜41リクエストでCPUを占有
I/O集中型(API呼び出し)80〜250待機中にCPUが空く
一般的なWebアプリ50〜100バランス型
WebSocket/ストリーミング100〜1000長時間接続で待機が多い

concurrencyが低すぎる場合:

  • インスタンス数が不必要に多くなる → コスト増
  • コールドスタートの頻度が増える

concurrencyが高すぎる場合:

  • 1インスタンスあたりの負荷が高くなる → レスポンス遅延
  • OOMKill(メモリ不足)のリスク

最適なconcurrencyの見つけ方

# 負荷テストで最適値を探る(hey / wrk などを使用)
hey -n 10000 -c 50 https://my-service-xxxxx.run.app/api/endpoint
hey -n 10000 -c 100 https://my-service-xxxxx.run.app/api/endpoint
hey -n 10000 -c 200 https://my-service-xxxxx.run.app/api/endpoint

判断基準:

  • p99レイテンシが許容範囲内(例: 500ms以下)
  • エラー率が0.1%未満
  • CPUスロットリングが発生しない

Cloud Runオートスケーリングの仕組みと設定

インスタンス設定の詳細

最小インスタンス(min-instances)

# 最小インスタンスの設定
gcloud run deploy my-service \
  --min-instances 1 \
  --region asia-northeast1
設定値効果コスト影響
0(デフォルト)ゼロスケール有効、コールドスタートあり最低
1常に1インスタンス稼働、コールドスタートほぼなし+$20-40/月
33インスタンス常時稼働、高可用性+$60-120/月

コールドスタート対策としてmin-instances=1が有効なケース:

  • ユーザー向けAPIでレスポンス速度が重要
  • WebSocket接続が必要なサービス
  • 初回リクエストの遅延が許容できない

最大インスタンス(max-instances)

# 最大インスタンスの設定(コスト保護)
gcloud run deploy my-service \
  --max-instances 100 \
  --region asia-northeast1

注意: 最大インスタンスはコスト保護の安全弁として必ず設定しましょう。設定しないと、DDoS攻撃やバグによる無限ループで予想外の請求が発生する可能性があります。

CPU割り当て設定

Cloud Runには2つのCPU割り当てモードがあります。

# CPU常時割り当て(リクエスト処理外でもCPUを使用可能)
gcloud run deploy my-service \
  --cpu-throttling=false

# CPUリクエスト時のみ割り当て(デフォルト)
gcloud run deploy my-service \
  --cpu-throttling=true
モードユースケース料金
リクエスト時のみ一般的なHTTP API安い
常時割り当てバックグラウンド処理、WebSocket高い

コールドスタートの対策

コールドスタートとは

インスタンスがゼロの状態からリクエストを処理するまでの時間です。

コールドスタートの内訳:

  1. インスタンスの起動: 100-500ms
  2. コンテナイメージのプル: 500ms-5s
  3. アプリケーションの初期化: 100ms-30s(言語・フレームワーク依存)

対策1: イメージサイズの最小化

# ❌ 大きなイメージ(1.2GB → コールドスタート 5-10秒)
FROM node:22

# ✅ 最小イメージ(180MB → コールドスタート 1-2秒)
FROM node:22-alpine
ベースイメージサイズコールドスタート目安
ubuntu:22.0477MB2-4秒
node:22-alpine180MB1-3秒
python:3.12-slim150MB1-3秒
golang (scratch)10-20MB0.5-1秒
distroless20-50MB0.5-1.5秒

対策2: スタートアップCPUブースト

# スタートアップ時にCPUを追加割り当て
gcloud run deploy my-service \
  --cpu-boost

この設定により、インスタンス起動時に一時的にCPUを追加割り当てし、初期化を高速化します。

対策3: アプリケーション側の最適化

# ❌ リクエストごとにDB接続を作成
def handle_request():
    db = create_connection()  # 毎回100ms
    result = db.query(...)
    return result

# ✅ グローバルスコープで接続プールを初期化
db_pool = create_pool(min_size=5, max_size=20)  # 起動時に1回だけ

def handle_request():
    async with db_pool.acquire() as conn:
        result = await conn.query(...)
        return result

リビジョンベースのトラフィック管理

カナリアデプロイ

Cloud Runのトラフィック分割機能を使えば、新しいリビジョンへの段階的なロールアウトが可能です。

# 新リビジョンにトラフィックの10%を振り分け
gcloud run services update-traffic my-service \
  --to-revisions=my-service-00002=10 \
  --region asia-northeast1

# 問題なければ50%に引き上げ
gcloud run services update-traffic my-service \
  --to-revisions=my-service-00002=50

# 最終的に100%に切り替え
gcloud run services update-traffic my-service \
  --to-revisions=my-service-00002=100

ロールバック

問題が発生した場合は、即座に前のリビジョンに戻せます。

# 前のリビジョンに100%のトラフィックを戻す
gcloud run services update-traffic my-service \
  --to-revisions=my-service-00001=100 \
  --region asia-northeast1

コスト最適化戦略

コスト構造の理解

Cloud Runの料金は以下の要素で決まります。

リソース料金無料枠
vCPU$0.00002400/vCPU秒180,000 vCPU秒/月
メモリ$0.00000250/GiB秒360,000 GiB秒/月
リクエスト$0.40/100万リクエスト200万リクエスト/月

コスト最適化のチェックリスト

1. 適切なリソース割り当て

# CPUとメモリの最適化
gcloud run deploy my-service \
  --cpu 1 \
  --memory 512Mi \
  --concurrency 80

2. ゼロスケールの活用(開発・ステージング環境)

# 非本番環境はmin-instances=0
gcloud run deploy my-service-dev \
  --min-instances 0 \
  --max-instances 5

3. リクエストタイムアウトの設定

# タイムアウトを適切に設定(デフォルト300秒は長すぎることが多い)
gcloud run deploy my-service \
  --timeout 30

4. Committed Use Discounts(CUD)

大規模利用の場合、確約利用割引で最大17%のコスト削減が可能です。

月額コスト見積もり

規模リクエスト/月平均レスポンス時間月額概算
小規模100万200ms$5-15
中規模1,000万200ms$50-150
大規模1億200ms$500-1,500

監視とアラート

Cloud Monitoringとの連携

# アラートポリシーの作成(レスポンス遅延)
gcloud monitoring policies create \
  --display-name="Cloud Run High Latency" \
  --condition-filter='resource.type="cloud_run_revision" AND metric.type="run.googleapis.com/request_latencies"' \
  --condition-threshold-value=1000 \
  --condition-threshold-duration=300s

監視すべきメトリクス:

  • request_latencies: リクエストレイテンシ(p50, p95, p99)
  • request_count: リクエスト数
  • container/instance_count: アクティブインスタンス数
  • container/cpu/utilizations: CPU使用率
  • container/memory/utilizations: メモリ使用率

Cloud Monitoringの詳細はGoogle Cloud Monitoring & Loggingを参照してください。

他のGCPサービスとの連携

Cloud SQL + Cloud Run

# Cloud SQL Proxyを使ったDB接続
gcloud run deploy my-service \
  --add-cloudsql-instances my-project:asia-northeast1:my-db \
  --set-env-vars DB_HOST=/cloudsql/my-project:asia-northeast1:my-db

Cloud Pub/Sub + Cloud Run

イベント駆動のスケーリングにPub/Subを組み合わせます。

# Pub/SubトリガーのCloud Runサービス
gcloud run deploy message-processor \
  --ingress internal \
  --no-allow-unauthenticated

# Pub/SubサブスクリプションをCloud Runに紐付け
gcloud pubsub subscriptions create my-sub \
  --topic my-topic \
  --push-endpoint=https://message-processor-xxxxx.run.app/process

Pub/Subの詳細はGoogle Cloud Pub/Sub メッセージングガイドを参照してください。

SES案件でのCloud Runスキルの需要

Cloud RunはGCP案件で最も需要の高いサービスの一つです。

  • APIバックエンド: REST/GraphQL APIのサーバーレス運用
  • マイクロサービス: コンテナベースのサービス分割
  • バッチ処理: Cloud Run Jobsによるスケーラブルなバッチ
  • フルスタック: Next.js/Nuxt.jsのSSRデプロイ

まとめ — Cloud Runのスケーリングを制する

Cloud Runのオートスケーリングは強力ですが、デフォルト設定のままでは最適な結果が得られません。

  • concurrency: アプリケーション特性に合わせて最適値を設定
  • min/max instances: コスト保護とパフォーマンスのバランス
  • コールドスタート: イメージ最小化 + スタートアップブースト + アプリ最適化
  • トラフィック管理: カナリアデプロイで安全にリリース
  • コスト最適化: 環境別の設定 + リソースの適正化

これらの知識は、GCPを使うSES案件で大きなアドバンテージになります。


SES BASEでは、Google Cloud関連のSES案件を多数掲載しています。

👉 SES BASEで案件を探す

関連記事:

SES案件をお探しですか?

SES記事をもっと読む →
🏗️

SES BASE 編集長

SES業界歴10年以上のメンバーが在籍する編集チーム。SES企業での営業・エンジニア経験、フリーランス独立経験を持つメンバーが、業界のリアルな情報をお届けします。

📊 業界データに基づく記事制作 🔍 IPA・経済産業省データ参照 💼 SES実務経験者が執筆・監修