访问 700 多个实验和课程

Cloud SQL 与 Terraform

实验 1 小时 universal_currency_alt 5 个点数 show_chart 中级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

GSP234

Google Cloud 自学实验的徽标

概览

在本实操实验中,您将学习如何使用 Terraform 创建 Cloud SQL 实例,然后设置 Cloud SQL 代理,以便测试与 MySQL 客户端的连接。

目标

在本实验中,您将学习如何执行以下任务:

  • 创建 Cloud SQL 实例。
  • 安装 Cloud SQL 代理。
  • 使用 Cloud Shell 测试与 MySQL 客户端的连接。

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。

如何开始实验并登录 Google Cloud 控制台

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:

    • “打开 Google Cloud 控制台”按钮
    • 剩余时间
    • 进行该实验时必须使用的临时凭据
    • 帮助您逐步完成本实验所需的其他信息(如果需要)
  2. 点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。

    该实验会启动资源并打开另一个标签页,显示“登录”页面。

    提示:将这些标签页安排在不同的窗口中,并排显示。

    注意:如果您看见选择账号对话框,请点击使用其他账号
  3. 如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。

    {{{user_0.username | "<用户名>"}}}

    您也可以在“实验详细信息”窗格中找到“用户名”。

  4. 点击下一步

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在“实验详细信息”窗格中找到“密码”。

  6. 点击下一步

    重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。 注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 继续在后续页面中点击以完成相应操作:

    • 接受条款及条件。
    • 由于这是临时账号,请勿添加账号恢复选项或双重验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。 “导航菜单”图标和“搜索”字段

激活 Cloud Shell

Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。

  1. 点击 Google Cloud 控制台顶部的激活 Cloud Shell “激活 Cloud Shell”图标

  2. 在弹出的窗口中执行以下操作:

    • 继续完成 Cloud Shell 信息窗口中的设置。
    • 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。

