使用 MCP Toolbox 构建 AlloyDB 代理式 RAG 应用

1. 简介

e71e051395674233.gif

在此 Codelab 中,您将学习如何创建 AlloyDB 集群、部署 MCP Toolbox,以及将其配置为使用 AlloyDB 作为数据源。然后,您将构建一个示例互动式 RAG 应用,该应用使用已部署的工具箱来确定请求的依据。

f753f71c7116358a.png

如需详细了解 MCP Toolbox,请参阅文档页面和示例 Cymbal Air 应用(点击此处)。

本实验是专门介绍 AlloyDB AI 功能的实验合集中的一个实验。您可以参阅文档中的 AlloyDB AI 页面了解详情,并查看其他实验

前提条件

  • 对 Google Cloud 控制台有基本的了解
  • 具备命令行界面和 Google Cloud Shell 方面的基本技能

学习内容

  • 如何部署与 Vertex AI 集成的 AlloyDB 集群
  • 如何连接到 AlloyDB
  • 如何配置和部署 MCP Tooolbox Service
  • 如何使用已部署的服务来部署示例应用

所需条件

  • Google Cloud 账号和 Google Cloud 项目
  • 网络浏览器,例如 Chrome

2. 设置和要求

自定进度的环境设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
  • 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用 PROJECT_ID 标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。
  • 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档
  1. 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。

启动 Cloud Shell

虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

Google Cloud 控制台 中,点击右上角工具栏中的 Cloud Shell 图标:

激活云端 Shell

预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:

Google Cloud Shell 终端的屏幕截图,显示环境已连接

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5 GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 Codelab 中的所有工作都可以在浏览器中完成。您无需安装任何程序。

3. 准备工作

启用 API

输出如下:

在 Cloud Shell 中,确保项目 ID 已设置:

通常,项目 ID 会显示在 Cloud Shell 命令提示符中的括号内,如下图所示:

fa6ee779963405d5.png

gcloud config set project [YOUR-PROJECT-ID]

然后,将 PROJECT_ID 环境变量设置为您的 Google Cloud 项目 ID:

PROJECT_ID=$(gcloud config get-value project)

启用所有必要的服务:

gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       vpcaccess.googleapis.com \
                       aiplatform.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       run.googleapis.com \
                       iam.googleapis.com \
                       secretmanager.googleapis.com

预期输出

student@cloudshell:~ (gleb-test-short-004)$ gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       vpcaccess.googleapis.com \
                       aiplatform.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       run.googleapis.com \
                       iam.googleapis.com \
                       secretmanager.googleapis.com
Operation "operations/acf.p2-404051529011-664c71ad-cb2b-4ab4-86c1-1f3157d70ba1" finished successfully.

4. 部署 AlloyDB 集群

创建 AlloyDB 集群和主实例。以下步骤介绍了如何使用 Google Cloud SDK 创建 AlloyDB 集群和实例。如果您偏好使用控制台方法,可以点击此处查看相关文档。

在创建 AlloyDB 集群之前,我们需要在 VPC 中分配一个可用的专用 IP 范围,以供未来的 AlloyDB 实例使用。如果我们没有该服务账号,则需要创建该服务账号,并将其分配给内部 Google 服务使用,之后我们才能创建集群和实例。

创建专用 IP 范围

我们需要在 VPC 中为 AlloyDB 配置专用服务访问配置。这里假设我们的项目中有“默认”VPC 网络,它将用于所有操作。

创建专用 IP 范围:

gcloud compute addresses create psa-range \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=24 \
    --description="VPC private service access" \
    --network=default

使用分配的 IP 范围创建专用连接:

gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range \
    --network=default

预期的控制台输出:

student@cloudshell:~ (test-project-402417)$ gcloud compute addresses create psa-range \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=24 \
    --description="VPC private service access" \
    --network=default
Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/global/addresses/psa-range].

student@cloudshell:~ (test-project-402417)$ gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range \
    --network=default
Operation "operations/pssn.p24-4470404856-595e209f-19b7-4669-8a71-cbd45de8ba66" finished successfully.

student@cloudshell:~ (test-project-402417)$

创建 AlloyDB 集群

在本部分中,我们将在 us-central1 区域中创建一个 AlloyDB 集群。

为 postgres 用户定义密码。您可以自行定义密码,也可以使用随机函数生成密码

export PGPASSWORD=`openssl rand -hex 12`

预期的控制台输出:

