Create mynetwork and its resources

检查我的进度

/ 100

此实验可能会提供 AI 工具来支持您学习。

概览

Terraform 可让您以安全、可预测的方式创建、更改和改进基础设施。它是一个开源工具,可将 API 编码为声明式配置文件。这些文件可以像代码一样在团队成员之间共享、编辑、审核及进行版本控制。

在本实验中,您将创建一项包含模块的 Terraform 配置,用于自动部署 Google Cloud 基础设施。具体而言,您需要部署一个设有防火墙规则的自动模式网络和两个实例,如下图所示:

Terraform 配置图表

目标

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

  • 创建自动模式网络配置
  • 创建防火墙规则配置
  • 为实例创建模块
  • 创建并部署配置
  • 验证配置的部署情况

设置

对于每个实验,您都会免费获得一个新的 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 产品和服务的菜单,请点击左上角的导航菜单导航菜单图标

任务 1. 设置 Terraform 和 Cloud Shell

在此任务中,您需要将 Cloud Shell 环境配置为使用 Terraform。

激活 Google Cloud Shell

Google Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。

Google Cloud Shell 提供了可用于访问您的 Google Cloud 资源的命令行工具。

  1. 在 Cloud 控制台右上角的工具栏中,点击“打开 Cloud Shell”按钮。

    突出显示的 Cloud Shell 图标

  2. 点击继续

预配并连接到环境需要一些时间。如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 PROJECT_ID。例如:

在 Cloud Shell 终端中突出显示的项目 ID

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

  • 您可以通过以下命令列出有效的账号名称:
gcloud auth list

输出:

Credentialed accounts: - @.com (active)

输出示例

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 您可以通过以下命令列出项目 ID:
gcloud config list project

输出:

[core] project =

输出示例

[core] project = qwiklabs-gcp-44776a13dea667a6 注意:有关 gcloud 的完整文档,请参阅 gcloud CLI 概览指南

安装 Terraform

Cloud Shell 中未预安装 Terraform。您必须安装 Terraform CLI 并进行配置,使其在不同的 Cloud Shell 会话中持久保留。

  1. 如需配置 HashiCorp 仓库并安装 Terraform,同时确保此安装在以后的会话中持久保留,请在 Cloud Shell 终端中运行以下命令:
cat <<'EOF' > ~/.customize_environment # 设置 HashiCorp 仓库并安装 Terraform wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt update && sudo apt install -y terraform EOF bash ~/.customize_environment
  1. 如需验证 Terraform 是否已正确安装,请运行以下命令:
terraform --version

输出应显示已安装的版本(v1.5.7 或更高版本):

Terraform v1.9.0

创建配置文件

现在您已安装好 Terraform,接下来需要为 Terraform 配置创建目录和文件。

  1. 要创建用于存储 Terraform 配置的目录,请运行以下命令:
mkdir tfinfra
  1. 在 Cloud Shell 中,点击打开编辑器 (“Cloud Shell 编辑器”图标)。

注意:如果显示“由于第三方 Cookie 已停用,无法加载代码编辑器”,请点击在新窗口中打开。代码编辑器将在新标签页中打开。返回原标签页,点击打开终端,然后切换回代码编辑器标签页。在本实验中,您将需要定期切换回 Cloud Shell 终端。

  1. 在代码编辑器窗口的左侧窗格中,展开 tfinfra 文件夹。

初始化 Terraform

Terraform 采用基于插件的架构,以支持各种可用的基础设施和服务提供方。每个“提供方”都是一个独立封装的二进制程序,与 Terraform 本身分开分发。将 Google 设为提供方,以初始化 Terraform。

  1. 右键点击 tfinfra 文件夹,然后点击新建文件,以在 tfinfra 文件夹内创建新文件。
  2. 将新文件命名为 provider.tf,然后将其打开。
  3. 将以下代码复制到 provider.tf 中:
provider "google" {}
  1. 依次点击文件 > 保存,以保存 provider.tf

  2. 如需初始化 Terraform,请运行以下命令:

cd tfinfra terraform init

现在,您可以在 Cloud Shell 中使用 Terraform 了。

任务 2. 创建 mynetwork 及其资源

在此任务中,您将创建自动模式网络 mynetwork 及其防火墙规则,以及两个虚拟机实例(mynet_vm_1mynet_vm_2)。

配置 mynetwork

创建新配置,并定义 mynetwork

  1. 右键点击 tfinfra 文件夹,然后点击新建文件,以在 tfinfra 文件夹内创建新文件。
  2. 将新文件命名为 mynetwork.tf,然后将其打开。
  3. 将以下基础代码复制到 mynetwork.tf 中:
