Cloud Service
Cloud Run / GKE
Google Cloud のコンテナ実行基盤。Cloud Run はサーバー管理不要でコンテナを実行し、GKE はマネージド Kubernetes でより細かく制御する。AWS の ECS / Fargate・EKS に相当。
- 1.Cloud Run はコンテナを置くだけで起動・スケール・HTTPS 公開まで自動化。
- 2.リクエストが無ければ0まで縮退し、1インスタンスが複数を同時処理して増減。
- 3.細かい制御や K8s 前提の複雑構成が要るならマネージドな GKE を選ぶ。
解決する課題
- コンテナを本番で安定運用したい(落ちたら再起動、負荷で自動増減)
- サーバー(VM)やクラスターの管理をしたくない → Cloud Run
- アイドル時はコストをゼロにしたい(ゼロスケール)→ Cloud Run
- Kubernetes の API・エコシステム(Helm / Operator / Istio など)を使いつつ、運用は任せたい → GKE
- マイクロサービスをスケーラブルかつ移植性高く動かしたい
主要概念と用語
Cloud Run
- サービス(Service): HTTPS エンドポイントを持つ常駐型ワークロード。リクエスト駆動で自動スケール
- ジョブ(Job): 実行して完了する処理(バッチ/データ処理)。エンドポイントは持たない
- リビジョン(Revision): デプロイごとに作られる不変のスナップショット。トラフィックを割り当ててカナリア/ロールバック
- 同時実行数(concurrency): 1 インスタンスが同時に捌くリクエスト数(既定 80、最大 1000)。Fargate との大きな違い
- min/max インスタンス: 最小(常時起動でコールドスタート回避)と最大(上限)
GKE
- クラスター: コントロールプレーン(Google 管理)+ノード群
- Autopilot / Standard: Pod 単位課金でノード運用も任せる Autopilot と、ノードプールを自分で管理する Standard
- ノードプール: 同一構成ノードの束(マシンタイプ/Spot 等を指定)
- Pod / Deployment / Service / Ingress: Kubernetes 標準リソース
- Workload Identity: Pod に Google サービスアカウントを安全に紐付ける仕組み
仕様・制限・クォータ
Cloud Run
- コンテナは HTTP/gRPC でリッスンし、環境変数
PORT(既定 8080)で待ち受ける必要がある - リクエストタイムアウトは最大 60 分。インスタンスあたり最大 8 vCPU / 32 GiB メモリ
- リージョン単位のサービス。スケールは 0〜最大インスタンス数まで自動
- CPU 割り当て: 「リクエスト処理中のみ」か「常時割り当て(always-on)」を選択
GKE
- リージョン × ゾーンに配置。コントロールプレーンの可用性に応じて Zonal / Regional を選択
- 1 クラスターあたりのノード数・Pod 数に上限(バージョン/構成で変動)
- vCPU・IP アドレス等にプロジェクト/リージョンクォータがあり、引き上げ申請が可能
内部の仕組み
Cloud Run はコンテナイメージからリビジョンを作り、受信リクエスト量に応じてインスタンス数を自動調整します。トラフィックが無ければ 0 までスケールイン(ゼロスケール)するため、アイドル時の課金が発生しません。基盤は Google の内製サーバーレス基盤(gVisor によるサンドボックス)上で動き、ノードのプロビジョニング・パッチ・スケールはすべて Google 側が担います。1 インスタンスが複数リクエストを同時処理できる点が、1 タスク=処理単位に近い Fargate と異なります。
GKE は Google が コントロールプレーン(API サーバー / etcd / スケジューラ)を完全マネージドで運用し、ワークロードは Pod としてノード上で動きます。Autopilot モードでは Google がノードの数・サイズ・スケールまで管理し、ユーザーは Pod のリソース要求を書くだけ。Standard モードではノードプールを自分で持ち、より細かい制御やコスト最適化ができます。
Cloud Run=サーバーレスでシンプル・ゼロスケール、GKE=マネージド Kubernetes(移植性/エコシステム/きめ細かい制御)。 ステートレスな HTTP/ジョブなら Cloud Run、Kubernetes 前提の複雑構成や DaemonSet・StatefulSet が要るなら GKE。
設計パターン / ベストプラクティス
- 運用を最小化するなら Cloud Run、Kubernetes が必要なら GKE(まずは Autopilot)
- リビジョン+トラフィック分割でカナリアリリース/即時ロールバック
- コールドスタートが問題なら min インスタンスを 1 以上に設定
- 同時実行数(concurrency)は、ワークロードの CPU/メモリ特性に合わせて調整(重い処理は小さく)
- 権限は 専用サービスアカウント(Cloud Run)/ Workload Identity(GKE)で最小限に
- 内部通信のみなら Ingress を internal に絞り、外部公開しない
運用・監視・トラブルシュート
- Cloud Monitoring / Cloud Logging でメトリクス(リクエスト数・レイテンシ・インスタンス数)とログを監視。標準出力ログは自動収集
- Cloud Run のリビジョンが起動しない →
PORTでリッスンしているか、イメージ取得権限(Artifact Registry)、メモリ不足を確認 - デプロイ後にエラー → リビジョンのトラフィックを直前リビジョンへ戻すだけでロールバック
- GKE の Pod が
CrashLoopBackOff→kubectl logs/kubectl describe podでイベントとログを確認
コスト
| サービス/オプション | 課金の考え方 | 向いている用途 |
|---|---|---|
| Cloud Run(リクエストベース) | リクエスト処理中の vCPU/メモリ×時間+リクエスト数。アイドルは0 | イベント/可変トラフィックの HTTP・ジョブ |
| Cloud Run(インスタンスベース) | min〜稼働インスタンスの稼働時間で常時課金 | コールドスタートを避けたい常駐 API |
| GKE Autopilot | Pod が要求した vCPU/メモリ×時間(ノード運用込み) | Kubernetes だが運用は任せたい |
| GKE Standard | ノード(Compute Engine)の費用+クラスター管理料 | 集約効率・特殊要件でコスト最適化 |
| Spot(GKE) | 最大〜91% 割引のプリエンプティブルノード | 中断許容のバッチ/ステートレス |
セキュリティ
- 専用サービスアカウントを Cloud Run サービス/ GKE の Workload Identity で割り当て、鍵のハードコードを避ける(AWS の IAM ロール/タスクロール相当)
- イメージは Artifact Registry に保存し、脆弱性スキャンを有効化。Binary Authorization で署名済みイメージのみデプロイ
- シークレットは Secret Manager で管理し、環境変数や Volume として注入
- Cloud Run の Ingress を内部限定にし、認証は Cloud IAM(IAM Invoker) や IAP で制御。GKE は Network Policy で Pod 間通信を最小化
広すぎる権限(例: Editor 相当)のサービスアカウントを Cloud Run / Pod に付けるのは NG。
さらに認証不要(--allow-unauthenticated)の内部 API を放置するのも危険。用途ごとに最小権限+必要な場合のみ公開が原則です。
関連サービス・比較(AWS との対応)
| 観点 | Cloud Run | GKE | AWS の対応 |
|---|---|---|---|
| 位置づけ | サーバーレスコンテナ | マネージド Kubernetes | Fargate(+App Runner) / EKS |
| スケール単位 | リクエスト(同時実行数) | Pod(HPA/オートスケール) | タスク / Pod |
| ゼロスケール | 対応(アイドルは0) | 原則ノード常駐(Pod は0可) | Fargate は常駐課金 |
| 権限付与 | サービスアカウント | Workload Identity | タスクロール / IRSA |
| イメージ管理 | Artifact Registry | Artifact Registry | Amazon ECR |
| 向き | HTTP/ジョブ・可変負荷 | 複雑構成・移植性 | 常駐コンテナ / K8s 前提 |
ハンズオン / CLI例
# Cloud Run: コンテナイメージからサービスをデプロイ(HTTPS 自動付与)
gcloud run deploy web \
--image=asia-northeast1-docker.pkg.dev/PROJECT_ID/repo/web:latest \
--region=asia-northeast1 \
--service-account=web-sa@PROJECT_ID.iam.gserviceaccount.com \
--concurrency=80 \
--min-instances=1 \
--max-instances=10 \
--no-allow-unauthenticated
# Cloud Run: 新リビジョンへ段階的にトラフィックを移す(カナリア 10%)
gcloud run services update-traffic web \
--region=asia-northeast1 \
--to-revisions=LATEST=10
# GKE: Autopilot クラスターを作成し、認証情報を取得して Deployment を作成
gcloud container clusters create-auto demo-cluster \
--region=asia-northeast1
gcloud container clusters get-credentials demo-cluster \
--region=asia-northeast1
kubectl create deployment web \
--image=asia-northeast1-docker.pkg.dev/PROJECT_ID/repo/web:latest
Google Cloud Service
Cloud Run / GKEを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
コンピューティング
比較で見る軸
クラウド: Google Cloud / カテゴリ: コンピューティング / 難易度: intermediate
導入後に効く点
リクエストが無ければ0まで縮退し、1インスタンスが複数を同時処理して増減。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- コンピューティング
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- operational / cost / reliability / performance
判断チェックリスト
- 自社の用途が「コンピューティング / operational」に近いか確認する。
- 強みである「Cloud Run はコンテナを置くだけで起動・スケール・HTTPS 公開まで自動化。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。
他クラウドの同等サービス
役割が近いサービスです。設計の置き換えや比較検討の参考に。