Cloud Run で Gemma 4 と BigQuery MCP サーバーを使用して AI エージェントを構築してデプロイする

1. はじめに

概要

学習内容

  • vLLM を使用して Cloud Run RTX 6000 Pro GPU に Gemma 4 モデルをデプロイする方法
  • Agent Development Kit(ADK)を使用して AI エージェントを作成し、Gemma 4 で使用する方法。
  • BigQuery MCP サーバーを使用して、BigQuery の構造化データに AI エージェントがアクセスできるようにする方法。

Gemma 4 は、Google DeepMind が開発した Apache 2 ライセンスのオープン ウェイト モデルのファミリーです。このモデルは、マルチモーダル、多言語対応、推論、効率的なアーキテクチャを備えています。

Cloud Run は、GPU をサポートするコンテナ用のサーバーレス環境です。

Agent Development Kit(ADK)は、エンタープライズ規模で信頼性の高い AI エージェントを構築、デバッグ、デプロイできるオープンソースのエージェント開発フレームワークです。

BigQuery は、大規模なデータセットの保存、クエリ、分析を可能にする、フルマネージドのサーバーレス エンタープライズ データ ウェアハウスです。

Model Context Protocol(MCP)により、大規模言語モデル(LLM)と AI アプリケーション(エージェント)が外部のデータソースに接続する方法が標準化されます。MCP サーバーを使用すると、そのツール、リソース、プロンプトを使用してアクションを実行し、バックエンド サービスから更新されたデータを取得できます。BigQuery MCP サーバーを使用すると、AI エージェントが BigQuery のデータを直接かつ安全に分析できます。このフルマネージド MCP サーバーを使うと、管理上のオーバーヘッドが削減され、インテリジェント エージェントの開発に集中できるようになります。

2. 設定と要件

まず、デフォルトのプロジェクトと Cloud Run リージョンを設定します。

# set the project
gcloud config set project YOUR_PROJECT_ID

YOUR_PROJECT_ID は、Google Cloud プロジェクト ID に置き換えます。

# set Cloud Run region
REGION="CLOUD-RUN-REGION"; gcloud config set run/region $REGION && echo $REGION > lab2rgn.txt

CLOUD-RUN-REGION は、次のいずれかの Cloud リージョンに置き換えます。

  • us-central1
  • asia-southeast1

この Codelab 全体で使用する環境変数は次のとおりです。これらは環境ファイルに保存して「ソース」にすることができます。プロジェクト ID の値と、必要に応じてリージョンを正しく設定してください。

# Model name on HuggingFace Hub
export MODEL_NAME="google/gemma-4-31B-it"

# Cloud Run Service name
export SERVICE_NAME="gemma4-rtx-vllm-codelab"

# Cloud Project and Region for Cloud Run
export GOOGLE_CLOUD_PROJECT=$(gcloud config get project -q)
export GOOGLE_CLOUD_REGION=$(cat lab2rgn.txt 2> /dev/null || gcloud config get run/region -q)

# Service account for Cloud Run service
export SERVICE_ACCOUNT="vllm-service-sa"
export SERVICE_ACCOUNT_EMAIL="${SERVICE_ACCOUNT}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com"

# GCS Bucket for the model cache.
export MODEL_CACHE_BUCKET="${GOOGLE_CLOUD_PROJECT}-${GOOGLE_CLOUD_REGION}-hf-model-cache"
# Model cache location in GSC bucket
export GCS_MODEL_LOCATION="gs://${MODEL_CACHE_BUCKET}/model-cache/${MODEL_NAME}"
# Uncomment next line if loading gemma-4-31B-it directly from the public cache bucket
# export GCS_MODEL_LOCATION="gs://vertex-model-garden-public-us/gemma4/gemma-4-31B-it"

# VPC Network for Direct VPC Egress
export VPC_NETWORK="vllm-${GOOGLE_CLOUD_REGION}-net"
export VPC_SUBNET="vllm-${GOOGLE_CLOUD_REGION}-subnet"
export SUBNET_RANGE="10.8.0.0/26"

この Codelab で必要な API を有効にします。API の変更が有効になるまで 2 ~ 3 分かかることがあります。

gcloud services enable --project "${GOOGLE_CLOUD_PROJECT}" \
    run.googleapis.com \
    cloudbuild.googleapis.com \
    artifactregistry.googleapis.com \
    iam.googleapis.com \
    compute.googleapis.com \
    vpcaccess.googleapis.com \
    storage.googleapis.com \
    bigquery.googleapis.com \
    aiplatform.googleapis.com

