Webアプリケーションをデプロイしたいけれど、サーバー管理やインフラの設定は避けたい——そんなエンジニアに最適なのがGoogle Cloud Runです。Dockerコンテナさえ用意すれば、あとはCloud Runが自動でスケーリング、HTTPS対応、ロードバランシングまで面倒を見てくれます。
Cloud Runは「コンテナをサーバーレスで実行できるサービス」です。リクエストが来たときだけ課金され、トラフィックがない時はコスト0円。初心者でも15分でデプロイまで完了できます。
1. Cloud Runとは?
Cloud Runは、Googleが提供するフルマネージドなサーバーレスコンテナ実行環境です。従来のサーバーレス(Cloud Functionsなど)と異なり、任意の言語・フレームワークをコンテナとして実行できる点が大きな特徴です。
Cloud Runの主な特徴
- サーバーレス:インフラ管理不要、リクエストベース課金
- コンテナベース:Docker対応、言語・フレームワーク自由
- 自動スケーリング:0から1000インスタンスまで自動調整
- HTTPS標準:SSL証明書の自動管理
- カスタムドメイン:独自ドメインの簡単設定
Cloud Functions vs Cloud Run
よく比較される2つのサービスの違いを整理します:
- Cloud Functions:関数単位のデプロイ、言語制限あり、軽量処理向き
- Cloud Run:コンテナ単位のデプロイ、言語自由、Webアプリ全般向き
2. 環境セットアップ
Cloud Runを使い始めるには、以下の準備が必要です。
前提条件
- Googleアカウント(GCPの無料トライアルで$300のクレジットあり)
- Google Cloud SDKのインストール
- Dockerのインストール
# Google Cloud SDKのインストール(macOS)
brew install --cask google-cloud-sdk
# 初期設定
gcloud init
# プロジェクトの作成
gcloud projects create my-cloudrun-app --name="My Cloud Run App"
gcloud config set project my-cloudrun-app
# 必要なAPIを有効化
gcloud services enable run.googleapis.com
gcloud services enable cloudbuild.googleapis.com
3. 最初のデプロイ
Node.jsの簡単なWebサーバーをCloud Runにデプロイしてみましょう。
Step 1: アプリケーションの作成
// server.js
const express = require('express');
const app = express();
const port = process.env.PORT || 8080;
app.get('/', (req, res) => {
res.json({
message: 'Hello from Cloud Run! 🚀',
timestamp: new Date().toISOString(),
version: '1.0.0'
});
});
app.get('/health', (req, res) => {
res.status(200).json({ status: 'healthy' });
});
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
Step 2: Dockerfileの作成
# Dockerfile
FROM node:20-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 8080
CMD ["node", "server.js"]
Step 3: デプロイ実行
# ソースからそのままデプロイ(Dockerビルドも自動)
gcloud run deploy my-app \
--source . \
--region asia-northeast1 \
--allow-unauthenticated
# デプロイ完了!URLが表示されます
# Service URL: https://my-app-xxxxx-an.a.run.app
--source .オプションを使えば、Dockerfileさえあればローカルでのビルド不要です。Cloud Buildが自動でイメージをビルドしてくれます。
4. 料金体系
Cloud Runの料金は使った分だけの従量課金制です。トラフィックがなければ料金は発生しません。
無料枠(毎月)
- 200万リクエストまで無料
- CPU:180,000 vCPU秒(約50時間)
- メモリ:360,000 GiB秒
- ネットワーク:北米内1GBまで無料
個人ブログやAPI程度なら、無料枠内で十分運用可能です。月間PVが数万程度のサイトでも、ほぼ無料に収まるケースが多いです。
CPU常時割り当てモード(always-on)を使用すると、リクエストがない時間も課金されます。コスト重視の場合は、デフォルトの「リクエスト時のみ」モードを使いましょう。
5. オートスケーリング
Cloud Runの最大の魅力の一つが自動スケーリングです。トラフィックに応じてインスタンス数が自動的に調整されます。
スケーリングの仕組み
- ゼロスケール:トラフィックがない場合、インスタンスを0まで縮小
- 水平スケール:リクエスト増加に応じてインスタンスを追加
- 同時実行制御:1インスタンスあたりの同時リクエスト数を制限可能
# 最小/最大インスタンス数の設定
gcloud run services update my-app \
--min-instances 1 \ # コールドスタート回避
--max-instances 100 \ # コスト制御
--concurrency 80 \ # 同時リクエスト数
--region asia-northeast1
6. 実践的なTips
コールドスタート対策
Cloud Runはゼロスケールが可能ですが、インスタンスが0の状態から起動する「コールドスタート」には数秒かかることがあります。
- 最小インスタンスを1に設定:常に1インスタンス稼働(月額約$5〜10)
- 軽量なベースイメージを使用:
node:20-slimやpython:3.12-slim - 起動時の処理を最小化:初期化処理はリクエスト時に遅延実行
CI/CDとの連携
GitHub Actionsと組み合わせることで、pushごとに自動デプロイが可能です。
# .github/workflows/deploy.yml
name: Deploy to Cloud Run
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: google-github-actions/auth@v2
with:
credentials_json: ${{ secrets.GCP_CREDENTIALS }}
- uses: google-github-actions/deploy-cloudrun@v2
with:
service: my-app
region: asia-northeast1
source: .
Cloud Runは、「とりあえずコンテナを動かしたい」というニーズに最適なサービスです。サーバー管理の煩わしさから解放され、アプリケーション開発に集中できます。ぜひ無料枠を活用して、まずは小さなプロジェクトから試してみてください。