arrow_back

Terraform 基础知识

登录 加入
欢迎加入我们的社区,一起测试和分享您的知识!
done
学习 700 多个动手实验和课程并获得相关技能徽章

Terraform 基础知识

实验 35 分钟 universal_currency_alt 1 个积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
欢迎加入我们的社区,一起测试和分享您的知识!
done
学习 700 多个动手实验和课程并获得相关技能徽章

GSP156

Google Cloud 自定进度实验

概览

Terraform 可让您以安全、可预测的方式创建、更改和改进基础架构。它是一个开源工具,可将 API 编码为声明式配置文件。您可以将这些文件分享给同事,将它们作为代码进行处理、修改、审核和版本控制。

目标

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

  • 在 Google Cloud 中开始使用 Terraform。
  • 通过安装二进制程序安装 Terraform。
  • 使用 Terraform 创建一个虚拟机实例基础架构。

设置和要求

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

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 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”图标

如果您连接成功,即表示您已通过身份验证,且当前项目会被设为您的 PROJECT_ID 环境变量所指的项目。输出内容中有一行说明了此会话的 PROJECT_ID

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

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

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

  2. 现在,输出的内容应如下所示:

输出:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (可选)您可以通过此命令列出项目 ID:
gcloud config list project

输出

[core] project = <project_ID>

输出示例

[core] project = qwiklabs-gcp-44776a13dea667a6 Note: For full documentation of gcloud, in Google Cloud, refer to the gcloud CLI overview guide.

Terraform 是什么?

Terraform 是一种工具,用于安全高效地构建、更改基础架构及对基础架构进行版本控制。Terraform 可管理现有主流服务提供程序和自定义内部解决方案。

配置文件会向 Terraform 说明运行单个应用或整个数据中心所需的组件。Terraform 会生成执行计划,以说明它会执行哪些操作来实现期望的状态。接着,Terraform 会实施执行计划,以构建所述基础架构。当配置发生变化时,Terraform 能够确定具体改动并制定可用的渐进式执行计划。

Terraform 可以管理的基础架构包含计算实例、存储空间和网络等底层组件,以及 DNS 条目和 SaaS 功能等高层组件。

主要特征

基础架构即代码

基础架构是以高级配置语法描述的。这样您就可以像对待其他代码一样,对数据中心的蓝图进行版本控制和处理。此外,基础架构可以共享和重复使用。

执行计划

Terraform 会有规划步骤,用于生成执行计划。执行计划会表明在您执行 apply 命令时 Terraform 会执行的操作。这可以避免 Terraform 操作基础架构时出现意外情况。

资源图表

Terraform 会构建包含您所有资源的图表,并行创建及修改不具依赖性的资源。因此,Terraform 会尽可能高效地构建基础架构,运营人员也能深入了解自己基础架构中的依赖项。

自动处理变更

只需极少的人工操作即可将复杂的变更集应用到您的基础架构。借助前文提到的执行计划和资源图表,您可以确切知道 Terraform 的变更内容和变更顺序,这有助于您避免许多可能的人为错误。

任务 1. 验证 Terraform 安装

Terraform 已预安装在 Cloud Shell 中。

  • 打开新的 Cloud Shell 标签页,验证 Terraform 是否可用:
terraform

这会生成起帮助作用的输出内容,类似于以下内容:

Usage: terraform [--version] [--help] [args] The available commands for execution are listed below. The most common, useful commands are shown first, followed by less common or more advanced commands. If you're just getting started with Terraform, stick with the common commands. For the other commands, please read the help and docs before usage. Common commands: apply Builds or changes infrastructure console Interactive console for Terraform interpolations destroy Destroy Terraform-managed infrastructure env Workspace management fmt Rewrites config files to canonical format get Download and install modules for the configuration graph Create a visual graph of Terraform resources import Import existing infrastructure into Terraform init Initialize a Terraform working directory output Read an output from a state file plan Generate and show an execution plan providers Prints a tree of the providers used in the configuration push Upload this Terraform module to Atlas to run refresh Update local state file against real resources show Inspect Terraform state or plan taint Manually mark a resource for recreation untaint Manually unmark a resource as tainted validate Validates the Terraform files version Prints the Terraform version workspace Workspace management All other commands: debug Debug output management (experimental) force-unlock Manually unlock the terraform state state Advanced state management

任务 2. 构建基础架构