如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。

  1. (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
  1. 点击授权

输出:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (可选)您可以通过此命令列出项目 ID:
gcloud config list project

输出:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南

Cloud SQL

Cloud SQL 是一项全托管式数据库服务,让您能够在 Google Cloud 上轻松设置、维护、管理和控制关系型数据库。您可以将 Cloud SQL 与 MySQLPostgreSQL 搭配使用。

任务 1. 下载必要的文件

  1. 在 Cloud Shell 终端中,使用以下命令创建目录并从 Cloud Storage 存储桶中提取所需的 Terraform 脚本:
mkdir sql-with-terraform cd sql-with-terraform gsutil cp -r gs://spls/gsp234/gsp234.zip
  1. 运行以下命令以解压缩下载的内容:
unzip gsp234.zip

在 Cloud Shell IDE 中启用 Gemini Code Assist

您可以在集成开发环境 (IDE)(例如 Cloud Shell)中使用 Gemini Code Assist,以获取代码方面的指导或解决代码问题。您需要先启用 Gemini Code Assist,然后才能使用该功能。

  1. 在 Cloud Shell 中,使用以下命令启用 Gemini for Google Cloud API:
gcloud services enable cloudaicompanion.googleapis.com
  1. 点击 Cloud Shell 工具栏上的打开编辑器
注意:如需打开 Cloud Shell 编辑器,请点击 Cloud Shell 工具栏上的打开编辑器。您可以根据需要点击打开编辑器打开终端,在 Cloud Shell 和代码编辑器之间切换。
  1. 在左侧窗格中,点击设置图标,然后在设置视图中搜索 Gemini Code Assist

  2. 找到Geminicodeassist: Enable(Geminicodeassist:启用)并确保选中了该复选框,然后关闭设置

  3. 点击屏幕底部状态栏中的 Cloud Code - 无项目

  4. 按照说明对插件进行授权。如果系统未自动选择项目,请点击选择 Google Cloud 项目,然后选择

  5. 检查您的 Google Cloud 项目 () 是否显示在状态栏的 Cloud Code 状态消息中。

任务 2. 了解代码

  1. 使用 cat 命令查看 main.tf 文件的内容:
cat main.tf

输出示例:

... resource "google_sql_database_instance" "master" { name = "example-mysql-${random_id.name.hex}" project = var.project region = var.region database_version = var.database_version master_instance_name = var.master_instance_name settings { tier = var.tier activation_policy = var.activation_policy authorized_gae_applications = var.authorized_gae_applications disk_autoresize = var.disk_autoresize dynamic "backup_configuration" { for_each = [var.backup_configuration] content { binary_log_enabled = lookup(backup_configuration.value, "binary_log_enabled", null) enabled = lookup(backup_configuration.value, "enabled", null) start_time = lookup(backup_configuration.value, "start_time", null) } } dynamic "ip_configuration" { for_each = [var.ip_configuration] content { ipv4_enabled = lookup(ip_configuration.value, "ipv4_enabled", true) private_network = lookup(ip_configuration.value, "private_network", null) require_ssl = lookup(ip_configuration.value, "require_ssl", null) dynamic "authorized_networks" { for_each = lookup(ip_configuration.value, "authorized_networks", []) content { expiration_time = lookup(authorized_networks.value, "expiration_time", null) name = lookup(authorized_networks.value, "name", null) value = lookup(authorized_networks.value, "value", null) } } } } ...

您可以利用 Gemini Code Assist 中的 AI 赋能的功能,对 main.tf 配置文件中的代码进行修改,以达到解释或说明这段代码的目的。

  1. 在 Cloud Shell 中,点击打开编辑器

  2. 在文件资源管理器中打开 main.tf 文件,并在 IDE 中启用 Gemini Code Assist,这时编辑器右上角会有一个 Gemini Code Assist:智能操作 图标。

  3. 点击 Gemini Code Assist:智能操作 Gemini Code Assist:智能操作 图标,然后选择 Explain this(解释此内容)。

  4. Gemini Code Assist 会打开一个聊天窗格,其中预填充了 Explain this 提示。在 Code Assist 聊天窗格的内嵌文本框中,将预填充的提示替换为以下内容,然后点击发送

As an expert in cloud infrastructure, perform an in-depth analysis of the main.tf file to serve as a detailed onboarding document for a new engineer. * Identify the code's primary function. * Highlight the key design patterns and best practices that make it a robust and reusable module. * Explain how the code uses advanced Terraform features like dynamic blocks and count to achieve flexibility. * Conclude with a high-level summary of the overall design philosophy. For the suggested improvements, don't update this file.

针对 main.tf 配置文件中的代码的说明会显示在 Gemini Code Assist 聊天中。

接下来,您需要更新 variables.tf 文件,以使用分配给本实验的项目 ID 和区域。

  1. 在 Cloud Shell 编辑器中的同一目录下,找到 variables.tf。与之前一样,请注意编辑器右上角的 Gemini Code Assist:智能操作 图标。

  2. 点击工具栏上的 Gemini Code Assist:智能操作 Gemini Code Assist 图标。

  3. 如需更新 projectregion 变量,请将以下提示粘贴到从工具栏打开的 Gemini Code Assist 内嵌文本字段中。

Update the variables.tf configuration file with the following changes: * Set the `default` argument for the "project" variable to {{{project_0.project_id | PROJECT_ID}}}. * Set the `default` argument for the "region" variable to {{{project_0.default_region | REGION}}}.
  1. 如需提示 Gemini Code Assist 按要求修改代码,请按 Enter 键。

  2. Gemini Diff 视图中看到提示时,点击接受

variables.tf 配置文件中,projectregion 变量更新后的 default 参数现在应如下所示:

variable "project" { description = "The project to deploy to, if not set the default provider project is used." default = "{{{project_0.project_id | PROJECT_ID}}}" } variable "region" { description = "Region for cloud resources" default = "{{{project_0.default_region | REGION}}}" }

完成后,保存更改。

任务 3. 运行 Terraform

terraform init 命令用于初始化包含 Terraform 配置文件的工作目录。

此命令会执行多个不同的初始化步骤,以便准备好工作目录以供使用。您始终可以放心地多次运行此命令,以使工作目录与配置中的更改保持同步。

  1. 运行 terraform init 命令:
terraform init

terraform plan 命令是可选命令,但建议使用,可用于创建执行计划。Terraform 会执行刷新操作(除非明确停用),然后确定需要执行哪些操作才能实现配置文件中指定的期望状态。

这个命令可以方便地检查一组更改的执行计划是否符合您的预期,而无需对实际资源或状态进行任何更改。例如,在将更改提交到版本控制系统之前,可以运行 terraform plan,以确保更改将按预期发挥作用。

  1. 运行 terraform plan 命令:
terraform plan -out=tfplan

您可以使用可选参数 -out,将生成的计划保存到文件中,以便日后通过 terraform apply 执行。

terraform apply 命令用于应用达到期望的配置状态所需的更改,或应用由 terraform plan 执行计划生成的一组预先确定的操作。

  1. 应用您刚刚创建的 Terraform 计划:
terraform apply tfplan

完成应用需要花费一些时间。完成后,您将看到如下输出。

输出:

Apply complete! Resources: 5 added, 0 changed, 0 destroyed. The state of your infrastructure has been saved to the path below. This state is required to modify and destroy your infrastructure, so keep it safe. To inspect the complete state use the `terraform show` command. State path: terraform.tfstate Outputs: generated_user_password = instance_address = 35.232.204.44 instance_address_time_to_retire = instance_name = example-mysql-6808 self_link = https://www.googleapis.com/sql/v1beta4/projects/[PROJECT_ID]/instances/example-mysql-6808

测试已完成的任务

点击检查我的进度以验证您已完成的任务。 使用 Terraform 脚本创建 Cloud SQL 实例

任务 4. 了解 Cloud SQL 代理

代理的优势

借助 Cloud SQL 代理,您无需将 IP 地址列入白名单配置 SSL,即可安全地访问 Cloud SQL 第二代实例。

使用 Cloud SQL 代理访问 Cloud SQL 实例具有以下优势:

  • 安全连接:此代理使用采用 128 位 AES 加密的 TLS 1.2 自动加密进出数据库的流量,并使用 SSL 证书验证客户端和服务器身份。
  • 简化连接管理:此代理可处理 Cloud SQL 的身份验证,让您无需再提供静态 IP 地址。
注意:您无需使用代理或配置 SSL,即可从 App Engine 标准或柔性环境连接到 Cloud SQL。这些连接会自动使用“内置”的代理实现。

Cloud SQL 代理的工作原理

Cloud SQL 代理的工作原理是在本地环境中运行一个称为“代理”的本地客户端。您的应用通过数据库使用的标准协议与该代理进行通信,而该代理通过安全隧道与服务器上运行的代理配套进程进行通信。

下图显示了该代理如何连接到 Cloud SQL:

代理连接示意图,其中包含 Cloud SQL 和客户端机器内的第三方代码和 Cloud SQL 代码。

任务 5. 安装 Cloud SQL 代理

  1. 运行以下命令以下载代理:
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
  1. 运行以下命令,使代理可执行:
chmod +x cloud_sql_proxy

您可在环境中的任意位置安装该代理。代理二进制文件的位置不会影响该代理在何处监听应用数据。

代理启动选项

启动代理时,向其提供以下几组信息:

  • 该代理应与哪些 Cloud SQL 实例建立连接
  • 该代理将在何处监听要从您的应用发送到 Cloud SQL 的数据
  • 该代理将在何处查找向 Cloud SQL 验证您的应用时要使用的凭证

您提供的代理启动选项决定了它是监听 TCP 端口还是监听 Unix 套接字。如果该代理要监听 Unix 套接字,则会在您选择的位置(通常为 /cloudsql/ 目录)创建套接字。对于 TCP,该代理默认监听 localhost

任务 6. 测试与数据库的连接

  1. 首先,为 Cloud SQL 实例运行 Cloud SQL 代理:
MYSQL_DB_NAME=$(terraform output -json | jq -r '.instance_name.value') MYSQL_CONN_NAME="{{{project_0.project_id | PROJECT_ID}}}:{{{project_0.default_region|REGION}}}:${MYSQL_DB_NAME}"
  1. 运行以下命令:
./cloud_sql_proxy -instances=${MYSQL_CONN_NAME}=tcp:3306

现在,点击加号 (+) 图标,打开一个新的 Cloud Shell 标签页。您将使用此 shell 连接到 Cloud SQL 代理。

  1. 运行以下命令,转到 sql-with-terraform 目录:
cd ~/sql-with-terraform
  1. 使用以下命令获取为 MYSQL 生成的密码:
echo MYSQL_PASSWORD=$(terraform output -json | jq -r '.generated_user_password.value')
  1. 运行以下命令来测试 MySQL 连接:
mysql -udefault -p --host 127.0.0.1 default
  1. 看到提示时,输入 MYSQL_PASSWORD 的值(可在前文的输出中找到),然后按 Enter 键。

  2. 您应该会成功登录 MySQL 命令行。按 Ctrl+D 退出 MySQL。

如果您返回第一个 Cloud Shell 标签页,将会看到与 Cloud SQL 代理建立连接的日志。

任务 7. 检验您的掌握情况

下面的选择题可加强您对本实验所涉概念的理解。请尽您所能回答。

恭喜!

在本实验中,您使用 Terraform 创建了 Cloud SQL 实例并设置了 Cloud SQL 代理。然后,您测试了两者与 MySQL 客户端之间的连接。

后续步骤/了解详情

了解如何使用 Terraform 管理 Google Cloud 项目

Google Cloud 培训和认证

…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。

本手册的最后更新时间:2025 年 8 月 29 日

本实验的最后测试时间:2025 年 10 月 13 日

版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

请使用无痕模式或无痕式浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。