# Create the mynetwork network resource [RESOURCE_TYPE] "mynetwork" { name = [RESOURCE_NAME] # RESOURCE properties go here }

此基础模板适合用来创建任何 Google Cloud 资源。您可以在名称字段中为资源命名,在类型字段中指定要创建的 Google Cloud 资源类型。您还可以定义属性,但对于有些资源来说,这些不是必需的信息。

  1. mynetwork.tf 中,将 [RESOURCE_TYPE] 替换为 "google_compute_network"(带引号)。

注意:google_compute_network 资源是一个 VPC 网络。Google Cloud 提供方文档中介绍了可用的资源。您可以在 Terraform 文档中了解有关此特定资源的更多信息。

  1. mynetwork.tf 中,将 [RESOURCE_NAME] 替换为 "mynetwork"(带引号)。
  2. 将以下属性添加到 mynetwork.tf 中:
auto_create_subnetworks = true

根据其定义,自动模式网络会自动在每个区域中创建一个子网。因此,您需要将 auto_create_subnetworks 设置为 true

  1. 验证 mynetwork.tf 文件内容是否如下所示:
# Create the mynetwork network resource "google_compute_network" "mynetwork" { name = "mynetwork" # RESOURCE properties go here auto_create_subnetworks = true }
  1. 依次点击文件 > 保存,以保存 mynetwork.tf

配置防火墙规则