student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`

请记下该 PostgreSQL 密码,以备将来使用。

echo $PGPASSWORD

您日后需要使用该密码以 postgres 用户身份连接到实例。建议您将其写下来或复制到某个地方,以便日后使用。

预期的控制台输出:

student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD
bbefbfde7601985b0dee5723

创建免费试用集群

如果您之前未使用过 AlloyDB,可以创建一个免费试用集群:

定义区域和 AlloyDB 集群名称。我们将使用 us-central1 区域,并将 alloydb-aip-01 作为集群名称:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01

运行命令以创建集群:

gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION \
    --subscription-type=TRIAL

预期的控制台输出:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION \
    --subscription-type=TRIAL
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.                                                                                                                                                                                                                                                           

在同一 Cloud Shell 会话中为集群创建 AlloyDB 主实例。如果您断开连接,则需要再次定义区域和集群名称环境变量。

gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=8 \
    --region=$REGION \
    --cluster=$ADBCLUSTER

预期的控制台输出:

student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=8 \
    --region=$REGION \
    --availability-type ZONAL \
    --cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.                                                                                                                                                                                                                                                     

创建 AlloyDB Standard 集群

如果这不是您在项目中创建的第一个 AlloyDB 集群,请继续创建标准集群。

定义区域和 AlloyDB 集群名称。我们将使用 us-central1 区域,并将 alloydb-aip-01 作为集群名称:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01

运行命令以创建集群:

gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION

预期的控制台输出:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION 
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.                                                                                                                                                                                                                                                           

在同一 Cloud Shell 会话中为集群创建 AlloyDB 主实例。如果您断开连接,则需要再次定义区域和集群名称环境变量。

gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=2 \
    --region=$REGION \
    --cluster=$ADBCLUSTER

预期的控制台输出:

student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=2 \
    --region=$REGION \
    --availability-type ZONAL \
    --cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.                                                                                                                                                                                                                                                     

向 AlloyDB 授予必要权限

向 AlloyDB 服务代理添加 Vertex AI 权限。

使用顶部的“+”号打开另一个 Cloud Shell 标签页。

4ca978f5142bb6ce.png

在新的 Cloud Shell 标签页中,执行以下命令:

PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"

预期的控制台输出:

student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-11039]
student@cloudshell:~ (test-project-001-402417)$ gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"
Updated IAM policy for project [test-project-001-402417].
bindings:
- members:
  - serviceAccount:service-4470404856@gcp-sa-alloydb.iam.gserviceaccount.com
  role: roles/aiplatform.user
- members:
...
etag: BwYIEbe_Z3U=
version: 1
 

在标签页中执行命令“exit”,关闭该标签页:

exit

5. 准备 GCE 虚拟机

我们将使用 Google Compute Engine (GCE) 虚拟机作为平台来处理数据库并部署示例应用的不同部分。使用虚拟机可让我们更灵活地安装组件,并直接访问专用 AlloyDB IP 以执行数据准备步骤。

创建服务账号

由于我们将使用虚拟机将 MCP Toolbox 部署为服务,并部署或托管示例应用,因此第一步是创建 Google 服务账号 (GSA)。GSA 将由 GCE 虚拟机使用,我们需要授予它与其他服务协同工作的必要权限。

在 Cloud Shell 中,执行以下命令:

PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts create compute-aip --project $PROJECT_ID

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/cloudbuild.builds.editor"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/artifactregistry.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/storage.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/run.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/iam.serviceAccountUser"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/alloydb.viewer"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/alloydb.client"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/serviceusage.serviceUsageConsumer"

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com \
    --role roles/secretmanager.admin

部署 GCE 虚拟机

在 AlloyDB 集群所在的区域和 VPC 中创建 GCE 虚拟机。

在 Cloud Shell 中,执行以下命令:

ZONE=us-central1-a
PROJECT_ID=$(gcloud config get-value project)
gcloud compute instances create instance-1 \
    --zone=$ZONE \
    --create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --service-account=compute-aip@$PROJECT_ID.iam.gserviceaccount.com

预期的控制台输出:

student@cloudshell:~ (test-project-402417)$ ZONE=us-central1-a
PROJECT_ID=$(gcloud config get-value project)
gcloud compute instances create instance-1 \
    --zone=$ZONE \
    --create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --service-account=compute-aip@$PROJECT_ID.iam.gserviceaccount.com
Your active configuration is: [cloudshell-10282]
Created [https://www.googleapis.com/compute/v1/projects/gleb-test-short-002-470613/zones/us-central1-a/instances/instance-1].
NAME: instance-1
ZONE: us-central1-a
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE: 
INTERNAL_IP: 10.128.0.2
EXTERNAL_IP: 34.28.55.32
STATUS: RUNNING

安装 Postgres 客户端

在已部署的虚拟机上安装 PostgreSQL 客户端软件

连接到虚拟机:

gcloud compute ssh instance-1 --zone=us-central1-a

预期的控制台输出:

student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a
Updating project ssh metadata...working..Updated [https://www.googleapis.com/compute/v1/projects/test-project-402417].                                                                                                                                                         
Updating project ssh metadata...done.                                                                                                                                                                                                                                              
Waiting for SSH key to propagate.
Warning: Permanently added 'compute.5110295539541121102' (ECDSA) to the list of known hosts.
Linux instance-1 5.10.0-26-cloud-amd64 #1 SMP Debian 5.10.197-1 (2023-09-29) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
student@instance-1:~$ 

在虚拟机内运行以下命令来安装软件:

sudo apt-get update
sudo apt-get install --yes postgresql-client

预期的控制台输出:

student@instance-1:~$ sudo apt-get update
sudo apt-get install --yes postgresql-client
Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]
Get:4 file:/etc/apt/mirrors/debian-security.list Mirrorlist [39 B]
Hit:7 https://packages.cloud.google.com/apt google-compute-engine-bookworm-stable InRelease
Get:8 https://packages.cloud.google.com/apt cloud-sdk-bookworm InRelease [1652 B]
Get:2 https://deb.debian.org/debian bookworm InRelease [151 kB]
Get:3 https://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
...redacted...
update-alternatives: using /usr/share/postgresql/15/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode
Setting up postgresql-client (15+248) ...
Processing triggers for man-db (2.11.2-2) ...
Processing triggers for libc-bin (2.36-9+deb12u7) ...

连接到 AlloyDB 实例

使用 psql 从虚拟机连接到主实例。

使用已打开的 SSH 会话继续连接到虚拟机。如果您已断开连接,请使用与上面相同的命令重新连接。

使用前面记下的 $PGASSWORD 和集群名称从 GCE 虚拟机连接到 AlloyDB:

export PGPASSWORD=<Noted password>
PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"

预期的控制台输出:

student@instance-1:~$ PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"
psql (15.13 (Debian 15.13-0+deb12u1), server 16.8)
WARNING: psql major version 15, server major version 16.
         Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

postgres=>

退出 psql 会话,同时保持 SSH 连接:

exit

预期的控制台输出:

postgres=> exit
student@instance-1:~$ 

6. 初始化数据库

我们将使用客户端虚拟机作为平台,向数据库填充数据并托管应用。第一步是创建数据库并为其填充数据。

创建数据库

创建一个名为“assistantdemo”的数据库。

在 GCE 虚拟机会话中,执行以下命令:

psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo"  

预期的控制台输出:

student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo"
CREATE DATABASE
student@instance-1:~$  

准备 Python 环境

如要继续,我们将使用 GitHub 代码库中已准备好的 Python 脚本,但在此之前,我们需要安装所需的软件。

在 GCE 虚拟机中,执行以下命令:

sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip

预期的控制台输出:

student@instance-1:~$ sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  git-man liberror-perl patch python3-distutils python3-lib2to3 python3-pip-whl python3-setuptools-whl
Suggested packages:
  git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn ed diffutils-doc
The following NEW packages will be installed:
  git git-man liberror-perl patch python3-distutils python3-lib2to3 python3-pip-whl python3-setuptools-whl python3.11-venv
0 upgraded, 9 newly installed, 0 to remove and 2 not upgraded.
Need to get 12.4 MB of archives.
After this operation, 52.2 MB of additional disk space will be used.
Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]
...redacted...
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 23.0.1
    Uninstalling pip-23.0.1:
      Successfully uninstalled pip-23.0.1
Successfully installed pip-24.0
(.venv) student@instance-1:~$

验证 Python 版本。

在 GCE 虚拟机中,执行以下命令:

python -V

预期的控制台输出:

(.venv) student@instance-1:~$ python -V
Python 3.11.2
(.venv) student@instance-1:~$ 

在本地安装 MCP Toolbox

MCP Toolbox for Databases(下文中简称为“MCP 工具箱”或“工具箱”)是一款可与不同数据源搭配使用的开源 MCP 服务器。它通过为不同的数据源提供一定程度的抽象,并添加身份验证和连接池等功能,帮助您更快地开发工具。您可以访问官方页面,了解所有功能。

我们将使用 MCP 工具箱来启动示例数据集,并稍后将其用作 MCP 服务器,以在检索增强生成 (RAG) 流程期间处理来自应用的数据源请求。

我们将在本地安装 MCP Toolbox,以填充 assistantdemo 数据库。

在 GCE 虚拟机中,执行以下命令:

export VERSION=0.16.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox

预期的控制台输出:

(.venv) student@instance-1:~$ export VERSION=0.16.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  133M  100  133M    0     0   158M      0 --:--:-- --:--:-- --:--:--  158M

运行数据初始化工具箱

在 GCE 虚拟机中,执行以下命令:

导出用于填充数据库的环境变量:

export ALLOYDB_POSTGRES_PROJECT=$(gcloud config get-value project)
export ALLOYDB_POSTGRES_REGION="us-central1"
export ALLOYDB_POSTGRES_CLUSTER="alloydb-aip-01"
export ALLOYDB_POSTGRES_INSTANCE="alloydb-aip-01-pr"
export ALLOYDB_POSTGRES_DATABASE="assistantdemo"
export ALLOYDB_POSTGRES_USER="postgres"
export ALLOYDB_POSTGRES_PASSWORD=$PGPASSWORD
export ALLOYDB_POSTGRES_IP_TYPE="private"

启动用于数据库初始化的工具箱。它将在本地启动该流程,帮助您无缝连接到 AlloyDB 上的目标数据库,并使用示例数据填充该数据库。

./toolbox --prebuilt alloydb-postgres

预期的控制台输出。您应该会在输出的最后一行看到“Server ready to serve!”:

student@instance-1:~$ cexport ALLOYDB_POSTGRES_PROJECT=$PROJECT_ID
export ALLOYDB_POSTGRES_REGION="us-central1"
export ALLOYDB_POSTGRES_CLUSTER="alloydb-aip-01"
export ALLOYDB_POSTGRES_INSTANCE="alloydb-aip-01-pr"
export ALLOYDB_POSTGRES_DATABASE="assistantdemo"
export ALLOYDB_POSTGRES_USER="postgres"
export ALLOYDB_POSTGRES_PASSWORD=$PGPASSWORD
export ALLOYDB_POSTGRES_IP_TYPE="private"
student@instance-1:~$ ./toolbox --prebuilt alloydb-postgres
2025-09-02T18:30:58.957655886Z INFO "Using prebuilt tool configuration for alloydb-postgres" 
2025-09-02T18:30:59.507306664Z INFO "Initialized 1 sources." 
2025-09-02T18:30:59.50748379Z INFO "Initialized 0 authServices." 
2025-09-02T18:30:59.507618807Z INFO "Initialized 2 tools." 
2025-09-02T18:30:59.507726704Z INFO "Initialized 2 toolsets." 
2025-09-02T18:30:59.508258894Z INFO "Server ready to serve!" 

在数据填充完成之前,请勿退出或关闭此 Cloud Shell 标签页。

填充数据库

使用顶部的“+”号打开另一个 Cloud Shell 标签页。

4ca978f5142bb6ce.png

并连接到 instance-1 虚拟机:

gcloud compute ssh instance-1 --zone=us-central1-a

预期的控制台输出:

student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a
Linux instance-1 6.1.0-37-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Sep  2 21:44:07 2025 from 35.229.111.9
student@instance-1:~$ 

克隆包含检索服务和示例应用代码的 GitHub 代码库。

在 GCE 虚拟机中,执行以下命令:

git clone  https://github.com/GoogleCloudPlatform/cymbal-air-toolbox-demo.git

预期的控制台输出:

student@instance-1:~$ git clone  https://github.com/GoogleCloudPlatform/cymbal-air-toolbox-demo.git
Cloning into 'cymbal-air-toolbox-demo'...
remote: Enumerating objects: 3481, done.
remote: Counting objects: 100% (47/47), done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 3481 (delta 16), reused 7 (delta 5), pack-reused 3434 (from 3)
Receiving objects: 100% (3481/3481), 57.96 MiB | 6.04 MiB/s, done.
Resolving deltas: 100% (2549/2549), done.
student@instance-1:~

如果您有任何错误,请注意。

准备 Python 环境并安装必需的软件包:

source .venv/bin/activate
cd cymbal-air-toolbox-demo
pip install -r requirements.txt

将 Python 路径设置为代码库根文件夹,然后运行脚本以使用示例数据集填充数据库。第一个命令是将 Python 模块的路径添加到我们的环境中,第二个命令是将数据填充到我们的数据库中。

export PYTHONPATH=$HOME/cymbal-air-toolbox-demo
python data/run_database_init.py

预期的控制台输出(已隐去部分信息)。您应该会在最后看到“database init done”:

student@instance-1:~$ source .venv/bin/activate
(.venv) student@instance-1:~$ 
(.venv) student@instance-1:~$ cd cymbal-air-toolbox-demo/
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ pip install -r requirements.txt
python run_database_init.py
Collecting fastapi==0.115.0 (from -r requirements.txt (line 1))
  Downloading fastapi-0.115.0-py3-none-any.whl.metadata (27 kB)
Collecting google-auth==2.40.3 (from -r requirements.txt (line 2))
  Downloading google_auth-2.40.3-py2.py3-none-any.whl.metadata (6.2 kB)
Collecting google-cloud-aiplatform==1.97.0 (from google-cloud-aiplatform[evaluation]==1.97.0->-r requirements.txt (line 3))
  Downloading google_cloud_aiplatform-1.97.0-py2.py3-none-any.whl.metadata (36 kB)
Collecting itsdangerous==2.2.0 (from -r requirements.txt (line 4))
  Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB)
Collecting jinja2==3.1.5 (from -r requirements.txt (line 5))
  Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)
Collecting langchain-community==0.3.25 (from -r requirements.txt (line 6))
  Downloading langchain_community-0.3.25-py3-none-any.whl.metadata (2.9 kB)
Collecting langchain==0.3.25 (from -r requirements.txt (line 7))
...

(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ 
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ export PYTHONPATH=$HOME/cymbal-air-toolbox-demo
python data/run_database_init.py
Airports table initialized
Amenities table initialized
Flights table initialized
Tickets table initialized
Policies table initialized
database init done.
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ 

您现在可以关闭此标签页了。

在虚拟机会话中,执行以下命令:

exit

在 Cloud Shell 会话中,按 ctrl+d 或执行以下命令:

exit

在运行 MCP Toolbox 的第一个标签页中,按 Ctrl+c 退出正在运行的工具箱会话。

数据库已填充应用的示例数据。

您可以连接到数据库并检查 airports 表中的行数,从而验证这一点。您可以使用我们之前使用过的 psql 实用程序或 AlloyDB Studio。以下是使用 psql 进行检查的方法

在与 instance-1 虚拟机的 SSH 会话中,执行以下命令:

export PGPASSWORD=<Noted AlloyDB password>
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "SELECT COUNT(*) FROM airports"  

预期的控制台输出:

student@instance-1:~$ REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "SELECT COUNT(*) FROM airports"
 count 
-------
  7698
(1 row)

数据库已准备就绪,我们可以继续部署 MCP Toolbox。

7. 将 MCP Toolbox 部署到 Cloud Run

现在,我们可以将 MCP 工具箱部署到 Cloud Run。MCP 工具箱可以通过多种方式进行部署。最简单的方法是从命令行运行它,但如果我们希望它成为可扩缩且可靠的服务,那么 Cloud Run 是更好的解决方案。

准备 Client-ID

如需使用应用的预订功能,我们需要使用 Cloud 控制台准备 OAuth 2.0 客户端 ID。如果没有此权限,我们就无法使用 Google 凭据登录应用来预订,也无法将预订记录到数据库中。

在 Cloud 控制台中,前往“API 和服务”,然后点击“OAuth 权限请求页面”。以下是该网页的链接。系统将打开“OAuth 概览”页面,我们在该页面上点击“开始”。

2f13a26289362f20.png

在下一页中,我们提供应用名称、用户支持电子邮件地址,然后点击“下一步”。

dd3721c042db26ae.png

在下一个界面中,我们为应用选择“内部”,然后再次点击“下一步”。

71b6d11179ed872b.png

然后,再次提供联系电子邮件地址,并点击“下一步”

8ff29dfd959b41f0.png

然后,我们同意 Google API 服务政策,并点击“创建”按钮。

ca87d1200662b7f7.png

这会引导我们前往可以创建 OAuth 客户端的页面。

56e5040805632a53.png

在屏幕上,我们从下拉菜单中选择“Web 应用”,将“Cymbal Air”作为应用,然后按“添加 URI”按钮。

4e28c6700426735a.png

这些 URI 代表应用的受信任来源,具体取决于您尝试从何处访问应用。我们将“http://localhost:8081”作为已获授权的 URI,并将“http://localhost:8081/login/google”作为重定向 URI。如果您在浏览器中输入“http://localhost:8081”作为连接的 URI,这些值将发挥作用。例如,当您通过 SSH 隧道从计算机进行连接时。稍后我会向您展示具体操作方法。

9dc25f2d318097e2.png

按“创建”按钮后,您会看到一个包含客户端凭据的弹出式窗口。系统会记录这些凭据。您随时可以复制客户端 ID,以便在启动应用时使用。

f5a7b6ad0858d95c.png

稍后,您将看到在何处提供该客户端 ID。

创建服务账号

我们需要为 Cloud Run 服务创建一个具有所有必需权限的专用服务账号。我们的服务需要访问 AlloyDB 和 Cloud Secret Manager。至于我们将要使用的服务账号的名称,我们使用 toolbox-identity。

使用顶部的“+”号打开另一个 Cloud Shell 标签页。

4ca978f5142bb6ce.png

在新的 Cloud Shell 标签页中,执行以下命令:

export PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts create toolbox-identity

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/alloydb.client"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/serviceusage.serviceUsageConsumer"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/secretmanager.secretAccessor"

如果您有任何错误,请注意。该命令应为 Cloud Run 服务创建服务账号,并授予其使用 Secret Manager、数据库和 Vertex AI 的权限。

按 Ctrl+d 或在标签页中执行命令“exit”,关闭该标签页:

exit

准备 MCP Toolbox 配置

为 MCP Toolbox 准备配置文件。您可以在文档中了解所有配置选项,但在这里,我们将使用示例 tools.yaml 文件,并将集群和实例名称、AlloyDB 密码和项目 ID 等一些值替换为实际值。

导出 AlloyDB 密码:

export PGPASSWORD=<noted AlloyDB password>

导出我们在上一步中准备的客户端 ID:

export CLIENT_ID=<noted OAuth 2.0 client ID for our application>

准备配置文件。

PROJECT_ID=$(gcloud config get-value project)
ADBCLUSTER=alloydb-aip-01
sed -e "s/project: retrieval-app-testing/project: $(gcloud config get-value project)/g" \
-e "s/cluster: my-alloydb-cluster/cluster: $ADBCLUSTER/g" \
-e "s/instance: my-alloydb-instance/instance: $ADBCLUSTER-pr/g" \
-e "s/password: postgres/password: $PGPASSWORD\\n    ipType: private/g" \
-e "s/^ *clientId: .*/    clientId: $CLIENT_ID/g" \
cymbal-air-toolbox-demo/tools.yaml >~/tools.yaml

如果您查看定义目标数据源的文件部分,会发现我们还添加了一行来使用专用 IP 进行连接。

sources:
  my-pg-instance:
    kind: alloydb-postgres
    project: gleb-test-short-003-471020
    region: us-central1
    cluster: alloydb-aip-01
    instance: alloydb-aip-01-pr
    database: assistantdemo
    user: postgres
    password: L23F...
    ipType: private
authServices:
  my_google_service:
    kind: google
    clientId: 96828*******-***********.apps.googleusercontent.com

使用 tools.yaml 配置作为来源创建 Secret。

在虚拟机 SSH 控制台中,执行以下命令:

gcloud secrets create tools --data-file=tools.yaml

预期的控制台输出:

student@instance-1:~$ gcloud secrets create tools --data-file=tools.yaml
Created version [1] of the secret [tools].

将 MCP Toolbox 部署为 Cloud Run 服务

现在,一切准备就绪,可以将 MCP Toolbox 作为服务部署到 Cloud Run。对于本地测试,您可以运行“./toolbox –tools-file=./tools.yaml”,但如果您希望应用在云端运行,那么在 Cloud Run 中进行部署会更有意义。

在虚拟机 SSH 会话中,执行以下命令:

export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
gcloud run deploy toolbox \
    --image $IMAGE \
    --service-account toolbox-identity \
    --region us-central1 \
    --set-secrets "/app/tools.yaml=tools:latest" \
    --args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
    --network default \
    --subnet default \
    --no-allow-unauthenticated

预期的控制台输出:

student@instance-1:~$ export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
gcloud run deploy toolbox \
    --image $IMAGE \
    --service-account toolbox-identity \
    --region us-central1 \
    --set-secrets "/app/tools.yaml=tools:latest" \
    --args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
    --network default \
    --subnet default \
    --no-allow-unauthenticated
Deploying container to Cloud Run service [toolbox] in project [gleb-test-short-002-470613] region [us-central1]
✓ Deploying new service... Done.                                                                                                                                                                                                
  ✓ Creating Revision...                                                                                                                                                                                                        
  ✓ Routing traffic...                                                                                                                                                                                                          
Done.                                                                                                                                                                                                                           
Service [toolbox] revision [toolbox-00001-l9c] has been deployed and is serving 100 percent of traffic.
Service URL: https://toolbox-868691532292.us-central1.run.app

student@instance-1:~$

验证服务

现在,我们可以检查服务是否已启动,以及我们是否可以访问端点。我们使用 gcloud 实用程序来获取检索服务端点和身份验证令牌。或者,您也可以在 Cloud 控制台中查看服务 URI。

dd1a16ee00a861a0.png

您可以复制该值,然后在 curl 命令中替换 $(gcloud run services list –filter="(toolbox)" –format="value(网址)" 部分。

以下是如何从命令行动态获取网址:

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud  run services list --filter="(toolbox)" --format="value(URL)")

预期的控制台输出:

student@instance-1:~$ curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud  run services list --filter="(toolbox)" --format="value(URL)")
🧰 Hello, World! 🧰student@instance-1:~$

如果我们看到“Hello World”消息,则表示我们的服务已启动并正在处理请求。

8. 部署示例应用

现在,我们已启动并运行检索服务,可以部署示例应用了。该应用是一款在线机场助理,可根据我们数据库中的航班和机场数据为您提供航班、机场信息,甚至预订航班。

该应用可以部署在本地、云端虚拟机或任何其他服务(如 Cloud Run 或 Kubernetes)上。下面我们将介绍如何先在虚拟机上部署该应用。

准备好环境

我们继续使用同一 SSH 会话在虚拟机上进行操作。为了运行我们的应用,我们需要一些 Python 模块,并且我们之前在初始化数据库时已添加这些模块。让我们切换到 Python 虚拟环境,并将位置更改为应用目录。

在虚拟机 SSH 会话中,执行以下命令:

source ~/.venv/bin/activate
cd cymbal-air-toolbox-demo

预期输出(已隐去部分信息):

student@instance-1:~$ source ~/.venv/bin/activate
cd cymbal-air-toolbox-demo
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$

运行助理应用

在启动应用之前,我们需要设置一些环境变量。应用的基本功能(例如查询航班和机场服务设施)只需要 TOOLBOX_URL,该变量可将应用指向检索服务。我们可以使用 gcloud 命令获取该 IP 地址。

在虚拟机 SSH 会话中,执行以下命令:

export TOOLBOX_URL=$(gcloud  run services list --filter="(toolbox)" --format="value(URL)")

预期输出(已隐去部分信息):

student@instance-1:~/cymbal-air-toolbox-demo$ export BASE_URL=$(gcloud  run services list --filter="(toolbox)" --format="value(URL)")

如需使用该应用的更高级功能(例如预订和更改航班),我们需要使用 Google 账号登录该应用,为此,我们需要使用“准备客户端 ID”一章中的 OAuth 客户端 ID 提供 CLIENT_ID 环境变量:

export CLIENT_ID=215....apps.googleusercontent.com

预期输出(已隐去部分信息):

student@instance-1:~/cymbal-air-toolbox-demo$ export CLIENT_ID=215....apps.googleusercontent.com

现在,我们可以运行应用了:

python run_app.py

预期输出:

student@instance-1:~/cymbal-air-toolbox-demo/llm_demo$ python run_app.py
INFO:     Started server process [2900]
INFO:     Waiting for application startup.
Loading application...
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8081 (Press CTRL+C to quit)

连接到应用

您可以通过多种方式连接到虚拟机上运行的应用。例如,您可以在 VPC 中使用防火墙规则打开虚拟机上的端口 8081,或创建具有公共 IP 的负载均衡器。在这里,我们将使用通向虚拟机的 SSH 隧道将本地端口 8080 转换为虚拟机端口 8081。

从本地机器进行连接

如果我们想从本地机器进行连接,需要运行 SSH 隧道。您可以使用 gcloud compute ssh 执行此操作:

gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8081:localhost:8081

预期输出:

student-macbookpro:~ student$ gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081
Warning: Permanently added 'compute.7064281075337367021' (ED25519) to the list of known hosts.
Linux instance-1.us-central1-c.c.gleb-test-001.internal 6.1.0-21-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
student@instance-1:~$

现在,我们可以打开浏览器并使用 http://localhost:8081 连接到我们的应用。我们应该会看到应用界面。

c667b9013afac3f9.png

从 Cloud Shell 连接

或者,我们也可以使用 Google Cloud Shell 进行连接。使用顶部的“+”号打开另一个 Cloud Shell 标签页。

4ca978f5142bb6ce.png

在新标签页中,执行 gcloud 命令,获取 Web 客户端的来源和重定向 URI:

echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google"

预期输出如下:

student@cloudshell:~ echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google"
origin:
https://8080-cs-35704030349-default.cs-us-east1-rtep.cloudshell.dev
redirect:
https://8080-cs-35704030349-default.cs-us-east1-rtep.cloudshell.dev/login/google

将来源和重定向 URI 用作我们在“准备客户端 ID”一章中创建的凭据的“已获授权的 JavaScript 来源”和“已获授权的重定向 URI”,以替换或添加到最初提供的 http://localhost:8080 值。

在“OAuth 2.0 客户端 ID”页面上,点击“Cymbal Air”。

b4c1430329886d9c.png

输入 Cloud Shell 的来源和重定向 URI,然后按“保存”按钮。

5651bdd6d0d1c88.png

在新 Cloud Shell 标签页中执行 gcloud 命令,启动通向虚拟机的隧道:

gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081

系统会显示“Cannot assign requested address”错误,请忽略该错误。

预期输出如下:

student@cloudshell:~ gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081
bind [::1]:8081: Cannot assign requested address
inux instance-1.us-central1-a.c.gleb-codelive-01.internal 6.1.0-21-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat May 25 19:15:46 2024 from 35.243.235.73
student@instance-1:~$

它会在 Cloud Shell 上打开端口 8080,该端口可用于“网页预览”。

点击 Cloud Shell 右上角的“网页预览”按钮,然后从下拉菜单中选择“Preview on port 8080”

444fbf54dcd4d160.png

系统会在网络浏览器中打开一个包含应用界面的新标签页。您应该能看到“Cymbal Air Customer Service Assistant”页面。

389f0ae2945beed5.png

登录应用

一切设置就绪后,当应用处于打开状态时,我们可以使用应用界面右上角的“登录”按钮来提供凭据。这是可选操作,只有在您想试用应用的预订功能时才需要执行。

a1f571371b957129.png

系统会打开一个弹出式窗口,供我们选择凭据。

登录后,应用即可使用,您可以开始在窗口底部的字段中发布请求。

此演示展示了 Cymbal Air 客户服务助理。Cymbal Air 是一家虚构的客运航空公司。该助理是一个 AI 聊天机器人,可帮助旅客管理航班,以及查询 Cymbal Air 位于旧金山国际机场 (SFO) 的航空枢纽的相关信息。

在未登录的情况下(没有 CLIENT_ID),它可以帮助回答用户的问题,例如:

飞往丹佛的下一趟航班是什么时候?

C28 号登机口附近有没有奢侈品商店?

A6 号登机口附近在哪里可以喝杯咖啡?

我可以在哪里购买礼物?

请查找从旧金山国际机场飞往丹佛的航班,出发时间为今天

登录应用后,您可以尝试其他功能,例如预订航班,或查看分配给您的座位是靠窗座位还是靠过道座位。

6e7758f707c67c3e.png

该应用使用最新的 Google 基础模型来生成回答,并通过来自 AlloyDB 运营数据库的航班和酒店设施相关信息来扩充回答内容。如需详细了解此演示版应用,请访问项目的 GitHub 页面

9. 清理环境

现在,所有任务都已完成,我们可以清理环境了

删除 Cloud Run 服务

在 Cloud Shell 中,执行以下命令:

gcloud run services delete toolbox --region us-central1

预期的控制台输出:

student@cloudshell:~ (gleb-test-short-004)$ gcloud run services delete retrieval-service --region us-central1
Service [retrieval-service] will be deleted.

Do you want to continue (Y/n)?  Y

Deleting [retrieval-service]...done.                                                                                                                                                                                                                 
Deleted service [retrieval-service].

删除 Cloud Run 服务的服务账号

在 Cloud Shell 中,执行以下命令:

PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet

预期的控制台输出:

student@cloudshell:~ (gleb-test-short-004)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-222]
student@cloudshell:~ (gleb-test-short-004)$ gcloud iam service-accounts delete retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet
deleted service account [retrieval-identity@gleb-test-short-004.iam.gserviceaccount.com]
student@cloudshell:~ (gleb-test-short-004)$

完成实验后,销毁 AlloyDB 实例和集群。

删除 AlloyDB 集群和所有实例

如果您曾使用 AlloyDB 试用版。如果您计划使用试用集群测试其他实验和资源,请勿删除试用集群。您将无法在同一项目中创建其他试用集群。

系统会通过强制选项销毁集群,该选项还会删除属于该集群的所有实例。

如果您已断开连接且之前的所有设置都已丢失,请在 Cloud Shell 中定义项目和环境变量:

gcloud config set project <your project id>
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export PROJECT_ID=$(gcloud config get-value project)

删除集群:

gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force

预期的控制台输出:

student@cloudshell:~ (test-project-001-402417)$ gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force
All of the cluster data will be lost when the cluster is deleted.

Do you want to continue (Y/n)?  Y

Operation ID: operation-1697820178429-6082890a0b570-4a72f7e4-4c5df36f
Deleting cluster...done.   

删除 AlloyDB 备份

删除集群的所有 AlloyDB 备份:

for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done

预期的控制台输出:

student@cloudshell:~ (test-project-001-402417)$ for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done
Operation ID: operation-1697826266108-60829fb7b5258-7f99dc0b-99f3c35f
Deleting backup...done.                                                                                                                                                                                                                                                            

现在我们可以销毁虚拟机了

删除 GCE 虚拟机

在 Cloud Shell 中,执行以下命令:

export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
    --zone=$ZONE \
    --quiet

预期的控制台输出:

student@cloudshell:~ (test-project-001-402417)$ export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
    --zone=$ZONE \
    --quiet
Deleted 

删除 GCE 虚拟机和检索服务的服务账号

在 Cloud Shell 中,执行以下命令:

PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet

预期的控制台输出:

student@cloudshell:~ (gleb-test-short-004)$ PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet
Your active configuration is: [cloudshell-222]
deleted service account [compute-aip@gleb-test-short-004.iam.gserviceaccount.com]
student@cloudshell:~ (gleb-test-short-004)$ 

10. 恭喜

恭喜您完成此 Codelab。

所学内容

  • 如何部署 AlloyDB 集群
  • 如何连接到 AlloyDB
  • 如何配置和部署 MCP Toolbox 服务
  • 如何使用已部署的服务来部署示例应用

11. 调查问卷

输出如下:

您打算如何使用本教程?

仅通读 阅读并完成练习