Cloud Runを「サーバーレスだから安くて楽なサービス」とだけ捉えていると、気づかないうちに請求と運用負荷がじわじわ積み上がります。実際に高額になっている原因の多くは、Cloud FunctionsやApp Engine、GKE、AWS Lambdaとの違いを理解しないままコンテナをデプロイし、最小インスタンスやネットワーク、認証周りをなんとなく設定していることにあります。
本稿では、Cloud Runとは何かという概念整理から、WebアプリやAPI、Cloud Run jobsによるバッチ処理までの代表的ユースケースを押さえたうえで、CPUやメモリ、リクエスト、ネットワーク課金のどこで財布が動くのかを数字ではなく現場シナリオとして解きほぐします。あわせて、無料枠とGoogle Cloudの無料トライアルで本当に「ほぼ0円」に近づける構成と、逆に無料枠を使っているつもりで課金が膨らむ典型パターンを切り分けます。
さらに、403やIAP、VPC接続で発生するトラブルの因果関係を整理し、gcloud run deployから2週間後に必ず見直すべき設定、Cloud FunctionsやGKE、AWS App Runnerとの選び分け、中小企業での名義・上限・停止基準といった運用ルールまで一気通貫で扱います。Cloud Runを「なんとなく便利なクラウド」から「きちんと儲かる基盤」に変えたい方にとって、この導線を踏まずに動き出すこと自体がリスクになります。
- Cloud Runとは何かを「他サービスとの違い」でまず腹落ちさせる
- Cloud Runで「できること」をWebアプリとAPIとバッチのリアルユースケースから発見
- Cloud Runの料金と無料枠を“数字”ではなくシナリオで体感!リアルなイメージをつかもう
- 実務でありがちなCloud Runの“料金事故”と構成ミスを徹底解剖!避けるべき落とし穴集
- Cloud Runへのデプロイは最初の30分が勝負!2週間後にも後悔しない設定術
- Cloud Runで意外と多いエラーと“止まらないサービス”へ変えるレスキューテクニック
- Cloud Run・Cloud Functions・App Engine・GKEを“現場基準”で選び分ける黄金ルール
- 中小企業や個人開発がCloud Runを使う前に知っておくべき“お金&権限”のリアルなポイント
- 本当に現場で使えるCloud Run選定のための頼れる相談先NewCurrentという選択肢
- この記事を書いた理由
Cloud Runとは何かを「他サービスとの違い」でまず腹落ちさせる
Cloud Runとはサーバーレスとコンテナとマネージドの“ちょうど真ん中”だと実感する瞬間
サーバーを触りたくない、でもコンテナの自由さは手放したくない。そんなワガママを現実的な料金でかなえてくれるのが、このサービスです。
イメージとしては、
-
インフラ管理はお任せ(サーバーレス)
-
Dockerfileで好きなランタイムを詰め込める(コンテナ)
-
スケールや負荷分散は完全自動(マネージド)
という3つの“おいしいところ取り”をした構成です。
私の視点で言いますと、初めて触る方が「あ、これはEC2でもGKEでもないけど、本番に耐えるWebアプリを早く出すための道具だな」と気づくのは、次の2つを体験した瞬間です。
-
gcloud run deploy でコンテナイメージを1コマンドデプロイできたとき
-
アクセス急増時に、インスタンス数やCPU設定を触らなくても勝手にスケールしていたとき
この時点で、仮想マシンのパッチ当てやkubernetesのマニフェスト管理からは解放されつつ、PythonやNode、Rails、Django、FastAPIといった好きなフレームワークはそのまま使えると実感できます。
Cloud FunctionsやApp EngineやGKEと比較したCloud Runの際立つポイントを実務目線でズバリ解説
よく悩まれる4サービスを、あえて「中小企業・少人数チームの運用目線」で切り分けます。
| 観点 | Cloud Functions | App Engine | GKE | Cloud Run |
|---|---|---|---|---|
| コード形式 | 関数単位 | アプリ単位 | コンテナ+マニフェスト | コンテナイメージ |
| 自由度 | ランタイム制約強め | ランタイム制約あり | ほぼ無制限 | コンテナ内は自由 |
| 運用負荷 | かなり低い | 低い | 高い | 低い |
| 向く用途 | 単発処理・イベント | レガシーからの延長 | 大規模・社内SREあり | Web API・業務アプリ |
実務での違いを絞ると、ポイントは3つです。
-
デプロイ単位
- Functionsは「1機能1デプロイ」になりやすく、案件が増えると管理がカオスになりやすいです。
- Cloud Runはコンテナ単位でWebアプリごと、APIごとにまとまるため、プロジェクト管理がしやすくなります。
-
運用の現実
- GKEは自由度と拡張性は最高ですが、クラスタ運用の知識が必須です。情シス不在の会社ではほぼ確実にオーバースペックです。
- Cloud Runはインスタンス数、CPU、メモリ、同時リクエスト数を画面かコマンドで設定するだけで済みます。
-
料金の見え方
- Functionsはイベント駆動で細かく課金され、細分化した結果どこで費用が膨らんでいるか見えづらくなりがちです。
- Cloud Runはサービス単位でCPU・メモリ・リクエストの集計がしやすく、経理への説明もしやすい構造です。
AWS LambdaやApp Runnerとの比較で見えるCloud Runの得意分野と、選ばないほうがいい場面もリアル解説
AWS環境と迷うケースも多いので、LambdaとApp Runnerとの違いも整理しておきます。
| 比較対象 | 強み | Cloud Runが有利な場面 | 選ばないほうがよい場面 |
|---|---|---|---|
| AWS Lambda | イベント駆動・細かい課金 | コンテナ前提、HTTP API中心、GCPサービスと密連携したい | 関数レベルで超細かいイベント処理だけを安く回したい |
| AWS App Runner | フルマネージドWebコンテナ | GCPでBigQueryやCloud Storageと連携する分析・業務アプリ | 既にAWSに全システムが集約されておりGCPを増やしたくない |
現場で「このサービスを選ばないほうがよい」典型パターンも押さえておきます。
-
社内インフラが完全にAWSで統一されており、監視やVPC、ガバナンスもAWS基準で固まっている
-
1リクエストあたりの処理が極端に短く、イベント駆動の関数課金のほうが明らかに安くなるケース
-
GPU前提の重いAI推論を常時回し続ける構成を想定している(この場合は専用のGPUインスタンスや別サービスのほうが料金をコントロールしやすいです)
逆に、次のようなケースではCloud Run側が強くなります。
-
PythonやNode、Rails、Django、FastAPIなど既存アプリをそのままコンテナ化して、WebアプリやAPIとして早く出したい
-
BigQueryやPub/Sub、Cloud Tasksと連携した業務処理を作りたい
-
中小企業でインフラ担当が実質1人しかおらず、kubernetesやEC2の細かいチューニングに時間を割けない
こうした比較を押さえておくと、「なんとなくモダンだから」ではなく、「自分たちの体制と財布に合うから」という理由で選べるようになります。
Cloud Runで「できること」をWebアプリとAPIとバッチのリアルユースケースから発見
「小さく始めて、当たったら一気に伸ばしたい」──そのワガママを一番素直に聞いてくれるのが、このサービスです。ここでは、実際の現場でどう使うとおいしいのかを、Webアプリ・API・バッチ処理に分けて整理します。
WebアプリやAPIをCloud Runでホストするベストな使い方(PythonやNodeやRailsやDjangoやFastAPIまで網羅)
このサービスは、要するに「コンテナで包んだアプリをHTTPで実行する場」です。PythonでもNode.jsでもRailsでもDjangoでもFastAPIでも、Dockerfileさえ書ければほぼ同じ流れでデプロイできます。
代表的な構成を整理すると次のようになります。
| ユースケース | 言語・フレームワーク例 | 現場でのベストな使い方 |
|---|---|---|
| 管理画面付きWebアプリ | Django / Rails / Laravel | 1サービス1コンテナでシンプル運用。最小インスタンスは0〜1で調整 |
| 軽量APIサーバー | FastAPI / Express / NestJS | 同時リクエスト数を増やしてコスパ重視。ヘルスチェック必須 |
| 管理系の社内ツール | Flask / Next.js API Routes | IAPや認証プロキシと組み合わせて社外からのアクセスを遮断 |
| Webhook受信 | Node.js / Go | タイムアウトとリトライを厳しめに設定。ログを細かく残す |
特に忘れがちなのがタイムアウトと同時リクエスト数の設計です。レスポンスが軽いAPIなら、CPUやメモリを抑えつつ同時リクエスト数を増やすことで料金をかなり削れます。逆に、画像変換やレポート生成のような重い処理を入れると、1リクエストが長時間走り続けてCPU課金が膨らみます。
私の視点で言いますと、本番前に「1アクセスあたり何秒CPUを使うか」をローカルでざっくり測り、月間アクセス数と掛け合わせて、料金の“上限イメージ”を作っておくチームほど、請求で揉めにくい印象があります。
Cloud Run jobsとCloud Schedulerで定期実行やバッチ処理も思いのまま
WebやAPIだけでなく、定期実行やバッチ処理も得意分野です。ポイントはCloud Run jobsとCloud Schedulerの組み合わせ方です。
-
Cloud Run jobs
- コンテナを「ジョブ」として実行
- 1回回して終わる系の処理(集計・レポート生成・外部API同期など)に向く
-
Cloud Scheduler
- cronのマネージド版
- HTTP呼び出しやPub/Sub経由でサービスやジョブを起動
-
典型パターン
- Scheduler → Pub/Sub → バッチ用サービス
- Scheduler → 直接HTTPでジョブ起動
実務では、次のような“分け方”が失敗を減らします。
| 処理タイプ | 向いている構成 | 注意ポイント |
|---|---|---|
| 1日1回の集計 | Cloud Run jobs + Scheduler | ジョブの制限時間とリトライ回数 |
| 1分ごとの軽量ポーリング | Scheduler → HTTPサービス | 同時実行数が増えすぎないよう制御 |
| 大量行のバッチ処理 | Pub/Subで分割 + バッチ用サービス | メッセージ量と同時実行の上限設定 |
ジョブに“全部詰め込む”と、1回の実行が長くなりすぎてタイムアウトや料金の面で苦しくなります。大きい処理はPub/Subで分割し、小さい仕事の集合にして並列実行するのが、コストと安定性の両面で安全です。
BigQueryやCloud StorageやCloud TasksやPubSubとCloud Runを連携した際に遭遇する“現場トラブル”を見逃すな
データ連携を始めた瞬間から、トラブルのタネが一気に増えます。よくあるのは権限・ネットワーク・料金の3つです。
-
BigQuery連携で起きやすいこと
- サービスアカウントにデータセットの権限がなくて403
- 長時間クエリで処理時間が伸び、ジョブのタイムアウトに引っかかる
-
Cloud Storage連携で起きやすいこと
- バケットのリージョンとサービスのリージョンが離れていて、ネットワーク料金が無駄に発生
- 大容量オブジェクトを大量にGETして、想定外のネットワーク課金
-
Pub/Sub・Cloud Tasks連携で起きやすいこと
- リトライ設定が強すぎて、障害時に同じリクエストが一気に雪崩れ込み、サービスがパンク
- タスクのターゲットURLを公開設定にしてしまい、外部から叩かれるリスクを生む
現場での鉄板チェックリストを挙げておきます。
-
サービスアカウントに必要最小限のロールだけを付与しているか
-
各サービスのリージョンをそろえて、無駄なネットワーク料金を出していないか
-
Pub/SubやCloud Tasksのリトライポリシーが「指数バックオフ」になっているか
-
定期バッチとWebトラフィックが同じサービスに集中していないか
このあたりを最初から意識しておくと、「動くけれど、請求と障害対応が地獄」という状態をかなり避けやすくなります。中小企業や個人開発こそ、ここを押さえて“身の丈に合ったクラウド活用”にしていきたいところです。
Cloud Runの料金と無料枠を“数字”ではなくシナリオで体感!リアルなイメージをつかもう
Cloud Run料金の正体に迫る!CPU・メモリ・リクエスト・ネットワークで財布がどう変動するかストーリー仕立てで解説
最初に押さえたいのは、「どこでメーターが回るか」です。料金はざっくり言うと次の4要素の掛け算で決まります。
| 要素 | 何をした時に増えるか | 現場で起きがちな誤算 |
|---|---|---|
| CPU・メモリ | コンテナが起動し処理している時間 | 最小インスタンスを上げすぎて24時間料金発生 |
| リクエスト数 | HTTPリクエストを受けた回数 | テスト環境に外部監視を当てて件数が膨らむ |
| リクエスト時間 | 1件あたりの処理時間 | 外部API待ちでダラダラ時間だけ課金 |
| ネットワーク | リージョン外やインターネットへの通信量 | 外部DB接続や外部API呼び出しでじわじわ増加 |
私の視点で言いますと、料金トラブルの多くは「自分で直接触っていないサービス側の時間や通信」が財布を削っているケースが目立ちます。アプリのコードより、VPC経由のデータベース接続や外部API待ち時間をまず疑うと早く原因にたどり着けます。
典型的な失敗パターンはこの2つです。
-
コールドスタートが嫌で最小インスタンスを1→3に増やしたまま、本番も検証も24時間動かし続ける
-
安いと思って別リージョンのデータベースを使い、ネットワーク課金が本体より高くなる
どちらも「1秒あたりは安いけれど、積もると痛い」というサーバーレス特有の落とし穴です。
Cloud Runの無料枠とGoogle Cloud無料トライアルで本当に0円に挑戦できる賢い構成とは
無料枠と無料トライアルを使えば、個人開発や小さな業務ツールならかなり0円に近づけます。ただし、構成を間違えると一瞬で有料ゾーンに踏み込みます。
0円チャレンジを狙うなら、最低限この設計がポイントです。
-
無料対象リージョンを選ぶ
無料枠が適用されるリージョンをコンソールで確認し、サービスもデータもそこに揃えます。
-
同じリージョン内で完結させる
無料枠のコンテナから別リージョンのデータベースに飛ばすと、通信分は普通に課金されます。
-
Always Free対象と組み合わせる
軽いWebアプリなら、無料対象の小さなComputeインスタンスやデータベースの無料階層と連携させると安定して低コストになります。
-
無料トライアルのクレジットは“誰の名義か”を決める
中小企業ではここが地雷です。担当者の個人アカウントで始めてしまうと、経理処理も責任の所在もあいまいになります。
要は、サービス単体ではなく「リージョン」「ネットワーク」「名義」の3点セットで設計できるかどうかが、0円に近づけるかの分かれ目です。
月間1万件・10万件・100万件アクセス時にCloud Runの請求額はどれくらい跳ねるのかをざっくり体験しよう
最後に、アクセス規模ごとの感覚値をシナリオでイメージしてみます。ここでは、軽めのAPIやWebアプリで「数百ミリ秒でレスポンスを返す」「外部APIやDBとの通信は同じリージョン内」という前提にします。
| 月間アクセス | 規模感イメージ | 請求イメージ |
|---|---|---|
| 約1万件 | 社内ツール、小規模な問い合わせフォーム | 無料枠の範囲でおさまる可能性が高い |
| 約10万件 | 小さめのBtoBサービス、社内ポータル | 設計が良ければ数百円〜数千円レンジ |
| 約100万件 | 一般向けWebサービス、API提供 | CPU・ネットワーク設計次第で一気に数千円〜数万円も視野 |
ここで効いてくるのが次の3点です。
-
同時リクエスト数を上げてインスタンス数を抑えられるか
フレームワーク調整で同時処理数を上げれば、CPU時間を節約できます。
-
不要な外部通信を減らせるか
キャッシュやバッチ処理で、毎リクエストの外部API呼び出しを抑えます。
-
最小インスタンスを本当に上げる必要があるか
夜間はアクセスがほぼゼロのサービスなら、思い切って最小インスタンス0にしてコールドスタートを受け入れた方が総額は安く済みます。
アクセスが10倍になると、何も工夫しなければほぼ10倍の請求になります。ただし、同時リクエストやキャッシュ設計を工夫すると、「アクセスは10倍、料金は3倍程度」で抑え込めるケースも珍しくありません。ここをコントロールできるかどうかが、中小企業や個人開発がサーバーレスを“本当に安く”使い倒せるかの分岐点になってきます。
実務でありがちなCloud Runの“料金事故”と構成ミスを徹底解剖!避けるべき落とし穴集
「サーバーレスだからきっと安いはず」と思って触り始め、翌月の請求画面を見て血の気が引く──現場ではそんなケースを何度も見てきました。ここでは、特に中小企業と個人開発で起こりがちな料金事故を、構成ミスレベルまで分解して整理します。
最小インスタンス設定や同時リクエスト数に潜む罠!Cloud Runのコールドスタート回避で赤字になるパターン
コールドスタートが嫌で、最小インスタンスをむやみに増やすと一気に「常時起動サーバー化」します。CPUとメモリの組み合わせ次第では、アクセスが少なくても固定費が発生し続ける状態になります。
よくある失敗パターンを整理すると次のようになります。
| 設定ミス | 何が起きるか | 典型シナリオ |
|---|---|---|
| 最小インスタンスを複数に設定 | 夜間も常時インスタンス起動 | 社内ツールで日中しか使わないのに24時間課金 |
| 同時リクエスト数を低く設定 | インスタンスが増え過ぎる | 軽いAPIなのに1リクエスト1インスタンス前提 |
| タイムアウト長すぎ | 無駄にCPUとメモリを保持 | 外部API待ちで長時間ぶら下がり |
私の視点で言いますと、まずは「最小インスタンス0」「同時リクエスト数高め」でスタートし、アクセスログとレスポンス時間を見ながら少しずつ調整する運用が、少人数チームには一番現実的です。いきなり理想のレスポンスを狙うより、「許容できる遅さ」と「財布の中身」のバランスを探るほうが安全です。
Cloud Run×外部データベース・外部API連携でネットワーク課金がじわじわ効いてくる現象とは
本体のサービス料金だけ見て安心し、ネットワーク料金をノーマークにしているケースも危険です。特に外部データベースや他クラウドのAPIと頻繁に通信する構成は、トラフィックが増えた途端に請求額が跳ねやすくなります。
代表的な「じわじわ高くなる」構成は次の通りです。
-
別リージョンのデータベースに毎リクエスト接続
-
他クラウドのAPIへ大量の小さなリクエストを送信
-
ファイルアップロード処理で、アプリ経由でストレージに転送している
対策としては、次の順番で検討すると被害が減ります。
- データベースを同一リージョンに寄せる
- まとめて処理できるものはバッチやジョブにして回数を減らす
- ファイルはアプリを経由させず、ストレージへの直接アップロード方式を採用する
ネットワーク課金は「1回あたりは小さいけれど、とにかく回数が多い処理」が一番危険です。アクセス数が伸びてきたタイミングでログを見直し、「どのエンドポイントが外部接続を何回しているか」を可視化しておくと、早めに手が打てます。
GCP無料枠をなんとなく使ったせいで発生する「いつのまにか課金」事件とシンプルな防止策
無料枠と無料トライアルは便利ですが、「誰のアカウントで」「どこまで無料か」を決めずに始めると、翌月からしれっと課金が始まり、社内で責任の押し付け合いになるパターンが本当に多いです。
最低限、次の3点だけは事前に紙に書いて合意しておくと揉めません。
-
名義
- どのGoogleアカウントとどのプロジェクトを業務利用とみなすか
-
上限
- 月いくらまでならテストとして許容するか
-
停止基準
- 予算の何割に達したら一度サービスを止めて見直すか
あわせて、請求アラートと予算アラートを必ず有効化し、通知先に「担当エンジニアだけでなく、経理か責任者のメール」も追加しておくと、トラブルになりにくくなります。
サーバーレスのサービスは、うまく設計すれば小規模でも非常にコスト効率が良い一方で、ちょっとした設定ミスが延々とお金を吸い続ける仕組みにもなり得ます。料金事故のパターンを先に知ったうえで触り始めるかどうかで、数カ月後の請求画面に対する気持ちが大きく変わってきます。
Cloud Runへのデプロイは最初の30分が勝負!2週間後にも後悔しない設定術
「ひとまず動いたけど、このまま本番に出して大丈夫なのか…?」と不安になった経験があるなら、最初の30分と最初の2週間の過ごし方を変えるだけで、後からの炎上リスクは一気に下げられます。ここでは情シス不在のチームでも回せる、現場基準のデプロイ設計をまとめます。
はじめてのgcloud run deployはコンテナイメージとDockerfileを超最小構成で即動かすテク
最初の目的は「インフラを理解すること」ではなく「1本のHTTPリクエストが通る状態」を最速で作ることです。余計な環境変数や多段ビルドに手を出す前に、次の超最小構成を押さえます。
-
1ポートだけを公開(PORT 8080に固定)
-
ヘルスチェックはアプリ側で/healthを返すだけ
-
Artifact Registryに1つのリポジトリだけ作成
おすすめの作業ステップは次の通りです。
- ローカルでhelloworldレベルのアプリケーションを用意
- 単純なDockerfileで
CMD ["python", "app.py"]のように1行に集約 gcloud builds submitでイメージをビルドしArtifact Registryへプッシュgcloud run deployでリージョンとCPU/メモリだけ指定
この段階では認証をあえて「全員アクセス可」にしておき、後で必ず閉じる前提にすることがポイントです。最初からIAPやサービスアカウントを固めに行くと「403で一歩も進まない」パターンにはまりがちです。
開発効率アップ!Cloud Runの開発環境をラクに作る裏ワザ(ローカル検証から本番まで)
次に困るのが「ローカルと本番で挙動が違う問題」です。業界人の目線で言うと、ここを雑にするとデバッグ時間が一気に増えて料金にも跳ね返ります。
よく効くのは、環境ごとの差分をENVとサービスアカウントに集約する設計です。
-
共通: 同じコンテナイメージ、同じコードベース
-
差分:
- DATABASE_URLなどの接続先
- 外部APIキー
- CPU/メモリと同時リクエスト数
環境構成を表にすると整理しやすくなります。
| 項目 | ローカル開発 | ステージング | 本番 |
|---|---|---|---|
| 実行環境 | docker compose | Cloud Run(最小インスタンス0) | Cloud Run(最小インスタンス>=1) |
| 認証 | ダミーキー/モックAPI | サービスアカウントJSON | Workload Identity連携 |
| データベース | ローカル/テストDB | 小サイズインスタンス | 本番DB |
| ログの確認方法 | コンソール出力 | Cloud Logging | Cloud Logging+アラート |
私の視点で言いますと、ローカルでdocker composeを使い、本番と同じポート・同じ環境変数名に揃えるだけで、トラブルの3割は消えます。
2週間後に差がつくCloud Run設定見直しリスト(タイムアウト・Ingress・サービスアカウント他)
最初のデプロイから2週間経つ頃には、アクセス数やエラー率の傾向が見えてきます。このタイミングで必ず見直してほしいのが次のチェックリストです。
-
タイムアウト
- 処理時間+外部API待ち時間+余裕30%を見込んで設定しているか
- レスポンスが遅いのにタイムアウトだけ伸ばしていないか
-
最小インスタンス数
- コールドスタート対策で増やし過ぎていないか
- 夜間や休日は0でよいサービスかどうかを見直したか
-
同時リクエスト数(コンカレンシー)
- CPUとメモリ使用率を見ながら適切に調整しているか
- データベース接続数の上限を超えない設計になっているか
-
Ingressと認証
- パブリック公開が本当に必要なエンドポイントだけか
- IAPやIDベースの認証を検討したか
-
サービスアカウントと権限
- 「オーナー」権限を付けたまま運用していないか
- 必要最小限のロールに整理したか
特に最小インスタンスと同時リクエスト数の組み合わせは、料金とパフォーマンスの両方に直結します。アクセスが少ないのにインスタンスを常時1以上にし、コンカレンシーも低くすると、いわば「ガラ空きの居酒屋を24時間営業している」状態になり、CPUとメモリの料金がじわじわ効いてきます。
この2週間レビューをチームの定例に組み込むだけで、「いつのまにか高くなっていた」という料金事故はかなりの確率で防げます。中小企業や個人開発でも回せる現実的な工夫として、設定変更の履歴と理由を1枚のドキュメントに残しておくこともおすすめです。
Cloud Runで意外と多いエラーと“止まらないサービス”へ変えるレスキューテクニック
本番リリース直後に403とタイムアウトが乱発し、「サービスは動いているのにユーザーは使えない」状況に陥るケースが少なくありません。ここを押さえておくと、夜中に叩き起こされる頻度が目に見えて減ります。
Cloud Run403や認証トラブルの正体を解明!IAP・IAM・サービスアカウントで何が連動しているのか
403の多くは「誰が」「どこ経由で」「何として」アクセスしているかの設計漏れです。
典型パターンを整理します。
| 起きる403 | 本当の原因 | 見直すポイント |
|---|---|---|
| 社内だけアクセスのつもりが全員403 | IAPは通るがCloud Run側IAMが拒否 | サービスのメンバーとロール |
| バックエンドAPIだけ403 | 呼び出し元サービスアカウントに権限なし | 呼び出し元のIAMロール |
| ローカルからcurlすると403 | 未認証拒否設定でトークン未付与 | 認証方式とトークン取得手順 |
私の視点で言いますと、最初にやるべきは「人間」と「サービスアカウント」を完全に分けて考えることです。
-
人間のアクセス
- IAP経由のブラウザアクセス
- Googleアカウントやグループにロール付与
-
サービス間のアクセス
- 呼び出し元Cloud RunやCloud Functionsのサービスアカウント
- minimum権限のIAMロール付与
ここを混ぜてOwnerロールをばらまくと、403は減りますが一発削除・誤課金のリスクが跳ね上がります。認証エラーを減らしつつ安全にするなら、以下の順番で確認すると迷いにくくなります。
- IAPの対象にしているバックエンドとホスト名
- Cloud Run側の「認証が必要」設定
- アクセス元のID(ユーザー or サービスアカウント)に付いているロール
Cloud Run×VPC接続やデータベース接続で頻出するタイムアウト問題の発生源と切り分けテク
VPCコネクタや外部データベース接続を入れた途端、コールドスタートより厄介なタイムアウトが出るケースが増えます。ポイントは「どこで詰まっているか」を冷静に分解することです。
よくある発生源は次の3つです。
-
VPCコネクタのスループット不足やリージョン不一致
-
データベース接続プールをインスタンスごとに作りすぎ
-
DNS解決やプロキシ経由の待ち時間が積み重なっている
切り分けのコツは、タイムラインを意識したログ設計です。
-
アプリ開始直後に「DB接続開始」「接続成功」をログ出力
-
HTTPハンドラの最初と最後でタイムスタンプを記録
-
VPCコネクタ経由の宛先IPやポートを明示しておく
この3点だけでも、「アプリコードが遅いのか」「ネットワークか」「DBか」がかなり見えます。タイムアウト値を闇雲に伸ばす前に、VPCコネクタのリージョンや同時接続数、データベース側の接続上限をテーブルにして整理すると、ボトルネックが浮き上がります。
| 層 | よくあるボトルネック | すぐ試せる対策 |
|---|---|---|
| アプリ | 同期I/Oの待ち時間 | 非同期処理やキュー導入 |
| ネットワーク | VPCコネクタの帯域 | リージョン統一・スケール設定 |
| DB | コネクション過多 | 接続プール共有・上限調整 |
ログ&メトリクスを使い倒してCloud Runのボトルネックを浮き彫りにする実戦ワザ
止まらないサービスを作るには、「落ちてから探す」のではなく「おかしくなる前の兆候」を見る設計が必要です。最低限押さえたい視点は次の3つです。
-
リクエスト単位のレイテンシとエラー率
-
インスタンス数と同時リクエスト数
-
CPU・メモリ使用量とタイムアウトの相関
実務でおすすめしているのは、運用チーム用の簡易ダッシュボードを1枚だけ作ることです。
| 指標 | 目的 | 目安の見方 |
|---|---|---|
| p95レイテンシ | ほとんどのユーザー体験 | 突然倍以上になっていないか |
| エラー率 | 障害検知 | 数分単位で急増していないか |
| インスタンス数 | スケール挙動 | トラフィックに比例しているか |
| メモリ使用量 | OOM対策 | 上限近くで張り付いていないか |
この1枚を見れば、料金の上振れも含めて「何が起きているか」を数分で判断できます。ログは開発者、メトリクスは運用担当と経営層の共通言語にしておくと、夜中のトラブルでも誰が何をするか迷わず動ける体制になります。
Cloud Run・Cloud Functions・App Engine・GKEを“現場基準”で選び分ける黄金ルール
クラウドのサービス名を並べて眺めていても、月末の請求書は待ってくれません。大事なのは「どれがかっこいいか」ではなく「どれなら自分のチームで回し切れるか」です。
まずは4サービスを、現場で本当に効く3軸でざっくり整理します。
| 観点 | Cloud Run | Cloud Functions | App Engine | GKE |
|---|---|---|---|---|
| 開発の自由度 | 高い(任意のコンテナ) | 低い(ランタイム依存) | 中(一部制約あり) | 最高(フルKubernetes) |
| 運用負荷 | 低〜中 | 低 | 中 | 高 |
| 料金の読みやすさ | 中 | 高 | 中 | 低 |
| 向いている規模 | 数千〜数百万アクセス | イベント駆動・小粒処理 | レガシー移行 | 大規模・複雑構成 |
Cloud RunとCloud Functionsの違いをイベント駆動・コンテナ自由度・料金で一刀両断!
この2つは「似て非なるもの」です。迷ったときは、次の3つを順番にチェックすると判断しやすくなります。
-
トリガーの種類
- Functions: Pub/SubやStorageイベント、HTTPトリガーの「イベント駆動」が主役です。
- Cloud Run: 基本はHTTPリクエスト。イベントはEventarc経由で受ける構成になります。
→ スケジューラで定期実行したい、Webhookを受けたい程度ならどちらでも良いですが、イベント種別が多い場合はFunctionsが素直です。
-
コンテナ自由度
- Functions: 対応ランタイム前提のコードデプロイ。Rustや独自バイナリなどは一工夫必要です。
- Cloud Run: Dockerfileで作ったコンテナをそのまま実行。GPU対応や重いライブラリも載せやすいです。
→ 異なる言語混在、ワーカー用コンテナ、AI推論用のGPUワークロードが出てきた時点でCloud Run優位になります。
-
料金の“伸び方”
- Functions: 実行時間とメモリ単位で課金。短時間の関数が大量に走るほど相性が良いです。
- Cloud Run: CPUとメモリ、リクエスト数、ネットワークで課金。最小インスタンス数を上げ過ぎると「待機時間」にも料金が乗ります。
→ 「イベント1回あたりの処理が軽い」「ログインAPIのように常に薄くアクセスがある」場合はFunctionsが安くなる場面が多く、数秒〜数十秒かかる業務処理やバッチ処理はCloud Runの方が読みやすいです。
私の視点で言いますと、情シス不在の中小企業であれば、まずCloud Runを基本にしつつ、バラバラな小タスクだけFunctionsに切り出す形が、運用の分かりやすさと料金のバランスがとりやすいと感じます。
App EngineからCloud Runへ移行した生事例でわかる「昔の常識」と「今最適な構成」
昔は「とりあえずApp Engine」という時代がありました。スケーリングもログも自動で、LAMP的な感覚で使えたからです。ただ、今は常識が変わっています。
よくある移行シナリオをパターンで見ると、判断ポイントがクリアになります。
-
昔の常識
- App Engine標準環境にロックインしたコード
- appengine-web.xml前提の設定
- インスタンスクラス単位での性能・料金調整
-
今最適とされやすい構成
- 既存アプリをコンテナ化してCloud Runにデプロイ
- 定期バッチはCloud Run jobsとCloud Schedulerで分離
- 認証やIAPはIdentity Aware Proxyとサービスアカウントで統一管理
移行の現場で多い失敗は「App Engine時代の“なんとなく安全寄り設定”をそのまま持ち込む」ことです。例えば、Cloud Runで最小インスタンス数を大きめに設定し、結果としてApp Engine以上に待機コストが膨らむケースがあります。
移行後2週間で必ず確認してほしいのは、次の2点です。
-
最小インスタンス数と同時リクエスト数が、本当にトラフィックに見合っているか
-
アプリ内で前提にしている環境変数やファイルパスが、コンテナ環境に最適化されているか
ここを押さえるだけで「移行したのに高くて重い」という不満はかなり減らせます。
GKEやAWS App RunnerやAWS Lambdaとの比較で見抜くCloud Runを選ぶべき3つのシーン
他クラウドまで含めた比較をする時は、スペック表ではなく「チームに残る運用作業」で比べる方が本質に近づきます。次の3シーンに当てはまるなら、Cloud Runを第一候補にして問題ないケースが多いです。
-
Kubernetesを触る人がいないのにコンテナを使いたい
- GKEは強力ですが、ノードプールやマニフェスト管理が避けて通れません。
- Cloud Runはgcloud run deployでイメージを投げるだけでオートスケールするため、「Kubernetes管理者を雇うほどではないチーム」に向きます。
-
AWS Lambdaの制約がストレスになり始めている
- 実行時間やパッケージサイズの制限、ランタイムサポート終了の影響が大きくなってくると、コンテナベースのApp RunnerやCloud Runが候補になります。
- 特にPythonやNodeでライブラリが肥大化しているAPIは、コンテナ化した方が依存関係の管理が安定します。
-
料金とネットワーク構成をシンプルに保ちたい
- GKEや複数AWSサービスを組み合わせると、ロードバランサ、VPC、NATなどの料金が読みにくくなります。
- Cloud RunはHTTPエンドポイント前提のため、ロードバランサやVPCを増やし過ぎなければ「どこで課金されているか」が追いやすい構成にできます。
中小企業や個人開発であれば、「GKEをフル活用する構成」は人件費も含めた総コストが一気に跳ね上がります。コンテナを使いたい、でもKubernetesクラスターは面倒、このギャップを埋めてくれる領域こそが、Cloud Runを選ぶべき甘いスポットと言えます。
中小企業や個人開発がCloud Runを使う前に知っておくべき“お金&権限”のリアルなポイント
「サーバーレスだから安いはず」が、請求書を見て一気に冷や汗になる瞬間を、現場では何度も見ています。技術より前に、お金と権限のルールを先に固めたチームほど、後から楽になります。
Cloud RunやGCP無料枠をビジネスで正しく使うため最低限決めておく3つのこと(名義・上限・停止基準)
まずはこの3点だけは必ず決めてからスタートします。
-
誰の名義で契約するか
-
いくらまでなら使ってよいか
-
どの状態になったら止めるか
名義・上限・停止基準をざっくり整理すると次のようになります。
| 項目 | 決めないと起きがちな事故 | 最低限の決め方 |
|---|---|---|
| 名義 | 経理が「この請求誰の?」と迷子になる | 部門責任者名義+管理者用メールで統一 |
| 上限 | テスト中にトラフィック急増で青天井課金 | 月額予算と上限アラートを最初に設定 |
| 停止基準 | 使われていないサービスがダラダラ課金 | 3か月アクセスなしは停止、など明文化 |
無料枠や無料トライアルを業務で使うときは、特に「誰の予算として扱うのか」を決めておかないと、後から部門間で押し付け合いになりやすいです。私の視点で言いますと、最初の打ち合わせでこの3点を紙1枚に書き出すだけで、後々のトラブルの半分は消えます。
情シス不在の会社でも安心!Cloud Run運用時のリアルな役割分担(開発・運用・経理・経営)
少人数の組織では「全部エンジニア任せ」にしがちですが、実際には次のように分けると安定します。
| 役割 | 主な担当 | 具体的にやること |
|---|---|---|
| 開発 | エンジニア | コンテナイメージ作成、gcloudでデプロイ、ログ確認 |
| 運用 | エンジニア or 現場リーダー | スケール設定、サービスアカウントやIAPの権限確認 |
| 経理 | 経理担当 | 請求金額チェック、上限超過の早期検知 |
| 経営 | 経営層 | 月額の予算枠決定、停止基準への合意 |
ポイントは、請求書の中身を開発だけに見せないことです。経理にもコンソールの課金レポート画面を見せ、「このサービスがこのくらいの金額」という感覚を共有しておくと、「なんとなく不安なので全部止めたい」という極端な判断を避けられます。
開発会社やフリーランスに「Cloud Runで行きましょう」と言われたときに逆に聞くべき質問集
外部の開発パートナーから提案を受けたときは、技術的な良し悪しよりも、次の質問を投げてみてください。ここで答えがあいまいなら、将来のトラブル候補です。
-
この構成で、一番お金がかかるのはどのサービスですか
-
月間1万アクセスと10万アクセスで、おおよそどれくらい料金が変わりますか
-
最小インスタンス数や同時リクエスト数は、どんな考え方で設定しますか
-
データベースや外部APIとの接続は、VPC経由なのかインターネット経由なのか
-
本番と検証環境を分けたとき、それぞれにどんな予算上限を置きますか
-
認証はIAPを使うのか、サービスアカウントやIAMロールは誰が管理しますか
-
請求書やプロジェクトのオーナー権限は、最終的にどちらの会社が持ちますか
これらの質問に対して、料金計算やリクエスト数、ネットワーク課金の話まで踏み込んで説明してくれるパートナーであれば、インスタンス設定やジョブ実行の頻度についても現実的な提案をしてくれる可能性が高いです。逆に「サーバーレスなので安いです」の一言で済ませる相手には、もう一段掘り下げて本音を聞き出してから契約することをおすすめします。
本当に現場で使えるCloud Run選定のための頼れる相談先NewCurrentという選択肢
ツール単体でなく業務フロー・端末・通信状況からCloud Runを評価するプロ視点
インフラの話だけでサービスを決めてしまうと、あとから「社内のWi‑Fiが不安定でタイムアウト連発」「現場のPCが古くて管理画面が重い」といった、机上では見えないトラブルに直面します。
私の視点で言いますと、Cloudベースのサービス選定は、次の3点をセットで見ることが前提になります。
-
業務フロー
-
利用端末(PC・スマホ・タブレット)
-
通信環境(拠点間VPN・テレワーク・モバイル回線)
NewCurrentでは、アプリケーションやコンテナの構成だけでなく、「誰がどこからアクセスするか」「どの時間帯に負荷が集中するか」まで洗い出したうえで、インスタンス数やCPU設定、IAPやIAMの認証設計を一緒に詰めていきます。サーバーレスだから安いはずなのに料金が膨らむパターンは、この3点を切り離してしまったときによく起きます。
Cloud RunはもちろんAI・SaaS・ネット回線までまとめてカバーするNewCurrentの強み
中小企業の現場では、「アプリは外注、ネット回線は別会社、PC管理は誰も担当がいない」という分断が起きがちです。この状態でCloud Runの料金だけを最適化しても、全体のITコストは下がりません。
NewCurrentが意識しているのは、サービス単体ではなくITインフラ全体の家計簿をそろえることです。
| 見直し対象 | ありがちな落とし穴 | NewCurrentが見るポイント |
|---|---|---|
| コンテナサービス | 無料枠だけを見て選定 | アクセスパターンとジョブの実行時間から、CPU・メモリ・最小インスタンスの損益分岐を確認 |
| データベース/VPC | ネットワーク課金を軽視 | リージョン配置とVPC接続方式を整理し、通信コストを試算 |
| SaaS/AIツール | 部門ごとにバラバラ契約 | アカウント名義と請求管理を統合し、権限とログイン運用を設計 |
| 回線・端末 | 速度と台数だけで購入 | クラウド前提の帯域と端末性能を前提にした更新サイクルを提案 |
Cloud RunでWebアプリをホストしつつ、業務システム側はSaaS、分析はBigQuery、社外とのファイル共有は別サービス、といった構成をまとめて整理できるのが大きな強みです。システム同士の接続で発生するAPIコールやネットワーク課金まで視野に入れることで、「使えば使うほどどこが高くなるのか」を事前に描き出せます。
これからCloud Runを検討するあなたがNewCurrentの記事を“セカンドオピニオン”活用するコツ
すでに開発会社やフリーランスから提案を受けている方ほど、NewCurrentの記事はセカンドオピニオンとして役立ちます。おすすめの読み方は次の通りです。
-
提案資料と照らし合わせて、次の観点が説明されているかをチェック
-
料金試算に「ネットワーク」「最小インスタンス」「外部DB接続」が入っているか
-
認証まわりでIAPとIAM、サービスアカウントの責任分界が明記されているか
-
GCP無料枠とGoogle Cloud無料トライアル終了後の運用費用が分けて示されているか
-
社内で誰が請求アラートや上限設定を管理するかが決まっているか
これらが抜けている場合は、NewCurrentの記事をガイドにしながら、提案側に追加で質問してみてください。「最小インスタンスをいくつにすると、月間10万アクセス時の料金はどれくらい変わりますか」「VPC接続でネットワーク料金はどこまで想定していますか」といった質問に明確に答えられるかどうかで、長期運用を任せてよいかの目安になります。
NewCurrentは、ツールを売る立場ではなく、中小企業のITインフラ全体を伴走する立場から情報発信をしています。記事を読み進めるうちに、「この構成で本当にうちの財布は守れるのか」という視点で検討を深められるはずです。
この記事を書いた理由
著者 – 村上 雄介(newcurrent編集部ライター)
中小企業のIT支援をしていると、「クラウドはサーバーレスにしておけば安くて楽」と聞いてCloud Runを選び、数ヶ月後の請求と運用負荷に驚くケースを何度も見てきました。原因は高度な技術不足ではなく、Cloud FunctionsやApp Engine、GKEとの違いを曖昧なまま「なんとなく」デプロイしてしまうところにあります。
私自身、検証用のコンテナを最小インスタンス多めで動かし続けてしまい、思った以上にネットワーク課金とCPU利用が積み上がったことがあります。また、別の企業ではCloud Runから外部DBと外部APIへ接続する構成を組んだ結果、レスポンスは問題ないのに、VPC接続と外向き通信の両方でコストと遅延がじわじわ効いていました。
43社の継続支援の中でも、Cloud Run自体は合っているのに、認証設定や権限設計を甘く見たせいで403エラーが頻発し、結局「便利どころか怖いサービス」と評価されてしまった例もあります。
この記事では、こうしたつまずきを前提に、Webアプリ、API、バッチのどこでCloud Runが生きるのか、どこから料金事故が始まるのかを、経営・現場・インフラの目線を交えて丁寧に言語化しました。クラウドに詳しくない中小企業でも、「任せきり」ではなく自分たちで判断とチェックができる状態になってほしい、という思いでまとめています。