3. サービス アカウントを作成する

Cloud Run サービスまたはジョブの作成時にサービス アカウントを指定しないと、Cloud Run は Compute Engine のデフォルトのサービス アカウントを使用します。過剰な権限でサービスを実行しないように、Cloud Run サービス用の別のサービス アカウントを使用することをおすすめします。

Cloud Run サービスのサービス アカウントを作成する

gcloud iam service-accounts create ${SERVICE_ACCOUNT} \
  --project "${GOOGLE_CLOUD_PROJECT}" \
  --display-name "vLLM Service Account"

4. Cloud Storage を設定する

モデルの重みを保存する Cloud Storage バケットを作成します。これにより、Cloud Run がサービス インスタンスを起動するたびに、ダイレクト VPC 下り(外向き)を使用してモデルの重みをより高速にダウンロードできます。

vLLM の Run:ai Model Streamer 機能と組み合わせることで、モデルの読み込み時間を大幅に短縮できます。

バケットの作成

Cloud Run サービスと同じ場所に配置された単一リージョン バケットであることを確認します。

gcloud storage buckets create "gs://${MODEL_CACHE_BUCKET}" \
    --uniform-bucket-level-access --public-access-prevention \
    --project "${GOOGLE_CLOUD_PROJECT}" --location "${GOOGLE_CLOUD_REGION}"

5. モデルの重みを取得してキャッシュに保存する

次に、Gemma 4 モデルを Cloud Storage バケットにダウンロードします。モデルの重みは数十ギガバイトになるため、最初にローカルマシンまたは Cloud Shell にダウンロードすることは現実的でない場合があります。代わりに、モデルの重みを保持するのに十分なストレージを備えた Cloud Build を使用します。

共有 Cloud Storage バケットからモデルの重みをコピーする

Google Cloud には、Gemma 4 モデルの重み付けを含む一般公開の Cloud Storage バケットがあります。

ストレージ バケットにコピーするには、次のコマンドを実行します。

gcloud builds submit --project="${GOOGLE_CLOUD_PROJECT}" --region="${GOOGLE_CLOUD_REGION}" --no-source \
    --substitutions="_MODEL_NAME=${MODEL_NAME},_GCS_MODEL_LOCATION=${GCS_MODEL_LOCATION}" \
    --config=/dev/stdin <<'EOF'
steps:
- name: 'gcr.io/google.com/cloudsdktool/google-cloud-cli:slim'
  entrypoint: 'bash'
  args:
  - '-c'
  - |
    if [[ "$_GCS_MODEL_LOCATION" == *"vertex-model-garden-public-us"* ]]; then
      echo "Using the public cache bucket."
      exit 0
    fi
    gcloud config set storage/parallel_composite_upload_enabled True
    gcloud config set storage/parallel_composite_upload_threshold 150M
    gcloud config set storage/sliced_object_download_threshold 150M
    MODEL_NAME="$_MODEL_NAME"
    SHORT_NAME="$${MODEL_NAME#*/}"
    gcloud storage cp -r -D "gs://vertex-model-garden-public-us/gemma4/$${SHORT_NAME}" "$_GCS_MODEL_LOCATION"
EOF

6. ダイレクト VPC 下り(外向き)のネットワーキングを構成する

ダイレクト VPC 下り(外向き)の構成では、プライベート Google アクセスが有効になっているネットワークとサブネットを作成する必要があります。

これにより、Cloud Run サービスは、Cloud Storage を含む Google API とサービスで使用される一連の外部 IP アドレスに接続できます。

ネットワークを作成する

gcloud compute networks create "$VPC_NETWORK" \
        --subnet-mode=custom \
        --bgp-routing-mode=regional \
        --project "$GOOGLE_CLOUD_PROJECT"

サブネットを作成する

gcloud compute networks subnets create "$VPC_SUBNET" \
        --network="$VPC_NETWORK" \
        --region="$GOOGLE_CLOUD_REGION" \
        --range="$SUBNET_RANGE" \
        --enable-private-ip-google-access \
        --project "$GOOGLE_CLOUD_PROJECT"

7. サービス アカウント アクセス ポリシーを構成する

Cloud Run サービス アカウントには、作成した Storage バケット内のモデルの重みにアクセスする権限が必要です。

