Google Cloud Platformに戻る

Cloud Run

Cloud Runとは

Cloud Run は、Google Cloud Platform (GCP) が提供するフルマネージドのコンテナ実行環境です。コンテナ化されたアプリケーションをサーバーレスで実行できるサービスで、インフラストラクチャの管理なしに、スケーラブルで安全なアプリケーションをデプロイできます。Cloud Runは使用した分だけ課金される従量課金制で、トラフィックがない場合はコストがゼロになる特徴があります。

Cloud Runの主な特徴

Cloud Runのアーキテクチャ

Cloud Runは以下の主要コンポーネントで構成されています:

コンポーネント 説明
サービス 同じコンテナイメージから作成された複数のインスタンスを管理する単位。固有のURLを持ち、トラフィックを受信
リビジョン サービスの特定のバージョン。新しい設定やコンテナイメージでデプロイするたびに新しいリビジョンが作成される
インスタンス コンテナの実行インスタンス。トラフィックに応じて自動的に作成・削除される
コンテナ アプリケーションコード、ランタイム、依存関係を含む独立した実行単位

Cloud Run と Cloud Run Functions の違い

Google Cloudには似たサービスとして Cloud Functions がありますが、以下のような違いがあります:

Cloud Runサービスの作成

Cloud Runサービスは、Google Cloud Console、gcloud CLIツール、またはTerraformなどのIaCツールを使用して作成できます。

Google Cloud Consoleを使用したサービス作成

  1. Google Cloud Consoleにログイン
  2. Cloud Runページに移動
  3. 「サービスを作成」をクリック
  4. コンテナイメージのソースを選択(Artifact Registry、Docker Hub など)
  5. サービス名、リージョン、認証設定などを構成
  6. 「作成」をクリックしてサービスをデプロイ

gcloud CLIを使用したサービス作成

基本的なサービスデプロイ例

gcloud run deploy my-service \
    --image gcr.io/my-project/my-image \
    --region asia-northeast1 \
    --platform managed \
    --allow-unauthenticated

環境変数を設定したデプロイ例

gcloud run deploy my-service \
    --image gcr.io/my-project/my-image \
    --region asia-northeast1 \
    --platform managed \
    --set-env-vars="DB_HOST=my-db-host,API_KEY=my-api-key"

Cloud Runでのアプリケーション開発

Cloud Runで実行するアプリケーションを開発する際の主なポイントは以下の通りです:

コンテナの要件

シンプルなNode.jsアプリケーション例

// server.js
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello from Cloud Run!');
});

const port = process.env.PORT || 8080;
app.listen(port, () => {
  console.log(`Server listening on port ${port}`);
});

対応するDockerfile

FROM node:14-slim
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD [ "node", "server.js" ]

Cloud Runの高度な機能

トラフィック分割

複数のリビジョン間でトラフィックを分割し、カナリアデプロイメントやA/Bテストを実施できます:

gcloud run services update-traffic my-service \
    --to-revisions=revision-001=50,revision-002=50 \
    --region asia-northeast1

カスタムドメインのマッピング

Cloud Runサービスに独自のドメインをマッピングできます:

gcloud beta run domain-mappings create \
    --service my-service \
    --domain myapp.example.com \
    --region asia-northeast1

Cloud SQLとの接続

Cloud Runから安全にCloud SQLインスタンスに接続できます:

gcloud run deploy my-service \
    --image gcr.io/my-project/my-image \
    --region asia-northeast1 \
    --add-cloudsql-instances my-project:asia-northeast1:my-instance \
    --set-env-vars="DB_HOST=127.0.0.1,DB_USER=my-user,DB_PASS=my-pass,DB_NAME=my-db"

Cloud Runのセキュリティベストプラクティス

Secret Managerとの統合例

gcloud run deploy my-service \
    --image gcr.io/my-project/my-image \
    --region asia-northeast1 \
    --update-secrets=API_KEY=my-api-key:latest

Cloud Runのモニタリングとロギング

Cloud RunはGoogle Cloud Monitoringおよびロギングと統合されており、サービスの健全性とパフォーマンスを監視できます:

主なモニタリング機能

カスタムメトリクスの収集

アプリケーション固有のメトリクスを収集するには、Cloud Monitoring APIを使用できます:

// Node.jsでのカスタムメトリクス送信例
const monitoring = require('@google-cloud/monitoring');
const client = new monitoring.MetricServiceClient();

async function writeTimeSeriesData() {
  const projectId = 'my-project';
  const dataPoint = {
    interval: {
      endTime: {
        seconds: Date.now() / 1000
      }
    },
    value: {
      doubleValue: 123.45
    }
  };
  
  const timeSeriesData = {
    metric: {
      type: 'custom.googleapis.com/my-metric',
      labels: {
        service: 'my-service'
      }
    },
    resource: {
      type: 'global',
      labels: {
        project_id: projectId
      }
    },
    points: [dataPoint]
  };
  
  const request = {
    name: client.projectPath(projectId),
    timeSeries: [timeSeriesData]
  };
  
  const result = await client.createTimeSeries(request);
  console.log('Done writing time series data.');
}

Cloud Runのコスト最適化

Cloud Runのコストを最適化するためのベストプラクティス:

コンカレンシー設定の例

gcloud run deploy my-service \
    --image gcr.io/my-project/my-image \
    --region asia-northeast1 \
    --concurrency=80

Cloud Runのトラブルシューティング

Cloud Runで発生する一般的な問題とその解決方法:

問題 考えられる原因 解決策
コンテナが起動しない ポート設定の誤り、クラッシュ、メモリ不足 ログを確認
PORT 環境変数で指定されたポートでリッスンしているか確認
メモリ割り当てを増やす
タイムアウトエラー リクエスト処理時間が長すぎる 処理を最適化
タイムアウト設定を延長(最大60分)
長時間実行タスクはCloud Tasksに移行
コールドスタートの遅延 コンテナの起動に時間がかかる コンテナイメージを最適化
最小インスタンス数を設定
起動時の初期化処理を最適化
メモリ使用量の問題 メモリリーク、不適切なメモリ割り当て アプリケーションのメモリ使用量を監視
メモリリークを修正
適切なメモリ割り当てを設定

診断コマンド集

Cloud Runのユースケース

Cloud Runは以下のようなユースケースに適しています:

Cloud Runとの統合サービス

Cloud Runは他のGoogle Cloudサービスと統合して、より強力なソリューションを構築できます:

サービス 統合の利点
Cloud Build コンテナイメージのビルドとCloud Runへの継続的デプロイメント
Artifact Registry コンテナイメージの安全な保存と脆弱性スキャン
Cloud SQL マネージドデータベースサービスとの安全な接続
Secret Manager 機密情報の安全な管理と利用
Cloud Storage 静的ファイルの保存と取得
Cloud Tasks 非同期タスクの実行とスケジューリング
Pub/Sub イベント駆動型アーキテクチャの実装

まとめ

Cloud Run は、コンテナ化されたアプリケーションをサーバーレスで実行するためのフルマネージドプラットフォームです。自動スケーリング、従量課金制、高速デプロイなどの特徴により、開発者はインフラストラクチャの管理ではなく、アプリケーション開発に集中できます。

Cloud Runの主な利点は以下の通りです:

Cloud Runを効果的に活用するには、コンテナ化のベストプラクティスを理解し、適切なリソース設定、セキュリティ対策、モニタリング戦略を実装することが重要です。また、アプリケーションをステートレスに設計し、起動時間を最適化することで、サーバーレス環境の利点を最大限に活かすことができます。