定义一条防火墙规则以允许 HTTP、SSH、RDP 和 ICMP 流量通过 mynetwork。

  1. 将以下基础代码添加到 mynetwork.tf 中:
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork resource [RESOURCE_TYPE] "mynetwork-allow-http-ssh-rdp-icmp" { name = [RESOURCE_NAME] # RESOURCE properties go here }
  1. mynetwork.tf 中,将 [RESOURCE_TYPE] 替换为 "google_compute_firewall"(带引号)。

注意:google_compute_firewall 资源是一条防火墙规则。您可以在 Terraform 文档中了解有关此特定资源的更多信息。

  1. mynetwork.tf 中,将 [RESOURCE_NAME] 替换为 "mynetwork-allow-http-ssh-rdp-icmp"(带引号)。
  2. 将以下属性添加到 mynetwork.tf 中:
network = google_compute_network.mynetwork.self_link

注意:由于此防火墙规则依赖于其所属网络,因此您需要使用 google_compute_network.mynetwork.self_link 引用,以指示 Terraform 按照依赖顺序解析这些资源。在这种情况下,系统会先创建网络,然后再创建防火墙规则。

  1. 将以下属性添加到 mynetwork.tf 中:
allow { protocol = "tcp" ports = ["22", "80", "3389"] } allow { protocol = "icmp" } source_ranges = ["0.0.0.0/0"]

allow 规则列表指定了允许的协议和端口。

  1. 验证您的 mynetwork.tf 文件内容是否如下所示:
# Create the mynetwork network resource "google_compute_network" "mynetwork" { name = "mynetwork" # RESOURCE properties go here auto_create_subnetworks = "true" } # Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" { name = "mynetwork-allow-http-ssh-rdp-icmp" # RESOURCE properties go here network = google_compute_network.mynetwork.self_link allow { protocol = "tcp" ports = ["22", "80", "3389"] } allow { protocol = "icmp" } source_ranges = ["0.0.0.0/0"] }
  1. 依次点击文件 > 保存,以保存 mynetwork.tf

配置虚拟机实例

通过创建虚拟机实例模块来定义虚拟机实例。模块是文件夹内可重复使用的配置。本实验的两个虚拟机实例均使用该模块。

  1. 选中 tfinfra 文件夹,然后依次点击文件 > 新建文件夹,以在 tfinfra 中创建新文件夹。
  2. 将新文件夹命名为 instance
  3. 右键点击 instance 文件夹,然后点击新建文件,以在 instance 文件夹内创建新文件。
  4. 将新文件命名为 main.tf,然后将其打开。

Cloud Shell 中的文件夹结构应如下所示:

文件夹结构

  1. 将以下基础代码复制到 main.tf 中:
resource [RESOURCE_TYPE] "vm_instance" { name = [RESOURCE_NAME] # RESOURCE properties go here }
  1. main.tf 中,将 [RESOURCE_TYPE] 替换为 "google_compute_instance"(带引号)。

注意:google_compute_instance 资源是一个 Compute Engine 实例。您可以在 Terraform 文档中了解有关此特定资源的更多信息。

  1. main.tf 中,将 [RESOURCE_NAME] 替换为 "${var.instance_name}"(带引号)。

由于您将为这两个虚拟机实例使用该模块,因此需要将实例名称定义为输入变量。这样您就可以控制 mynetwork.tf 中变量的名称。如需详细了解输入变量,请参阅 Terraform:定义输入变量指南

  1. 将以下属性添加到 main.tf 中:
zone = "${var.instance_zone}" machine_type = "${var.instance_type}"

这些属性会将实例的可用区和机器类型定义为输入变量。

  1. 将以下属性添加到 main.tf 中:
boot_disk { initialize_params { image = "debian-cloud/debian-12" } }

此属性会将启动磁盘定义为使用 Debian 12 操作系统映像。由于两个虚拟机实例将使用相同的映像,您可以在模块中对该属性进行硬编码。

  1. 将以下属性添加到 main.tf 中:
network_interface { network = "${var.instance_network}" access_config { # Allocate a one-to-one NAT IP to the instance } }

此属性通过提供网络名称(作为输入变量)和访问配置来定义网络接口。将访问配置留空会生成一个临时的外部 IP 地址(本实验需要此 IP 地址)。如需创建仅具有内部 IP 地址的实例,请移除 access_config 部分。如需了解详情,请参阅 Terraform 文档

  1. 验证 main.tf 的内容是否如下所示(包括括号 {}
resource "google_compute_instance" "vm_instance" { name = "${var.instance_name}" zone = "${var.instance_zone}" machine_type = "${var.instance_type}" boot_disk { initialize_params { image = "debian-cloud/debian-12" } } network_interface { network = "${var.instance_network}" access_config { # Allocate a one-to-one NAT IP to the instance } } }
  1. 依次点击文件 > 保存,以保存 main.tf。
  2. 右键点击 instance 文件夹,然后点击新建文件,以在 instance 文件夹内创建新文件。
  3. 将新文件命名为 variables.tf,然后将其打开。
  4. variables.tf 中定义 4 个输入变量。
variable "instance_name" {} variable "instance_zone" {} variable "instance_type" { default = "e2-micro" } variable "instance_network" {}

instance_type 指定一个默认值会将其定义为可选变量。instance_nameinstance_zoneinstance_network 是必需的变量,您需要在 mynetwork.tf 中定义它们。

  1. 依次点击文件 > 保存,以保存 variables.tf。
  2. 将以下虚拟机实例添加到 mynetwork.tf 中:
# Create the mynet-vm-1 instance module "mynet-vm-1" { source = "./instance" instance_name = "mynet-vm-1" instance_zone = "{{{project_0.default_zone|Zone}}}" instance_network = google_compute_network.mynetwork.self_link } # Create the mynet-vm-2" instance module "mynet-vm-2" { source = "./instance" instance_name = "mynet-vm-2" instance_zone = "{{{project_0.default_zone_2|Zone 2}}}" instance_network = google_compute_network.mynetwork.self_link }

这些资源将利用 instance 文件夹中的模块,并提供名称、可用区和网络作为输入。由于这些实例依赖于 VPC 网络,因此您需要使用 google_compute_network.mynetwork.self_link 引用,来指示 Terraform 按照依赖顺序解析这些资源。在这种情况下,系统会先创建网络,然后再创建实例。

注意:编写 Terraform 模块的好处在于,它可以在多种配置中重复使用。除了编写自己的模块,您还可以利用 Terraform Module Registry 中的现有模块。

  1. 依次点击文件 > 保存,以保存 mynetwork.tf

  2. 验证 mynetwork.tf 的内容是否如下所示(包括括号 {}

# Create the mynetwork network resource "google_compute_network" "mynetwork" { name = "mynetwork" # RESOURCE properties go here auto_create_subnetworks = "true" } # Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" { name = "mynetwork-allow-http-ssh-rdp-icmp" # RESOURCE properties go here network = google_compute_network.mynetwork.self_link allow { protocol = "tcp" ports = ["22", "80", "3389"] } allow { protocol = "icmp" } source_ranges = ["0.0.0.0/0"] } # Create the mynet-vm-1 instance module "mynet-vm-1" { source = "./instance" instance_name = "mynet-vm-1" instance_zone = "{{{project_0.default_zone|Zone}}}" instance_network = google_compute_network.mynetwork.self_link } # Create the mynet-vm-2" instance module "mynet-vm-2" { source = "./instance" instance_name = "mynet-vm-2" instance_zone = "{{{project_0.default_zone_2|Zone 2}}}" instance_network = google_compute_network.mynetwork.self_link }

创建 mynetwork 及其资源

现在可以应用 mynetwork 配置了。

  1. 如需将 Terraform 配置文件重写为规范化格式和样式,请运行以下命令:
terraform fmt

输出应如下所示:

mynetwork.tf

注意:如果报错,请检查前面的步骤,确保您的配置与实验说明一致。如果您无法解决配置问题,请下载并查看这些已完成的配置:

  1. 如需初始化 Terraform,请运行以下命令:
terraform init

输出应如下所示:

Initializing modules... - mynet-vm-2 in instance - mynet-vm-2 in instance ... Terraform has been successfully initialized!

注意:如果报错,请检查前面的步骤,确保文件夹/文件结构正确。如果您无法解决配置问题,请参阅上方链接中提供的已完成配置。修复问题后,请重新运行上一个命令。

  1. 如需创建执行计划,请运行以下命令:
terraform plan

输出应如下所示:

... Plan: 4 to add, 0 to change, 0 to destroy. ...

Terraform 确定了需要添加以下 4 项资源:

名称 说明
mynetwork VPC 网络
mynetwork-allow-http-ssh-rdp-icmp 允许 HTTP、SSH、RDP 和 ICMP 流量的防火墙规则
mynet-vm-2 中的虚拟机实例
mynet-vm-2 中的虚拟机实例
  1. 要应用所需的更改,请运行以下命令:
terraform apply
  1. 要确认计划的操作,请输入:
yes

输出应如下所示:

... Apply complete! Resources: 4 added, 0 changed, 0 destroyed.

点击检查我的进度以验证是否完成了以下目标: 创建 mynetwork 及其资源

注意:如果执行过程中报错,请检查前面的步骤,确保文件夹/文件结构正确。如果您无法解决配置问题,请参阅上方链接中提供的已完成配置。修复问题后,请重新运行上一个命令。

任务 3. 验证您的部署

请在 Google Cloud 控制台中确认资源已创建。

在 Google Cloud 控制台中验证您的虚拟私有云 (VPC) 网络

  1. 在 Google Cloud 控制台的导航菜单 (“导航菜单”图标) 中,依次点击 VPC 网络 > VPC 网络
  2. 查看 mynetwork VPC 网络,该网络在每个区域中都有子网。
  3. 导航菜单中,依次点击 VPC 网络 > 防火墙
  4. 按照网络对防火墙规则进行排序。
  5. 查看 mynetworkmynetwork-allow-http-ssh-rdp-icmp 防火墙规则。

在 Cloud 控制台中验证您的虚拟机实例

  1. 导航菜单 (“导航菜单”图标) 中,依次点击 Compute Engine > 虚拟机实例
  2. 查看 mynet-vm-1mynet-vm-2 实例。
  3. 记下 mynet-vm-2 的内部 IP 地址。
  4. 对于 mynet-vm-1,点击 SSH 以启动一个终端并进行连接。
  5. 如需测试能否连接到 mynet-vm-2 的内部 IP 地址,请在 SSH 终端中运行以下命令(将 mynet-vm-2 的内部 IP 地址替换为之前记下的值):
ping -c 3 <在此处输入 mynet-vm-2 的内部 IP 地址> 注意:应该可以 ping 通,因为两个虚拟机实例位于同一网络中,且防火墙规则允许 ICMP 流量!

任务 4. 回顾

在本实验中,您创建了一个包含模块的 Terraform 配置,用于自动部署 Google Cloud 基础设施。随着配置的变化,Terraform 可以创建增量执行计划,让您能够逐步构建整体配置。

通过使用该实例模块,您只需提供属性作为输入变量,即可在多个资源中重复使用相同的资源配置。您可以将所创建的配置和模块用作未来部署的基础。

结束实验

完成实验后,请点击结束实验。Google Skills 会移除您使用过的资源并为您清理账号。

系统会提示您为实验体验评分。请选择相应的评分星级,输入评论,然后点击提交

星级的含义如下:

  • 1 颗星 = 非常不满意
  • 2 颗星 = 不满意
  • 3 颗星 = 一般
  • 4 颗星 = 满意
  • 5 颗星 = 非常满意

如果您不想提供反馈,可以关闭该对话框。

如果要留言反馈、提出建议或做出更正,请使用支持标签页。

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

准备工作

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

使用无痕浏览模式

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

登录控制台

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

此内容目前不可用

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

太好了!

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

一次一个实验

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

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

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