Cloud Run は、Google Cloud Platform (GCP) が提供するフルマネージドのコンテナ実行環境です。コンテナ化されたアプリケーションをサーバーレスで実行できるサービスで、インフラストラクチャの管理なしに、スケーラブルで安全なアプリケーションをデプロイできます。Cloud Runは使用した分だけ課金される従量課金制で、トラフィックがない場合はコストがゼロになる特徴があります。
Cloud Runは以下の主要コンポーネントで構成されています:
コンポーネント | 説明 |
---|---|
サービス | 同じコンテナイメージから作成された複数のインスタンスを管理する単位。固有のURLを持ち、トラフィックを受信 |
リビジョン | サービスの特定のバージョン。新しい設定やコンテナイメージでデプロイするたびに新しいリビジョンが作成される |
インスタンス | コンテナの実行インスタンス。トラフィックに応じて自動的に作成・削除される |
コンテナ | アプリケーションコード、ランタイム、依存関係を含む独立した実行単位 |
Google Cloudには似たサービスとして Cloud Functions がありますが、以下のような違いがあります:
Cloud Runサービスは、Google Cloud Console、gcloud CLIツール、またはTerraformなどのIaCツールを使用して作成できます。
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で実行するアプリケーションを開発する際の主なポイントは以下の通りです:
PORT
で指定されたポートでリッスンする必要がある// 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}`);
});
FROM node:14-slim
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD [ "node", "server.js" ]
複数のリビジョン間でトラフィックを分割し、カナリアデプロイメントや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 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"
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は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のコストを最適化するためのベストプラクティス:
gcloud run deploy my-service \
--image gcr.io/my-project/my-image \
--region asia-northeast1 \
--concurrency=80
Cloud Runで発生する一般的な問題とその解決方法:
問題 | 考えられる原因 | 解決策 |
---|---|---|
コンテナが起動しない | ポート設定の誤り、クラッシュ、メモリ不足 |
ログを確認PORT 環境変数で指定されたポートでリッスンしているか確認メモリ割り当てを増やす |
タイムアウトエラー | リクエスト処理時間が長すぎる |
処理を最適化 タイムアウト設定を延長(最大60分) 長時間実行タスクはCloud Tasksに移行 |
コールドスタートの遅延 | コンテナの起動に時間がかかる |
コンテナイメージを最適化 最小インスタンス数を設定 起動時の初期化処理を最適化 |
メモリ使用量の問題 | メモリリーク、不適切なメモリ割り当て |
アプリケーションのメモリ使用量を監視 メモリリークを修正 適切なメモリ割り当てを設定 |
gcloud run services describe my-service
- サービスの詳細情報を表示gcloud run services logs read my-service
- サービスのログを表示gcloud run revisions list --service my-service
- サービスのリビジョン一覧を表示gcloud run revisions describe revision-name
- 特定のリビジョンの詳細を表示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を効果的に活用するには、コンテナ化のベストプラクティスを理解し、適切なリソース設定、セキュリティ対策、モニタリング戦略を実装することが重要です。また、アプリケーションをステートレスに設計し、起動時間を最適化することで、サーバーレス環境の利点を最大限に活かすことができます。