gcloud storage buckets add-iam-policy-binding "gs://${MODEL_CACHE_BUCKET}" \
    --member "serviceAccount:${SERVICE_ACCOUNT_EMAIL}" \
    --role "roles/storage.admin" \
    --project "${GOOGLE_CLOUD_PROJECT}"

8. 構成変数を初期化する

vLLM 推論エンジンと Cloud Run サービスの両方の変数を定義します。

# vLLM variables
export MAX_MODEL_LEN="32767"    # 32767 to improve concurrency. Keep it empty to use model's maximim context length (256K)
export QUANTIZATION_TYPE="fp8"  # Model quantization for faster performance and lower memory usage.
export KV_CACHE_DTYPE="fp8"     # KV-cache quantization to save GPU memory.
export GPU_MEM_UTIL="0.95"      # Fraction of GPU memory to be used by the vLLM engine.
export TENSOR_PARALLEL_SIZE="1" # Partitioning model across GPUs (1 here as we have only 1 GPU).
export MAX_NUM_SEQS="16"         # Max concurrent requests vLLM processes in one batch.

# Cloud Run variables
export CLOUD_RUN_CPU_NUM=20
export CLOUD_RUN_MEMORY_GB=80
export CLOUD_RUN_MAX_INSTANCES=1
export CLOUD_RUN_CONCURRENCY=16

9. Cloud Run にデプロイする

vLLM コンテナのコマンドラインを準備する

vLLM は、大規模なモデルを高速かつ効率的に実行するために、多くのパラメータを必要とします。これらのパラメータは、Cloud Run にデプロイされたコンテナに引数として渡されます。

CONTAINER_ARGS=(
    "vllm"
    "serve"
    "${GCS_MODEL_LOCATION}"
    "--served-model-name" "${MODEL_NAME}"
    "--enable-log-requests"
    "--enable-chunked-prefill"
    "--enable-prefix-caching"
    "--generation-config" "auto"
    "--enable-auto-tool-choice"
    "--tool-call-parser" "gemma4"
    "--reasoning-parser" "gemma4"
    "--dtype" "bfloat16"
    "--quantization" "${QUANTIZATION_TYPE}"
    "--kv-cache-dtype" "${KV_CACHE_DTYPE}"
    "--max-num-seqs" "${MAX_NUM_SEQS}"
    "--gpu-memory-utilization" "${GPU_MEM_UTIL}"
    "--tensor-parallel-size" "${TENSOR_PARALLEL_SIZE}"
    "--load-format" "runai_streamer"
    "--port" "8080"
    "--host" "0.0.0.0"
)

if [[ "${MAX_MODEL_LEN}" != "" ]]; then
    CONTAINER_ARGS+=("--max-model-len" "${MAX_MODEL_LEN}")
fi

export CONTAINER_ARGS_STR="${CONTAINER_ARGS[*]}"

Cloud Run サービスをデプロイする

次のコマンドを実行して、Cloud Run サービスをデプロイします。GPU タイプ(RTX 6000 Pro)、ベースイメージ(pytorch-vllm-serve:gemma4)、サービスを呼び出すために認証が必要かどうか(--no-allow-unauthenticated)をメモします。

gcloud beta run deploy "${SERVICE_NAME}" \
    --image="us-docker.pkg.dev/vertex-ai/vertex-vision-model-garden-dockers/pytorch-vllm-serve:gemma4" \
    --project "${GOOGLE_CLOUD_PROJECT}" \
    --region "${GOOGLE_CLOUD_REGION}" \
    --service-account "${SERVICE_ACCOUNT_EMAIL}" \
    --execution-environment gen2 \
    --no-allow-unauthenticated \
    --cpu="${CLOUD_RUN_CPU_NUM}" \
    --memory="${CLOUD_RUN_MEMORY_GB}Gi" \
    --gpu=1 \
    --gpu-type=nvidia-rtx-pro-6000 \
    --no-gpu-zonal-redundancy \
    --no-cpu-throttling \
    --max-instances ${CLOUD_RUN_MAX_INSTANCES} \
    --concurrency ${CLOUD_RUN_CONCURRENCY} \
    --network ${VPC_NETWORK} \
    --subnet ${VPC_SUBNET} \
    --vpc-egress all-traffic \
    --set-env-vars "MODEL_NAME=${MODEL_NAME}" \
    --set-env-vars "GOOGLE_CLOUD_PROJECT=${GOOGLE_CLOUD_PROJECT}" \
    --set-env-vars "GOOGLE_CLOUD_REGION=${GOOGLE_CLOUD_REGION}" \
    --port=8080 \
    --timeout=3600 \
    --cpu-boost \
    --startup-probe tcpSocket.port=8080,initialDelaySeconds=240,failureThreshold=40,timeoutSeconds=10,periodSeconds=15 \
    --command "bash" \
    --args="^;^-c;${CONTAINER_ARGS_STR}"

