gcloud run は Cloud Run サービスやジョブを管理するコマンドです。コンテナイメージをサーバーレス環境にデプロイし、HTTP リクエストやイベントを処理できます。
前提
1 2
| gcloud services enable run.googleapis.com
|
基本コマンド
| コマンド |
用途 |
gcloud run deploy |
サービスをデプロイ |
gcloud run services list |
サービスの一覧を表示 |
gcloud run services describe |
サービスの詳細を表示 |
gcloud run services delete |
サービスを削除 |
gcloud run jobs create |
ジョブを作成 |
gcloud run jobs execute |
ジョブを実行 |
gcloud run revisions list |
リビジョンの一覧を表示 |
デプロイ
ソースコードから直接デプロイ
Dockerfile や buildpack を使ってソースコードから直接デプロイできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| gcloud run deploy my-service --source=. --region=asia-northeast1
gcloud run deploy my-service \ --source=. \ --region=asia-northeast1 \ --set-env-vars="DB_HOST=10.0.0.1,APP_ENV=production"
gcloud run deploy my-service \ --source=. \ --region=asia-northeast1 \ --allow-unauthenticated
|
コンテナイメージからデプロイ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| gcloud run deploy my-service \ --image=asia-northeast1-docker.pkg.dev/PROJECT_ID/my-repo/my-image:latest \ --region=asia-northeast1
gcloud run deploy my-service \ --image=asia-northeast1-docker.pkg.dev/PROJECT_ID/my-repo/my-image:latest \ --region=asia-northeast1 \ --memory=512Mi \ --cpu=1 \ --min-instances=0 \ --max-instances=10 \ --concurrency=80 \ --timeout=300
|
デプロイオプション
| オプション |
説明 |
--source=. |
ソースコードのパス(ビルドから自動で行う) |
--image=IMAGE |
コンテナイメージの URL |
--region=REGION |
デプロイ先リージョン |
--allow-unauthenticated |
未認証アクセスを許可 |
--set-env-vars=K=V,... |
環境変数を設定(既存を上書き) |
--update-env-vars=K=V,... |
環境変数を追加・更新(既存を保持) |
--set-secrets=K=SECRET:VERSION |
Secret Manager のシークレットを環境変数に |
--service-account=SA |
実行時のサービスアカウント |
--memory=SIZE |
メモリ上限(例: 256Mi、1Gi) |
--cpu=NUM |
CPU 数(例: 1、2) |
--min-instances=N |
最小インスタンス数(コールドスタート対策) |
--max-instances=N |
最大インスタンス数 |
--concurrency=N |
1 インスタンスあたりの同時リクエスト数 |
--timeout=SECONDS |
リクエストタイムアウト(最大 3600 秒) |
--port=PORT |
コンテナがリッスンするポート(デフォルト: 8080) |
--vpc-connector=CONNECTOR |
VPC コネクタ(内部リソースへのアクセス) |
--ingress=INGRESS |
all、internal、internal-and-cloud-load-balancing |
サービス管理
1 2 3 4 5 6 7 8 9 10 11 12 13
| gcloud run services list --region=asia-northeast1
gcloud run services describe my-service --region=asia-northeast1
gcloud run services describe my-service \ --region=asia-northeast1 \ --format="value(status.url)"
gcloud run services delete my-service --region=asia-northeast1
|
トラフィック管理
複数のリビジョン間でトラフィックを分割できます。カナリアデプロイに便利です。
1 2 3 4 5 6 7 8 9 10 11 12
| gcloud run revisions list --service=my-service --region=asia-northeast1
gcloud run services update-traffic my-service \ --region=asia-northeast1 \ --to-revisions=my-service-00001=90,my-service-00002=10
gcloud run services update-traffic my-service \ --region=asia-northeast1 \ --to-latest
|
ジョブ
HTTP リクエストではなくバッチ処理を行う場合はジョブを使います。
1 2 3 4 5 6 7 8 9 10 11 12
| gcloud run jobs create my-job \ --image=asia-northeast1-docker.pkg.dev/PROJECT_ID/my-repo/my-job:latest \ --region=asia-northeast1 \ --tasks=10 \ --max-retries=3
gcloud run jobs execute my-job --region=asia-northeast1
gcloud run jobs executions list --job=my-job --region=asia-northeast1
|
ログの確認
1 2 3 4 5
| gcloud run services logs read my-service --region=asia-northeast1 --limit=50
gcloud run services logs tail my-service --region=asia-northeast1
|
Secret Manager との連携
1 2 3 4 5 6 7 8 9 10 11
| gcloud run deploy my-service \ --image=IMAGE \ --region=asia-northeast1 \ --set-secrets="DB_PASSWORD=db-password:latest"
gcloud run deploy my-service \ --image=IMAGE \ --region=asia-northeast1 \ --set-secrets="/secrets/db-password=db-password:latest"
|
注意点
--source を使う場合、Cloud Build API と Artifact Registry API も有効化が必要
--allow-unauthenticated を付けないとデフォルトで認証が必要(IAM で roles/run.invoker を付与する)
--min-instances=1 以上にするとコールドスタートを回避できるが、常時課金が発生する
--concurrency=1 にすると 1 リクエストずつ処理するが、スケールアウトが増えてコストが上がる
参考リンク