gcp-deploy について
gcp-deployは、Dockerfileを使ったアプリをGoogle Cloud Runに公開するためのデプロイスキルです。ビルド、Artifact Registryへのイメージ登録、デプロイを行い、gcloudコマンドやスクリプトで設定できます。
主な機能
- 01ソースをCloud Runにデプロイ
- 02Cloud Buildでビルド
- 03Artifact Registryへのイメージ登録
- 04リソースと環境変数の設定
- 05ログとサービス情報の確認
活用シーン
- 01コンテナアプリのデプロイ
- 02環境変数やシークレットの設定
- 03リージョン、ポート、メモリ、スケーリングの調整
- 04ビルドやサービス起動の問題調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ fwfutures/ skills --skill gcp-deployインストール後、Claude Code で/gcp-deployを入力して読み込まれたか確認します。
同梱ファイルscripts/deploy.sh
詳細
GCP Cloud Run へのデプロイ
1つのコマンドで、ソースから Cloud Run にデプロイできます。必要なもの:GCP プロジェクト、リポジトリのルートにある Dockerfile、ポート(デフォルトは 8080/PORT 環境変数)でリッスンするアプリ。
クイックデプロイ
# 1. Auth (skip if already logged in)
gcloud auth login
gcloud config set project PROJECT_ID
# 2. Enable APIs (first time only)
gcloud services enable run.googleapis.com cloudbuild.googleapis.com artifactregistry.googleapis.com
# 3. Deploy
gcloud run deploy SERVICE_NAME \
--source . \
--region australia-southeast1 \
--allow-unauthenticated
Cloud Build でコンテナをリモートでビルドし、Artifact Registry にプッシュして Cloud Run にデプロイし、公開 HTTPS URL を返します。同じコマンドを再実行すると再デプロイできます。
デプロイスクリプト
1コマンドでデプロイするには、scripts/deploy.sh をプロジェクトのルートにコピーします。
chmod +x deploy.sh
./deploy.sh my-service
環境変数:GCP_REGION(デフォルト:australia-southeast1)、GCP_PROJECT(デフォルト:現在の gcloud プロジェクト)。
よく使うフラグ
| フラグ | 用途 | 例 |
|---|---|---|
--region | デプロイ先リージョン | australia-southeast1 |
--allow-unauthenticated | パブリックアクセス | |
--port | コンテナのポート(8080 以外の場合) | --port 3000 |
--set-env-vars | 環境変数 | --set-env-vars KEY=val,FOO=bar |
--set-secrets | Secret Manager のシークレット | --set-secrets ENV=SECRET:latest |
--memory | メモリ | --memory 512Mi |
--cpu | CPU | --cpu 1 |
--min-instances | 最小インスタンス数(0 = ゼロまでスケール) | --min-instances 0 |
--max-instances | 最大インスタンス数 | --max-instances 3 |
--timeout | リクエストのタイムアウト(最大 3600) | --timeout 300 |
環境変数とシークレット
インラインの環境変数:
gcloud run deploy SERVICE --source . --region REGION --allow-unauthenticated \
--set-env-vars "DATABASE_URL=postgres://...,API_KEY=abc123"
Secret Manager(機密情報に推奨):
# Create secret
echo -n "secret-value" | gcloud secrets create MY_SECRET --data-file=-
# Grant access to default compute SA
gcloud secrets add-iam-policy-binding MY_SECRET \
--member="serviceAccount:$(gcloud iam service-accounts list --format='value(email)' --filter='displayName:Compute Engine default')" \
--role="roles/secretmanager.secretAccessor"
# Deploy with secret
gcloud run deploy SERVICE --source . --region REGION --allow-unauthenticated \
--set-secrets "MY_SECRET=MY_SECRET:latest"
便利なコマンド
# Stream logs
gcloud run services logs tail SERVICE --region REGION
# List services
gcloud run services list --region REGION
# Get service URL
gcloud run services describe SERVICE --region REGION --format "value(status.url)"
# Delete service
gcloud run services delete SERVICE --region REGION
CI/ヘッドレス認証
gcloud auth activate-service-account --key-file=key.json
gcloud config set project PROJECT_ID
トラブルシューティング
| 問題 | 解決方法 |
|---|---|
| ビルドに失敗する | Dockerfile をローカルで確認します:docker build . |
| デプロイ時に 403 が発生する | roles/run.admin と roles/cloudbuild.builds.editor が必要です |
| アプリの起動時にクラッシュする | ログを確認します:gcloud run services logs tail SERVICE --region REGION |
| ポートが一致しない | アプリに合わせて --port を設定するか、アプリで PORT 環境変数を読み取ります |
| コールドスタートが遅い | --min-instances 1 を設定します(インスタンスが起動状態に保たれますが、費用が増加します) |
| 長時間のリクエストがタイムアウトする | --timeout 300 で延長します(最大 3600s) |
コメント
Markdown 対応