デプロイには数分かかります。完了すると、サーバーレス インフラストラクチャを使用して Gemma 4 を提供する GPU 搭載環境が構築され、ゼロへのスケーリングを含む自動スケーリングが有効になります(トラフィックがない場合は費用が発生しません)。

10. サービスをテストする

デプロイすると、vLLM OpenAI 互換 API を使用して Gemma 4 モデルを操作できます。

サービス URL を取得する

デプロイされた Cloud Run サービスの URL を取得します。

SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --project "${GOOGLE_CLOUD_PROJECT}" --region "${GOOGLE_CLOUD_REGION}" --format 'value(status.url)')
echo "Service URL: $SERVICE_URL"

推論を実行する

curl を使用してプロンプトをモデルに送信します。

curl -s "$SERVICE_URL/v1/chat/completions" \
  -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "'"${MODEL_NAME}"'",
  "messages": [
    {"role": "user", "content": "Why is the sky blue?"}
  ],
  "chat_template_kwargs": {
    "enable_thinking": true
  },
  "skip_special_tokens": false
}' | jq -r '.choices[0].message.content'

11. Agent Development Kit を使用してデータ エージェントを作成する

エージェントのコードを記述する

Cloud Shell ターミナルまたはローカル ターミナルで、エージェント アプリのルート ディレクトリを作成します。

mkdir data_agent

Cloud Shell エディタまたは別のテキスト エディタを開き、data_agent ディレクトリに agent.py を作成します。

data_agent/
    agent.py

agent.py

import os
import subprocess

from google.adk.agents import LlmAgent
from google.adk.models.lite_llm import LiteLlm
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams

import google.auth
from google.auth.transport.requests import Request
from google.oauth2 import id_token

# Fetch Application Default Credentials (ADC)
application_default_credentials, project_id = google.auth.default()
application_default_credentials.refresh(Request())

# Retrieve Google Cloud project to use.
project_id = os.getenv("GOOGLE_CLOUD_PROJECT", project_id)
if not project_id:
    raise ValueError("GOOGLE_CLOUD_PROJECT environment variable is not set.")

if os.getenv("GOOGLE_GENAI_USE_ENTERPRISE", "").lower() not in ["true", "1"]:
    # Using Cloud Run for hosting LLM with LiteLLM wrapper
    api_base = os.getenv(
        "API_BASE",
        os.environ.get("OPENAI_API_BASE", "")
    ).rstrip("/")
    if not api_base:
        raise ValueError("API_BASE environment variable is not set")
    if not api_base.endswith("/v1"):
        api_base += "/v1"

    model_name = os.getenv("MODEL_NAME")
    if not model_name:
        raise ValueError("MODEL_NAME environment variable is not set")
    # Format required by LiteLLM for OpenAI-compatible APIs
    model_name=f"openai/{model_name}"

    # To access the model's Cloud Run service,
    # we need an identity token.
    try:
        model_service_token_string = id_token.fetch_id_token(Request(), api_base)
    except Exception as e:
        # Fallback with using gcloud CLI to get the identity token
        model_service_token_string = subprocess.check_output(
            f"gcloud auth print-identity-token -q",
            shell=True
        ).decode().strip()

    # Gemma 4 in vLLM requires additional parameters in the request body.
    extra_body={
        "chat_template_kwargs": {
            "enable_thinking": True
        },
        "skip_special_tokens": False
    }
    # Configure the model with LiteLLM and an OpenAI-compatible endpoint
    custom_model = LiteLlm(
      model=model_name,
      base_url=api_base,
      api_key=model_service_token_string,
      extra_body=extra_body
    )
    model = custom_model
else:
    # Gemini API in Agent Platform fallback
    model = "gemini-3.5-flash-lite"

# Initialize the MCP Toolset with the connection parameters
bigquery_toolset = MCPToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://bigquery.googleapis.com/mcp",
        headers={
            "Authorization": f"Bearer {application_default_credentials.token}",
            "x-goog-user-project": project_id, # This is used for billing
        },
        tool_filter=[
            'get_dataset_info',
            'list_table_ids',
            'get_table_info',
            # Using readonly is a security measure to prevent accidental data modification.
            'execute_sql_readonly',
        ]
    )
)

