使用 Cloud Run 作业创建 AlloyDB 数据库

1. 概览

在本实验中,您将使用 Cloud Run 作业创建一个 AlloyDB 数据库。您将配置专用服务访问通道无服务器 VPC 访问通道,以使用专用 IP 在 Cloud Run 作业与 AlloyDB 数据库之间建立连接。

学习内容

在本实验中,您将学习如何完成以下操作:

  • 设置 AlloyDB 集群和实例
  • 部署 Cloud Run 作业以创建 AlloyDB 数据库

2. 设置和要求

Cloud 项目设置

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.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 USD 免费试用计划的条件。

环境设置

点击搜索栏右侧的图标,激活 Cloud Shell。

eb0157a992f16fa3.png

要启用服务 API,请将下面的命令复制并粘贴到终端中,然后按 Enter 键:

gcloud services enable \
    alloydb.googleapis.com \
    artifactregistry.googleapis.com \
    cloudbuild.googleapis.com \
    run.googleapis.com \
    vpcaccess.googleapis.com \
    compute.googleapis.com \
    servicenetworking.googleapis.com \
    --quiet

设置环境变量:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
export DB_DATABASE=test
export DB_USER=postgres
export DB_PASSWORD=password123
export REGION=us-central1
export CLUSTER=test-cluster
export INSTANCE=test-instance
export VPC_CONNECTOR=vpcconnector

3. 设置和创建 AlloyDB 集群

设置设置所需的权限。这将允许 Cloud Run 作业连接到 AlloyDB 数据库。

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

配置专用服务访问通道

专用服务访问通道是作为 VPC 网络与 AlloyDB 资源(集群和实例)所在的底层 Google Cloud VPC 网络之间的 VPC 对等互连连接实现的。通过专用连接,VPC 网络中的资源可以使用内部 IP 地址与其仅访问的 AlloyDB 资源进行通信。VPC 网络中的资源不需要接入互联网或具备外部 IP 地址,即可访问 AlloyDB 资源。

如需在与 AlloyDB 位于同一 Cloud 项目的 VPC 网络中创建专用服务访问通道配置,请执行两项操作:

在 VPC 网络中创建分配的 IP 地址范围。

gcloud compute addresses create google-managed-services-default \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=20 \
    --network=projects/$PROJECT_ID/global/networks/default

在 VPC 网络与底层 Google Cloud VPC 网络之间创建专用连接。此步骤大约需要 2 分钟。

gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=google-managed-services-default \
    --network=default \
    --project=$PROJECT_ID

创建 AlloyDB 集群。

gcloud beta alloydb clusters create $CLUSTER \
    --password=$DB_PASSWORD \
    --network=default \
    --region=$REGION \
    --project=$PROJECT_NAME

gcloud beta alloydb clusters describe $CLUSTER --region=$REGION

创建 AlloyDB 实例。此步骤大约需要 10 分钟。

gcloud beta alloydb instances create $INSTANCE \
    --cluster=$CLUSTER \
    --region=$REGION \
    --instance-type=PRIMARY \
    --cpu-count=2 \
    --project=$PROJECT_NAME

gcloud beta alloydb instances describe $INSTANCE \
    --cluster=$CLUSTER \
    --region $REGION

在 Cloud 控制台中查看创建的集群

568d273c0e0d6408

将数据库 IP 地址保存到变量中。""

export DB_HOST=$(gcloud beta alloydb instances describe $INSTANCE \
    --cluster=$CLUSTER \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".ipAddress")

echo "DB_HOST=$DB_HOST"

4. 探索 Cloud Run 作业代码

您可以通过多种方式创建 AlloyDB 数据库。一种方法是创建 Compute Engine 虚拟机,安装 psql 客户端,然后连接到实例以创建数据库。如需详细了解此方法,请点击此处

在本实验中,您将使用 Cloud Run 作业创建一个新的 AlloyDB 数据库。

请查看以下文件:

  • Dockerfile - 安装所需的依赖项(postgresql-client)
  • script.sh - 使用命令行实用程序创建数据库

在 Cloud Shell 中,创建新文件夹:

mkdir ~/alloy-db-cloud-run-job
cd ~/alloy-db-cloud-run-job 

创建新文件 Dockerfile

cat > Dockerfile <<EOF
FROM ubuntu:latest
RUN apt-get update && apt-get install -y postgresql-client && apt-get clean
COPY script.sh /
RUN chmod +x /script.sh
CMD ["/script.sh"]
ENTRYPOINT ["/bin/bash"]
EOF

使用以下内容创建新文件 script.sh

echo "Connecting to $DB_HOST"
createdb -h $DB_HOST -p 5432 $PGDB
echo "Created $PGDB database"

psql -h $DB_HOST -l

更改对 script.sh 的权限:

chmod +x script.sh

5. 部署 Cloud Run 作业

配置无服务器 VPC 访问通道。这样,Cloud Run 作业就可以使用内部/专用 IP 与 AlloyDB 集群进行通信。此步骤大约需要 2 分钟。

gcloud compute networks vpc-access connectors create ${VPC_CONNECTOR} \
    --region=${REGION} \
    --range=10.8.0.0/28

创建 Artifact Registry 代码库以存储容器映像。

gcloud artifacts repositories create db-job-repository \
  --repository-format=docker \
  --location=$REGION

构建容器映像并将其发布到 Artifact Registry。

gcloud builds submit -t $REGION-docker.pkg.dev/$PROJECT_NAME/db-job-repository/db-job:latest

部署 Cloud Run 作业。

gcloud beta run jobs create db-job \
    --image=$REGION-docker.pkg.dev/$PROJECT_NAME/db-job-repository/db-job:latest \
    --set-env-vars DB_HOST=$DB_HOST \
    --set-env-vars PGUSER=$DB_USER \
    --set-env-vars PGPASSWORD=$DB_PASSWORD \
    --set-env-vars PGDB=$DB_DATABASE \
    --vpc-connector $VPC_CONNECTOR \
    --region $REGION

查看用于创建作业的标志:

--vpc-connector - Cloud Run 作业将使用 VPC 连接器访问 AlloyDB 专用 IP 地址。

在 Cloud 控制台中查看已创建的作业

93d8224eca8c687f

执行 Cloud Run 作业以创建“test”数据库。

gcloud beta run jobs execute db-job --region $REGION

在 Cloud 控制台中查看 Cloud Run 作业日志

3f2269736b53f44c

6. 恭喜!

恭喜,您已完成此 Codelab!

所学内容:

  • 如何创建 AlloyDB 集群和实例
  • 如何使用 Cloud Run 作业创建 AlloyDB 数据库

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

若要避免产生费用,最简单的方法是删除您为本教程创建的项目。