安装 Terraform 后,您可以立即开始创建基础架构。

配置

Terraform 中用于描述基础架构的文件集简称为 Terraform configuration。在本部分中,您将编写您的第一项配置,以启动一个虚拟机实例。您可以在 Terraform 语言文档中了解配置文件的格式。我们建议使用 JSON 来创建配置文件。

  1. 在 Cloud Shell 中,使用以下命令创建一个名为 instance.tf 的空白配置文件:
touch instance.tf
  1. 点击 Cloud Shell 工具栏上的打开编辑器
    如需在 Cloud Shell 与代码编辑器之间切换,请根据需要点击打开编辑器打开终端,或点击在新窗口中打开,在单独的标签页中打开编辑器。

  2. 点击 instance.tf 文件,在其中添加以下内容,并将 <PROJECT_ID> 替换为您的 Google Cloud 项目 ID:

resource "google_compute_instance" "terraform" { project = "{{{project_0.project_id}}}" name = "terraform" machine_type = "e2-medium" zone = "{{{project_0.default_zone}}}" boot_disk { initialize_params { image = "debian-cloud/debian-11" } } network_interface { network = "default" access_config { } } }

这是 Terraform 可以应用的完整配置。总体结构应该直观简单。

instance.tf 文件中的“resource”代码块定义了基础架构中存在的资源。资源可能是虚拟机实例等物理组件。

resource 代码块的开头为两个字符串:资源类型资源名称。本实验中的资源类型为 google_compute_instance,名称为 terraform。类型的前缀对应提供程序:google_compute_instance 会自动向 Terraform 说明该资源由 Google 提供程序管理。

resource 代码块中是资源所需的配置。

  1. 在 Cloud Shell 中,验证您的新文件已成功添加,且目录中没有其他 *.tf 文件,因为 Terraform 会加载所有这类文件:
ls

初始化

对于新配置(或从版本控制系统签出某项现有配置后)需要运行的第一个命令是 terraform init,它将对各项本地设置和数据进行初始化,以供后续的命令使用。

Terraform 使用基于插件的架构来支持众多可用的基础架构和服务提供程序。每个“提供程序”均为各自封装的二进制程序,与 Terraform 本身分开分发。terraform init 命令会自动下载并安装提供程序的二进制程序,以供提供程序在配置中使用,在本示例中只有 Google 提供程序。

  1. 下载并安装提供程序的二进制程序:
terraform init

Google 提供程序插件会被下载并安装到当前工作目录中的子目录,与各类其他簿记文件放在一起。您会看到“Initializing provider plugins”(正在初始化提供程序插件)消息。Terraform 会知道您正在运行 Google 项目,并且该项目正在获取 Google 资源。

Installing hashicorp/google v4.77.0... 注意:您的版本号可能更高。

输出内容会指明正在安装的插件版本,并建议您在以后的配置文件中指定此版本,以确保 terraform init 会安装兼容的版本。

  1. 创建执行计划:
terraform plan

Terraform 会执行刷新操作(除非明确停用),然后确定需要执行哪些操作才能实现配置文件中指定的期望状态。这个命令可以方便地检查一组更改的执行计划是否符合您的预期,而无需对实际资源或状态进行任何更改。例如,您可以先运行此命令,然后再向版本控制系统提交更改,以确保它会按预期执行。

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

应用更改

  1. 在您创建的 instance.tf 文件所在的目录中,运行以下命令:
terraform apply

输出结果会显示执行计划,其中描述了 Terraform 会采取哪些操作来更改真实基础架构,使其符合配置。输出格式类似于 Git 等工具生成的 diff 格式。

google_compute_instance.terraform 旁有 +,表示 Terraform 会创建此资源。在那之后是将设置的属性。如果显示的值为 <computed>,则表示在创建资源前将不知道相关值。

输出示例