# Configure the agent

system_instruction = f"""
You are a helpful assistant that can answer questions about data in BigQuery.
To answer the user's question, use data you have access to by using tools `list_table_ids` and `get_table_info`.
Your data is in `bigquery-public-data.new_york_citibike` dataset
   (Citi Bike trips and stations in the NYC area.
    It includes trip records starting from September 2013 and is updated daily.)

Plan of action:
0. ALWAYS start by analyzing dataset.
1. Analyze your data, investigate schema and dimensions by querying distrinct values of columns using `execute_sql_readonly`.
   Output information about tables, columns, their data types and sets of values (for dimensions).
   Note which columns can be joined or used in aggregations/filters, and what type conversion may be needed for joining or aggregating.
   DO NOT MAKE ASSUMPTIONS ABOUT DATA (structure, type, values, relationships) BASED ON YOUR PRIOR KNOWLEDGE. ALWAYS VERIFY YOUR ASSUMPTIONS.
2. Understand and interpret the user's question.
3. Formulate a plan to answer the user's question.
4. Write a SQL query to retrieve relevant data in necessary form.
   This is where you must pay extra attention to column types and dimensions' sets of values.
5. Retrieve data by generating BigQuery SQL and using `execute_sql_readonly`.
   Always use Dry Run to verify SQL correctness.
   Use `{project_id}` to run BigQuery queries (`project_id` parameter of `execute_sql_readonly`).

Do not use LaTeX in your responses. When giving a final answer, use Markdown.
"""

root_agent = LlmAgent(
    model=model,
    name="data_agent",
    instruction=system_instruction,
    description="A helpful assistant that can answer questions using NYC Citibike data.",
    tools=[bigquery_toolset]
)

ADK のデプロイには __init__.pyrequirements.txt も必要です。

  • __init__.py にはエージェントのインポートが必要です。
  • requirements.txt Python 依存関係のリスト: Agent Development Kit の google-adk、Gemini 以外のモデルを使用するために ADK が利用する LiteLLM ライブラリの litellm、Model Context Protocol クライアントの mcp

これらのコマンドは、__init__.pyrequirements.txt の作成に役立ちます。

echo "from . import agent" > data_agent/__init__.py
echo -e "google-adk==2.4.*\nlitellm\nmcp==1.29.*" > data_agent/requirements.txt

最終的なフォルダ構造は次のようになります。

data_agent/
    __init__.py
    agent.py
    requirements.txt

ローカルでエージェントを試す

Agent Development Kit には、エージェントをテストするためのインタラクティブなターミナル インターフェースである adk CLI ツールが付属しています。これは、簡単なテスト、スクリプト化されたインタラクション、CI/CD パイプラインに便利です。この機能の 1 つが adk web - ADK ウェブ インターフェースです。これは、エージェントをインタラクティブに開発してデバッグするための簡単な方法です。ADK Web は本番環境でのデプロイを想定していませんが、エージェントを簡単に試すことができます。

このコマンドは、ポート 8080 でローカル ウェブサーバーを起動する adk web を起動します。

export API_BASE=$(gcloud run services describe $SERVICE_NAME \
  --project $GOOGLE_CLOUD_PROJECT \
  --region $GOOGLE_CLOUD_REGION \
  --format 'value(status.url)')

# If Gemma 4 deployment failed, use Gemini fallback
if [[ "${API_BASE}" == "" ]]; then
  export GOOGLE_GENAI_USE_ENTERPRISE=true
else
  export GOOGLE_GENAI_USE_ENTERPRISE=false
fi

uv tool run --with litellm,"mcp==1.29.*" --from "google-adk[mcp]==2.4.*" adk web --allow_origins="*" --port 8080 .

