[Google AI Pro プラン目線] Antigravity と Google Cloud — アプリを書いて GCP にデプロイ(第3回・GCPにデプロイ)
📝 記事について:
全3回の最終回です。第3回は「UP するだけ」。
ターミナルから gcloud で Cloud Run にデプロイする流れ・環境変数(API
キー)の渡し方・デプロイ後の確認をまとめます。
正確な内容は公式ドキュメントをご確認ください。
この回では
gcloud で Cloud Run にデプロイします。
第2回で用意した
cloudrun_hello と cloudrun_ask を、gcloud run deploy
でデプロイ。環境変数(API キー)の設定と動作確認まで。
第1回で gcloud のインストールと認証、第2回で cloudrun_hello と cloudrun_ask
を用意しました。
今回はターミナルから gcloud run deploy で Cloud Run にデプロイする手順を、準備の確認から順にまとめます。
なぜ Cloud Run に UP するのか
ローカルで Python を動かすには venv や pip install など環境構築が面倒です。
Cloud Run なら、main.py・requirements.txt・Dockerfile
を書けば、環境構築と Web 公開を自動でやってくれます。
gcloud run deploy --source . で送るだけでクラウド側でビルドされ、すぐ URL でアクセスできます(公式:ソースコードからデプロイ)。
ソースを送ったらあとは任せられる、かなりありがたいですよね~~。
第1回で準備したことの確認
デプロイ前に次の2つを済ませます。
参考:Google Cloud CLI のインストール、ローカル開発環境の ADC 設定。
1.
gcloud がインストール済みか確認する
ターミナルで次を実行し、バージョンが表示されれば OK。
gcloud --version
表示されない場合は第1回の手順で gcloud をインストールしてください。
2. 認証(ADC)を済ませる
ローカルから GCP にデプロイするには ADC(Application Default Credentials) の設定が必要です(公式:ADC を設定する)。
gcloud auth application-default login
実行するとブラウザが開きます。「Google Cloud SDK が Google アカウントへのアクセスをリクエストしています」で「許可」を押すと認証情報がローカルに保存されます。
成功すると
Credentials saved to file: […\application_default_credentials.json] と表示されます。プロジェクトは
gcloud config set project プロジェクトID で指定するか、デプロイ時に聞かれたら指定してください。
cloudrun_hello をデプロイする
サンプル一式(cloudrun_hello /
cloudrun_ask)は cloudrun_samples.zip
からダウンロードできます。解凍後、各フォルダで .\deploy.ps1 または gcloud run deploy を実行してください。
cloudrun_hello/
├── main.py
├── requirements.txt
├── Dockerfile
└── deploy.ps1
cloudrun_ask/
├── main.py
├── requirements.txt
├── Dockerfile
└── deploy.ps1
cloudrun_hello
フォルダ(main.py・requirements.txt・Dockerfile
がある場所)に移動し、1本のコマンドでデプロイします。
gcloud run deploy --source . はソースをアップロードし、Dockerfile があればそれでコンテナをビルドして Cloud
Run にデプロイします(公式:ソースコードからデプロイ)。ローカルに Docker がなくても Cloud Build
がクラウド側でビルドします。
3. デプロイするフォルダに移動する
cloudrun_hello があるディレクトリに cd
します。例(ご自身のパスに読み替えてください):
cd "…\brief029\cloudrun_hello"
PowerShell でデプロイする:各フォルダに
deploy.ps1 があります。フォルダで .\deploy.ps1
を実行するだけで同じデプロイが可能です。スクリプト先頭の「設定」でリージョン・サービス名・--allow-unauthenticated、メモリ・CPU・最小/最大インスタンス・タイムアウト・同時実行数を指定できます。
※
PowerShell で設定を細かくいじりたい方向けのデプロイ自動化スクリプトです。
cloudrun_hello 用 deploy.ps1(個人利用・最小構成の例)
スクリプト全文を表示
# Cloud Run デプロイ用 PowerShell スクリプト(cloudrun_hello)
# 使い方: このフォルダで .\deploy.ps1 を実行。事前に gcloud 認証済みであること。
# デフォルトは「個人利用・最小構成」(たまにしかアクセスしない・節約向け)です。
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
if ($Host.UI.RawUI) { chcp 65001 | Out-Null }
# ========== 設定(個人利用・最小構成=節約向け) ==========
$Region = "asia-northeast1" # リージョン(東京)
$ServiceName = "cloudrun-hello" # サービス名
$Project = "" # 空なら gcloud のデフォルトプロジェクトを使用
# 未認証アクセスを許可するか(自分だけ使うなら true で URL を開ける)
$AllowUnauthenticated = $true
# リソース・スケーリング(たまにしかアクセスしない=スケールゼロ・最大1で十分)
$Memory = "512Mi" # デフォルトの最小(節約)
$Cpu = "" # 空でメモリ連動(512Mi なら 1 vCPU 未満)
$MinInstances = "0" # 0=アクセスがなければインスタンスなし(課金ほぼ発生しない)
$MaxInstances = "1" # 自分用なら 1 で十分
$Timeout = "300" # 5 分(デフォルト)
$Concurrency = "80" # デフォルトのまま(1 人なら問題なし)
# ========== ここより下は通常そのままでよい ==========
$ErrorActionPreference = "Stop"
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location $scriptDir
$gcloudArgs = @(
"run", "deploy", $ServiceName,
"--source", ".",
"--region", $Region
)
if ($Project) { $gcloudArgs += "--project"; $gcloudArgs += $Project }
if ($AllowUnauthenticated) { $gcloudArgs += "--allow-unauthenticated" } else { $gcloudArgs += "--no-allow-unauthenticated" }
if ($Memory) { $gcloudArgs += "--memory"; $gcloudArgs += $Memory }
if ($Cpu) { $gcloudArgs += "--cpu"; $gcloudArgs += $Cpu }
if ($MinInstances -ne "") { $gcloudArgs += "--min-instances"; $gcloudArgs += $MinInstances }
if ($MaxInstances) { $gcloudArgs += "--max-instances"; $gcloudArgs += $MaxInstances }
if ($Timeout) { $gcloudArgs += "--timeout"; $gcloudArgs += $Timeout }
if ($Concurrency) { $gcloudArgs += "--concurrency"; $gcloudArgs += $Concurrency }
Write-Host "Deploying to Cloud Run: $ServiceName (region: $Region)" -ForegroundColor Cyan
& gcloud @gcloudArgs
4. デプロイコマンドを実行する
コマンドを直接打つ場合は、次を実行します。
gcloud run deploy cloudrun-hello --source . --region asia-northeast1
オプション:cloudrun-hello=サービス名、--source .=カレントをソース、--region asia-northeast1=東京。初回に
Allow unauthenticated invocations (y/N)? と聞かれたら y でログインなしで URL
にアクセス可能、n は認証付きのみ。
実行後は「設定検証 → ソースアップロード → Cloud Build でビルド → リビジョン作成 → トラフィック割当 → IAM」の流れで進み、最後に Service URL が表示されます。その URL をブラウザで開くとアプリが表示されます。
gcloud run deploy の実行結果(cloudrun-hello デプロイ完了・Service URL 表示)実行例(プロジェクトID・プロジェクト番号は伏せています)
PS …> gcloud auth application-default login
Your browser has been opened to visit: …
Credentials saved to file: […\application_default_credentials.json]
Quota project "********" was added to ADC …
PS …> cd '…\brief029\cloudrun_hello'
PS …\cloudrun_hello> gcloud run deploy cloudrun-hello --source . --region asia-northeast1
Allow unauthenticated invocations to [cloudrun-hello] (y/N)? y
Building using Dockerfile and deploying container to Cloud Run service [cloudrun-hello] in project [********] region [asia-northeast1]
✓ Building and deploying new service... Done.
✓ Validating configuration...
✓ Uploading sources...
✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds; region=asia-northeast1/…?project=********].
✓ Creating Revision...
✓ Routing traffic...
✓ Setting IAM Policy...
Done.
Service [cloudrun-hello] revision [cloudrun-hello-00001-cwp] has been deployed and is serving 100 percent of traffic.
Service URL: https://cloudrun-hello-********.asia-northeast1.run.app
表示された Service URL をブラウザで開くと、デプロイしたアプリの画面が表示されます。
以上で cloudrun_hello のデプロイは完了です。
cloudrun_ask をデプロイする(環境変数が必要)
cloudrun_ask は Google AI
Studio で取得した Gemini API キーを環境変数 GEMINI_API_KEY
で読みます(main.py 内の os.environ.get("GEMINI_API_KEY", ""))。デプロイ時にこの環境変数を渡します。
Cloud Run では gcloud run deploy の
--set-env-vars で環境変数を指定できます(公式:環境変数の設定)。cloudrun_ask フォルダに移動してから、環境変数付きでデプロイします。
1. cloudrun_ask フォルダに移動する
cd "…\brief029\cloudrun_ask"
2. 環境変数付きでデプロイする
cloudrun_ask にも deploy.ps1
があります。環境変数 GEMINI_API_KEY を設定するか、スクリプト内の $GeminiApiKey にキーを入れて
.\deploy.ps1 を実行。コマンドで直接やる場合は次に --set-env-vars GEMINI_API_KEY=取得したAPIキー
を付けます(キーは実際の文字列に置き換えてください)。
※
PowerShell で設定を細かくいじりたい方向け(環境変数 GEMINI_API_KEY 対応)。
cloudrun_ask 用 deploy.ps1(個人利用・最小構成の例・GEMINI_API_KEY 必要)
スクリプト全文を表示
# Cloud Run デプロイ用 PowerShell スクリプト(cloudrun_ask)
# 使い方: このフォルダで .\deploy.ps1 を実行。事前に gcloud 認証済みであること。
# GEMINI_API_KEY は環境変数に設定するか、下の $GeminiApiKey に設定してください。
# デフォルトは「個人利用・最小構成」(たまにしかアクセスしない・節約向け)です。
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
if ($Host.UI.RawUI) { chcp 65001 | Out-Null }
# ========== 設定(個人利用・最小構成=節約向け) ==========
$Region = "asia-northeast1" # リージョン(東京)
$ServiceName = "cloudrun-ask" # サービス名
$Project = "" # 空なら gcloud のデフォルトプロジェクトを使用
# API キー: 環境変数 GEMINI_API_KEY が優先。未設定ならここに書く(空ならエラー)
$GeminiApiKey = ""
# 未認証アクセスを許可するか(自分だけ使うなら true で URL を開ける)
$AllowUnauthenticated = $true
# リソース・スケーリング(たまにしかアクセスしない=スケールゼロ・最大1で十分)
$Memory = "512Mi" # デフォルトの最小(節約)
$Cpu = "" # 空でメモリ連動
$MinInstances = "0" # 0=アクセスがなければインスタンスなし(課金ほぼ発生しない)
$MaxInstances = "1" # 自分用なら 1 で十分
$Timeout = "300" # 5 分(デフォルト)
$Concurrency = "80" # デフォルトのまま(1 人なら問題なし)
# ========== ここより下は通常そのままでよい ==========
$ErrorActionPreference = "Stop"
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location $scriptDir
if (-not $GeminiApiKey) { $GeminiApiKey = $env:GEMINI_API_KEY }
if (-not $GeminiApiKey) {
Write-Host "Error: GEMINI_API_KEY が未設定です。環境変数に設定するか、スクリプト内の $GeminiApiKey を設定してください。" -ForegroundColor Red
exit 1
}
$gcloudArgs = @(
"run", "deploy", $ServiceName,
"--source", ".",
"--region", $Region,
"--set-env-vars", "GEMINI_API_KEY=$GeminiApiKey"
)
if ($Project) { $gcloudArgs += "--project"; $gcloudArgs += $Project }
if ($AllowUnauthenticated) { $gcloudArgs += "--allow-unauthenticated" } else { $gcloudArgs += "--no-allow-unauthenticated" }
if ($Memory) { $gcloudArgs += "--memory"; $gcloudArgs += $Memory }
if ($Cpu) { $gcloudArgs += "--cpu"; $gcloudArgs += $Cpu }
if ($MinInstances -ne "") { $gcloudArgs += "--min-instances"; $gcloudArgs += $MinInstances }
if ($MaxInstances) { $gcloudArgs += "--max-instances"; $gcloudArgs += $MaxInstances }
if ($Timeout) { $gcloudArgs += "--timeout"; $gcloudArgs += $Timeout }
if ($Concurrency) { $gcloudArgs += "--concurrency"; $gcloudArgs += $Concurrency }
Write-Host "Deploying to Cloud Run: $ServiceName (region: $Region)" -ForegroundColor Cyan
& gcloud @gcloudArgs
gcloud run deploy cloudrun-ask --source . --region asia-northeast1 --allow-unauthenticated --set-env-vars GEMINI_API_KEY=取得したAPIキー
注意:API キーをコマンドに直書きするとシェル履歴に残ります。本番では Secret Manager で環境変数に渡す方法を推奨(--set-env-vars は手軽に試す用)。
実行例(API キー・プロジェクトID等は伏せています)
PS …\cloudrun_ask> gcloud run deploy cloudrun-ask --source . --region asia-northeast1 --allow-unauthenticated --set-env-vars GEMINI_API_KEY=********
Building using Dockerfile and deploying container to Cloud Run service [cloudrun-ask] in project [********] region [asia-northeast1]
✓ Building and deploying new service... Done.
✓ Validating configuration...
✓ Uploading sources...
✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds; region=asia-northeast1/…?project=********].
✓ Creating Revision...
✓ Routing traffic...
✓ Setting IAM Policy...
Done.
Service [cloudrun-ask] revision [cloudrun-ask-00001-5bf] has been deployed and is serving 100 percent of traffic.
Service URL: https://cloudrun-ask-********.asia-northeast1.run.app
デプロイ後、表示された Service URL にアクセスし、質問を送信すると Cloud Run 上のアプリが Gemini API を呼び出し、LLM の応答が表示されます。
以上で、環境変数(GEMINI_API_KEY)を渡してデプロイし、API
を叩いて動作するパターンも確認できました。
デプロイ後、Cloud
Run コンソールでサービスを開き、「ソース」タブを選ぶと、アップロードした main.py や
Dockerfile などが保存されていることを確認できます。
デプロイしたサービスを削除する
不要になったサービスは次のいずれかで削除できます。
コマンド(gcloud)
gcloud run services delete サービス名 --region リージョン
例:gcloud run services delete cloudrun-hello --region asia-northeast1。確認で
y。cloudrun-ask も削除する場合はサービス名を cloudrun-ask に変えて実行。
コンソール:Cloud Run コンソールで対象サービスを選択 → 画面上部の「削除」。
デプロイ時に指定できる主なオプション
gcloud run deploy
でメモリ・CPU・インスタンス数・タイムアウト・同時実行数を指定できます。以下は公式情報に基づくデフォルトと主なオプションです。
指定しなかったときのデフォルト
- メモリ:サービス(リビジョン)512 MiB、関数 256 MiB(メモリ上限)。
- CPU:メモリに連動。512 MiB のとき 1 vCPU 未満。最大 8 vCPU まで指定可能。
- 最小インスタンス:0(スケールゼロ。コールドスタートあり)(最小インスタンス数)。
- 最大インスタンス:上限なし(リージョンクォータまで)。
--max-instancesで制限可能。 - リクエスト タイムアウト:5 分(300 秒)。最大 60 分(リクエスト タイムアウト)。
- 同時実行数:1 インスタンスあたり80 リクエスト。1~1,000 で変更可(最大同時リクエスト数)。
指定例(gcloud)
メモリ 1 GiB、最小 0・最大 10 インスタンス、タイムアウト 10 分でデプロイする場合:
gcloud run deploy サービス名 --source . --region asia-northeast1 --memory 1Gi --min-instances 0 --max-instances 10 --timeout 600
主なフラグ:--memory(512Mi, 1Gi
など)、--cpu、--min-instances /
--max-instances、--timeout(秒)、--concurrency。詳細は gcloud run deploy リファレンスを参照。
おわりに
「gcloud の確認」と「ADC
ログイン」のあと、デプロイするフォルダで gcloud run deploy サービス名 --source . --region リージョン
を実行。cloudrun_hello はそのまま、cloudrun_ask は
--set-env-vars GEMINI_API_KEY=… で API キーを渡します。表示された Service URL
で動作確認してください。
今回デプロイしているのは Cloud Run「サービス」(コンテナ)であり、「関数」ではありません。最小メモリは種類によって異なります。サービス(第2世代)のデフォルトは 512 MiB で、最小も 512 MiBです。一方、Cloud Run 関数はデフォルト 256 MiB で最小 128 MiB など別の値です(メモリ上限・実行環境)。
何も指定しないと上記のサービス用デフォルト(512 MiB・同時実行
80)になります。個人利用なら、メモリは 512 MiB のまま(第2世代ではこれが最小)、--concurrency 20
に下げるなどでコストを抑えられます。載せた deploy.ps1 の設定を編集してから実行するのがおすすめです。
256 MiB
などのより小さいメモリを使う場合は、第1世代の実行環境が必要です(実行環境)。必要に応じて deploy.ps1 の --memory や
--concurrency を調整してください。
Artist's Perspective
「ソースを書けば、あとは Google Cloud がうまいことやってくれる、という印象。すごい世のなかになりましたなぁ。環境構築にしろネットサービスにしろ、ローカルでやるのは正直めんどい。貧乏でくたびれたおっさんは、ローカルのスペックもポンコツだし、十数年前のパソコンで作業している。だからこそ、Google Cloud のなかで全部やってくれるのを見ると、なんじゃこりゃ~~~~、とありがたくなる。その「なんじゃこりゃ~~~~」を、全3回に分けてお伝えいたしました~~~。」
データソース・参考リンク
本記事は以下の情報源を参考にしています。内容の正確性については、必ず元のデータソースをご確認ください。
- 🔗 Google Cloud CLI をインストールする(gcloud --version で確認)
- 🔗 ローカル開発環境の ADC を設定する(gcloud auth application-default login)
- 🔗 Cloud Run:ソースコードからサービスをデプロイする(gcloud run deploy --source)
- 🔗 Cloud Run:環境変数の設定(--set-env-vars)
- 🔗 Cloud Run:シークレットの構成(Secret Manager)
- 🔗 Cloud Run:メモリ上限の構成(デフォルト 512 MiB)
- 🔗 Cloud Run:最小インスタンス数(デフォルト 0=スケールゼロ)
- 🔗 Cloud Run:リクエスト タイムアウト(デフォルト 5 分)
- 🔗 Cloud Run:最大同時リクエスト数(デフォルト 80)
- 🔗 gcloud run deploy リファレンス(オプション一覧)
- 🔗 Cloud Run:ソースをコンテナにビルドする(Google Cloud 公式)
- 🔗 Cloud Run コンテナ契約(PORT など)
- 🔗 Cloud Run へのコンテナイメージのデプロイ(コンソールの選択肢)
- 🔗 Cloud Run サポートのランタイム・ベースイメージ(Python バージョン等)
- 🔗 Docker Hub:Python 公式イメージ(3.12-slim などのタグ一覧)
- 🔗 Cloud Run:ソースコードからサービスをデプロイする(Dockerfile なし・Buildpack)