TL

Cloud Service

Cloud Functions / Cloud Run

サーバー管理なしでコードをイベント実行・HTTP 応答できる GCP のサーバーレス基盤。使った分だけ課金。AWS Lambda に相当。

中級コスト最適化パフォーマンス効率運用上の優秀性信頼性
最終更新: 2026-06-03公式ドキュメント ↗
TL;DR要点だけ先に
  • 1.コードを置くとイベントや HTTP をきっかけに自動実行するサーバーレス基盤。
  • 2.実行した分だけ課金。リクエストに応じ水平スケールし、無い間は0台まで縮退。
  • 3.関数単位なら Cloud Run functions、既存コンテナを動かすなら Cloud Run。

解決する課題

  • サーバーを常時立てておくのはもったいない/面倒 → リクエストやイベント時だけ動かす
  • 急なスパイクに自動でスケールしてほしい(リクエスト数に応じて水平スケール)
  • 「Cloud Storage にファイルが上がったら処理」「Pub/Sub にメッセージが来たら処理」を接着剤的に書きたい
  • 既存の Docker コンテナをそのままサーバーレスで動かしたい(→ Cloud Run)

主要概念と用語

  • 関数 / サービス: 実行単位。Cloud Run functions では「関数」、Cloud Run では「サービス(リビジョン)」
  • トリガー / イベントソース: HTTP、Pub/Sub、Cloud Storage、Eventarc 経由の各種イベント
  • Eventarc: GCP の各サービスや監査ログ(Cloud Audit Logs)からのイベントを CloudEvents 形式で配信する基盤
  • エントリポイント: 入口の関数名(HTTP 関数 / CloudEvent 関数)
  • サービスアカウント: 関数/サービスの実行 ID。IAM 権限はこれに付与する
  • 同時実行(Concurrency): 1 インスタンスが同時に捌くリクエスト数。Cloud Run は 最大 1000、Cloud Functions 第1世代は常に 1
  • コールドスタート: 新しいインスタンスの起動・初期化にかかる初回遅延
  • 最小/最大インスタンス数: スケールの下限(常駐させて温める)と上限

仕様・制限・クォータ

  • 最大実行時間(タイムアウト): Cloud Run / Cloud Functions 第2世代の HTTP は最大 60 分、イベント駆動は最大 9 分。第1世代は最大 9 分
  • メモリは構成可能(第2世代 / Cloud Run は 最大 32GiB、vCPU は最大 8)。メモリと CPU を独立に設定可能
  • 同時実行: Cloud Run / 第2世代は 1 インスタンスあたり最大 1000 リクエストを同時処理できる(第1世代は 1 リクエスト/インスタンス)
  • リクエストボディ/レスポンスサイズの上限、/tmp(インメモリ tmpfs)の一時領域あり
  • 最大インスタンス数・CPU などはプロジェクト/リージョン単位のクォータに従う(引き上げ可)

内部の仕組み

リクエストやイベントが届くと、GCP はコンテナイメージからインスタンスを起動(=コールドスタート)し、処理後しばらくウォーム状態で再利用します。同時に多くのリクエストが来れば、同時実行数 を超えた分だけインスタンスを並列に増やして水平スケールし、トラフィックが無くなれば最小インスタンス数(既定 0)まで縮小します。Cloud Functions 第2世代は内部的に Cloud Run + Eventarc の組み合わせで実現されています。

コールドスタート対策

低レイテンシを安定させたいなら 最小インスタンス数(min-instances)を 1 以上にして常時温めておく。さらに Cloud Run では起動高速化のため **CPU を「リクエスト処理中のみ割り当て」か「常時割り当て」**かを選べます。重い初期化はグローバルスコープで一度だけ行うのが定石です。

設計パターン / ベストプラクティス

  • ステートレスに作り、状態は Firestore / Cloud SQL / Cloud Storage へ
  • 小さく・速く(依存を減らし初期化を軽く。重い初期化はグローバルスコープへ)
  • 非同期+Pub/Sub で疎結合化。失敗時は Pub/Sub の再試行とデッドレタートピックで退避
  • 秘密情報は環境変数に直書きせず Secret Manager を参照(環境変数やボリュームとしてマウント)
  • VPC 内リソース(Cloud SQL のプライベート IP 等)へは Serverless VPC Access コネクタ / Direct VPC egress 経由で接続

運用・監視

  • ログは Cloud Logging、メトリクスは Cloud Monitoring、分散トレースは Cloud Trace
  • 監視メトリクス例: リクエスト数、リクエストレイテンシ、インスタンス数、コンテナ CPU/メモリ使用率、エラー率
  • スロットリングや 429 多発時は、最大インスタンス数の上限やダウンストリーム(DB の最大接続数など)の限界を確認
  • Cloud Run はトラフィック分割でカナリア/段階的ロールアウトが可能(リビジョン間で % を配分)