サービスが起動したら、ローカル ADK ウェブページ(http://localhost:8080/)を開きます。

Google Cloud Shell を使用している場合は、[ウェブでプレビュー] ボタンをクリックします。

ADK ウェブ UI で、エージェントにアクセスできるデータについて質問します。

What data do you have?

エージェント コードは、Cloud Run にデプロイされた Gemma 4 モデルを使用します。モデルは BigQuery MCP ツールを使用して citibike データセットを探索します。これにより、Citibike データセットで使用可能なテーブルとフィールドの概要が表示されます。

12. Cloud Run にエージェントをデプロイする

このコマンドは、ADK CLI を使用してエージェントを Cloud Run にデプロイします。

export API_BASE=$(gcloud run services describe $SERVICE_NAME \
  --project $GOOGLE_CLOUD_PROJECT \
  --region $GOOGLE_CLOUD_REGION \
  --format 'value(status.url)')

# If Gemma 4 deployment failed, use Gemini fallback
if [[ "${API_BASE}" == "" ]]; then
  export GOOGLE_GENAI_USE_ENTERPRISE=true
else
  export GOOGLE_GENAI_USE_ENTERPRISE=false
fi

uv tool run --from google-adk==2.4.0 \
  adk deploy cloud_run \
      --with_ui \
      --project $GOOGLE_CLOUD_PROJECT \
      --region $GOOGLE_CLOUD_REGION \
      --service_name gemma4-data-agent \
      --app_name data_agent \
      data_agent \
      -- \
      --allow-unauthenticated \
      --max-instances 1 \
      --set-env-vars GOOGLE_GENAI_USE_ENTERPRISE=${GOOGLE_GENAI_USE_ENTERPRISE},MODEL_NAME="${MODEL_NAME}",API_BASE="${API_BASE}",GOOGLE_CLOUD_PROJECT="${GOOGLE_CLOUD_PROJECT}"

エージェントを試す

エージェントのデプロイには --with_ui オプションを使用しました。ADK ウェブ インターフェースを使用してエージェントをデプロイしました。

  1. ウェブブラウザでエージェントの URL を開きます。adk deploy コマンドで返されます。また、gcloud run services コマンドを実行して URL を取得することもできます。
gcloud run services describe gemma4-data-agent \
  --project $GOOGLE_CLOUD_PROJECT \
  --region $GOOGLE_CLOUD_REGION \
  --format 'value(status.url)'
  1. エージェントに、利用可能な Citibike データについて推論するよう依頼します。
We have budget for 3 coffee trucks.
We want to find the best city bike stations to place our coffee trucks.

エージェントは、BigQuery MCP サーバーを使用して Citibike データセットを探索し、いくつかの SQL クエリを実行して、3 つの Citibike ステーションのリストを返す必要があります。

13. 完了

以上で、この Codelab は完了です。

Cloud Run のドキュメントを確認することをおすすめします。

学習した内容

  • Cloud Run RTX 6000 Pro GPU に Gemma 4 モデルをデプロイする方法
  • Cloud Storage を使用してダイレクト VPC 下り(外向き)と vLLM モデル ストリーミングを構成し、サービス起動を高速化する方法。
  • Gemma 4 LLM と BigQuery MCP サーバーを使用する AI エージェントを Agent Development Kit で作成してデプロイする方法。

14. クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、プロジェクトを削除するか、個々のリソースを削除します。

オプション 1: リソースを削除する

Cloud Run サービスを削除する

gcloud run services delete gemma4-data-agent \
      --project "${GOOGLE_CLOUD_PROJECT}" \
      --region "${GOOGLE_CLOUD_REGION}" \
      --quiet
gcloud run services delete $SERVICE_NAME \
      --project "${GOOGLE_CLOUD_PROJECT}" \
      --region "${GOOGLE_CLOUD_REGION}" \
      --quiet

サービス アカウントを削除する

gcloud iam service-accounts delete \
      ${SERVICE_ACCOUNT_EMAIL} \
      --project "${GOOGLE_CLOUD_PROJECT}" \
      --quiet

Cloud Storage バケットを削除する

gcloud storage rm --recursive gs://$MODEL_CACHE_BUCKET

VPC ネットワークとサブネットを削除する

gcloud compute networks subnets delete $VPC_SUBNET \
    --region "${GOOGLE_CLOUD_REGION}" \
    --project "${GOOGLE_CLOUD_PROJECT}" \
    --quiet

gcloud compute networks delete $VPC_NETWORK \
    --project "${GOOGLE_CLOUD_PROJECT}" \
    --quiet

オプション 2: プロジェクトを削除する

プロジェクト全体を削除するには、[リソースの管理] に移動し、ステップ 2 で作成したプロジェクトを選択して、[削除] を選択します。プロジェクトを削除した場合は、Cloud SDK でプロジェクトを変更する必要があります。gcloud projects list を実行すると、使用可能なすべてのプロジェクトのリストを表示できます。コマンドラインを使用する場合は、次のコマンドも使用できます。

gcloud projects delete ${GOOGLE_CLOUD_PROJECT}