An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # google_compute_instance.default will be created + resource "google_compute_instance" "default" { + can_ip_forward = false + cpu_platform = (known after apply) + deletion_protection = false + guest_accelerator = (known after apply) + id = (known after apply) + instance_id = (known after apply) + label_fingerprint = (known after apply) + machine_type = "e2-medium" + metadata_fingerprint = (known after apply) + name = "terraform" + project = "qwiklabs-gcp-42390cc9da8a4c4b" + self_link = (known after apply) + tags_fingerprint = (known after apply) + zone = "us-west1-c" + boot_disk { + auto_delete = true + device_name = (known after apply) + disk_encryption_key_sha256 = (known after apply) + kms_key_self_link = (known after apply) + source = (known after apply) + initialize_params { + image = "debian-cloud/debian-11" + labels = (known after apply) + size = (known after apply) + type = (known after apply) } } + network_interface { + address = (known after apply) + name = (known after apply) + network = "default" + network_ip = (known after apply) + subnetwork = (known after apply) + subnetwork_project = (known after apply) + access_config { + assigned_nat_ip = (known after apply) + nat_ip = (known after apply) + network_tier = (known after apply) } } + scheduling { + automatic_restart = (known after apply) + on_host_maintenance = (known after apply) + preemptible = (known after apply) + node_affinities { + key = (known after apply) + operator = (known after apply) + values = (known after apply) } } } Plan: 1 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value:

在成功创建计划后,Terraform 将会暂停,等到计划获得批准后才会继续运行。在生产环境中,如果执行计划的任何内容似乎有误或有危险,此时可放心取消,您的基础架构尚未发生任何更改。

  1. 在本示例中,计划看起来可以接受,因此可在出现确认提示时输入 yes 继续操作。
    执行计划可能需要几分钟的时间,因为 Terraform 需要等待虚拟机实例可用。

Terraform 现已完成所有操作!

验证您已完成的任务

点击检查我的进度可验证您已完成的任务。如果您成功完成了任务,系统会给出评分。

使用 Terraform 在 可用区中创建一个虚拟机实例。
  1. 在 Google Cloud 控制台的导航菜单中,点击 Compute Engine > 虚拟机实例虚拟机实例页面会随之打开,并且您会在虚拟机实例列表中看到您刚创建的虚拟机实例。

Terraform 已将一些数据写入 terraform.tfstate 文件。此状态文件极其重要:它会跟踪已创建资源的 ID,以便 Terraform 知道自己正在管理什么。

  1. 在 Cloud Shell 中检查当前状态:
terraform show

输出示例

# google_compute_instance.default: resource "google_compute_instance" "default" { can_ip_forward = false cpu_platform = "Intel Haswell" deletion_protection = false guest_accelerator = [] id = "terraform" instance_id = "3408292216444307052" label_fingerprint = "42WmSpB8rSM=" machine_type = "e2-medium" metadata_fingerprint = "s6I5s2tjfKw=" name = "terraform" project = "qwiklabs-gcp-42390cc9da8a4c4b" self_link = "https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-42390cc9da8a4c4b/zones/{{{project_0.default_zone}}}/instances/terraform" tags_fingerprint = "42WmSpB8rSM=" zone = "{{{project_0.default_zone}}}" boot_disk { auto_delete = true device_name = "persistent-disk-0" source = "https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-42390cc9da8a4c4b/zones/{{{project_0.default_zone}}}/disks/terraform" ....

您可以发现,在创建此资源的过程中,您也收集了大量相关信息。您可以引用这些值来配置其他资源或输出。

恭喜!您已经使用 Terraform 构建了您的第一个基础架构。您已经了解配置语法、基本执行计划的示例和状态文件。

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

下列选择题应该可以强化您对本实验所涉概念的理解。请尽您所能回答问题。

恭喜

祝贺您完成本实验!您学习了如何使用 Terraform 在 Google Cloud 中创建和管理基础架构。

完成挑战任务

本自学实验是以下挑战任务的组成部分:使用 Terraform 管理云基础架构使用 Terraform 在 Google Cloud 上实现基础架构自动化。一项挑战任务就是一系列相关的实验,学习时按部就班地完成这些实验即可。完成挑战任务即可赢得一枚徽章,以表彰您取得的成就。您可以公开展示徽章,还可以在您的在线简历或社交媒体账号中加入指向徽章的链接。欢迎注册参加任何包含此实验的挑战任务,完成后就能立即获得相应的积分。请参阅 Google Cloud Skills Boost 目录,查看提供的所有挑战任务。

参与下一项实验

欢迎您继续参与挑战任务,下一项实验是使用 Terraform 实现基础架构即代码。您还可以查看以下 Google Cloud Skills Boost 实验:

后续步骤/了解详情

Google Cloud 培训和认证

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

上次更新手册的时间:2024 年 1 月 26 日

上次测试实验的时间:2023 年 8 月 10 日

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

此内容目前不可用

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

太好了!

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