コスト

リクエスト数 + リソース時間(CPU/メモリの割り当て時間)+ ネットワーク下り で課金されます。アイドル時(0 インスタンス)は実行課金が発生しないのが特徴です。

課金要素内容ポイント
リクエスト数呼び出し回数に対する課金毎月の無料枠あり
CPU 時間割り当て CPU × 実行時間(vCPU 秒)100ms 単位で計測
メモリ時間割り当てメモリ × 実行時間(GiB 秒)メモリと CPU を独立設定
最小インスタンス常駐分のアイドル課金温める代わりに常時課金が発生
ネットワーク下り外部への送信データ量同一リージョン内通信は安価/無料

CPU を「リクエスト処理中のみ割り当て」にするとアイドル中の CPU 課金を抑えられ、イベント駆動や低トラフィック用途で割安になります。

セキュリティ

  • 最小権限のサービスアカウントを割り当てる(既定のサービスアカウントは権限過多になりやすいので専用を作る)
  • 受信は IAM で認証必須にし、未認証の公開呼び出し(allUsers への run.invoker 付与)は必要時のみ
  • 公開せず内部限定にしたい場合は Ingress 設定(内部のみ / ロードバランサ経由のみ) を利用
  • 保存・転送データは既定で暗号化。鍵を自分で管理するなら Cloud KMS(CMEK)
アンチパターン

サービスアカウントの鍵(JSON キー)をコンテナや環境変数に埋め込むのは NG。Cloud Run / Cloud Functions では実行サービスアカウントの ID が自動で利用可能なので、キーをハードコードせずメタデータサーバー経由でトークンを取得しましょう(AWS の IAM ロール相当の考え方)。

関連サービス・比較(AWS との対応)

観点Cloud Functions / Cloud RunAWS Lambda
位置づけGCP のサーバーレス実行基盤AWS のサーバーレス代表
デプロイ単位関数 または コンテナイメージ関数(zip / コンテナイメージ)
最大実行時間HTTP 60分 / イベント 9分(第2世代)15分
同時実行1 インスタンスで最大 1000(Cloud Run)1 インスタンス 1 リクエスト
イベント基盤Eventarc / Pub/SubEventBridge / SQS など
権限付与サービスアカウント + IAMIAM 実行ロール
秘密管理Secret ManagerSecrets Manager / SSM

ざっくり対応づけると、Lambda(関数)≒ Cloud Run functions(旧 Cloud Functions)Lambda のコンテナイメージ実行や App Runner 的な使い方 ≒ Cloud Run と捉えると理解しやすいです。

ハンズオン / CLI例

# HTTP トリガーの関数(第2世代)をデプロイ(Node.js)
gcloud functions deploy hello-http \
  --gen2 \
  --runtime=nodejs20 \
  --region=asia-northeast1 \
  --source=. \
  --entry-point=helloHttp \
  --trigger-http \
  --allow-unauthenticated

# Cloud Storage への書き込みをトリガーにする(Eventarc 経由)
gcloud functions deploy on-file-upload \
  --gen2 \
  --runtime=nodejs20 \
  --region=asia-northeast1 \
  --source=. \
  --entry-point=onUpload \
  --trigger-event-filters="type=google.cloud.storage.object.v1.finalized" \
  --trigger-event-filters="bucket=my-input-bucket"

# 既存のコンテナイメージを Cloud Run にデプロイ
gcloud run deploy my-api \
  --image=asia-northeast1-docker.pkg.dev/my-project/repo/my-api:latest \
  --region=asia-northeast1 \
  --min-instances=1 \
  --concurrency=80 \
  --no-allow-unauthenticated

# デプロイ済み関数を手動でテスト実行
gcloud functions call hello-http --gen2 --region=asia-northeast1

Google Cloud Service

Cloud Functions / Cloud Runを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

コンピューティング

比較で見る軸

クラウド: Google Cloud / カテゴリ: コンピューティング / 難易度: intermediate

導入後に効く点

実行した分だけ課金。リクエストに応じ水平スケールし、無い間は0台まで縮退。

先に潰すリスク

サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。

数字・仕様の読み方
クラウド
Google Cloud
カテゴリ
コンピューティング
難易度
intermediate
関連資格
設計柱
cost / performance / operational / reliability

判断チェックリスト

  • 自社の用途が「コンピューティング / cost」に近いか確認する。
  • 強みである「コードを置くとイベントや HTTP をきっかけに自動実行するサーバーレス基盤。」が本当に評価軸になるか確認する。
  • 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

コンピューティングcostperformanceoperationalreliability

他クラウドの同等サービス

役割が近いサービスです。設計の置き換えや比較検討の参考に。