使用 Terraform 预配 Compute Engine 资源

HashiCorp Terraform 是一种基础设施即代码 (IaC) 工具,可让您预配和管理云基础设施。Terraform 提供了称为提供程序的插件,可让您与云服务提供商和其他 API 进行交互。您可以使用适用于 Google Cloud 的 Terraform 提供程序来预配和管理 Google Cloud 资源,包括 Compute Engine。

本页介绍了如何将 Terraform 与 Compute Engine 搭配使用,包括 Terraform 工作原理简介,以及一些有助于您开始将 Terraform 与 Google Cloud 搭配使用的资源。您还可以找到指向适用于 Compute Engine 的 Terraform 参考文档、代码示例以及有关使用 Terraform 预配 Compute Engine 资源的指南的链接。

如需了解如何开始使用适用于 Google Cloud 的 Terraform,请参阅安装和配置 Terraform适用于 Google Cloud 的 Terraform 快速入门

Terraform 的工作原理

Terraform 具有面向配置的声明性语法,您可以使用它来描述要在 Google Cloud 项目中预配的基础设施。在一个或多个 Terraform 配置文件中编写此配置后,您可以使用 Terraform CLI 将此配置应用于 Compute Engine 资源。

以下步骤介绍了 Terraform 的工作原理:

  1. Terraform 配置文件中描述您要预配的基础设施。您无需编写代码来描述如何预配基础设施。Terraform 会为您预配基础设施。
  2. 运行 terraform plan 命令,以评估配置并生成执行计划。您可以查看计划并根据需要进行更改。
  3. 运行 terraform apply 命令以执行以下操作:

    1. 在后台调用相应的 Compute Engine API,以根据您的执行计划预配基础设施。
    2. 创建一个 Terraform 状态文件,该状态文件是一个 JSON 文件,用于将配置文件中的资源映射到实际基础设施中的资源。Terraform 使用此文件来记录基础设施的最新状态,并确定何时创建、更新和销毁资源。
    3. 当您运行 terraform apply 时,Terraform 会使用状态文件中的映射将现有基础设施与代码进行比较,并根据需要进行更新:

      • 如果配置文件中定义了资源对象,但状态文件中不存在,则 Terraform 会创建该资源对象。
      • 如果状态文件中存在资源对象,但其配置与配置文件不同,则 Terraform 会更新该资源以与配置文件匹配。
      • 如果状态文件中的资源对象与配置文件匹配,则 Terraform 会使该资源保持不变。

适用于 Compute Engine 的 Terraform 资源

资源是 Terraform 语言中的基本元素。每个资源块描述一个或多个基础设施对象,例如虚拟网络或计算实例。

下表列出了适用于 Compute Engine 的 Terraform 资源:

Terraform 资源 数据源

适用于 Compute Engine 的基于 Terraform 的指南

下表列出了适用于 Compute Engine 的基于 Terraform 的操作指南和教程:

指南 详细信息
创建并启动 Compute Engine 实例 介绍如何创建虚拟机 (VM) 实例。
创建具有本地 SSD 磁盘的虚拟机 介绍如何创建使用本地 SSD 磁盘存储空间的虚拟机。
创建磁盘快照 介绍如何创建标准快照以定期备份磁盘中的数据。
复制包含克隆的磁盘 介绍如何创建现有磁盘的可用区磁盘克隆。
创建和管理区域性磁盘 介绍如何创建和管理区域性磁盘。
创建和使用 Spot 虚拟机 介绍如何创建和管理 Spot 虚拟机。Spot 虚拟机实例是过剩的 Compute Engine 容量。与标准虚拟机的按需价格相比,Spot 虚拟机的价格要低得多
将 SSH 密钥添加到虚拟机 介绍了如何将 SSH 密钥添加到使用 OS Login 的虚拟机实例和使用基于元数据的 SSH 密钥的虚拟机。
运行关停脚本 介绍如何创建并运行可在虚拟机实例停止或重启前执行命令的关停脚本。
为单个项目创建预留 介绍如何创建只能由同一项目中的虚拟机实例使用的单项目预留。
创建实例模板 介绍如何创建和管理实例模板。
根据时间表进行扩缩 介绍如何为现有 MIG 创建扩缩时间表。借助基于时间表的自动扩缩功能,您可以在预期的负载之前安排容量,从而提高工作负载的可用性。
将 Persistent Disk 存储添加到虚拟机 介绍如何创建空白的非启动可用区级 Persistent Disk 卷,并将其挂接到虚拟机。
设置 OS Login 介绍如何设置 OS Login。
将非启动磁盘挂接到虚拟机 介绍如何将非启动可用区级磁盘挂接到虚拟机。
创建使用用户管理的服务账号的虚拟机 介绍如何创建配置为使用用户代管式服务账号的虚拟机实例。服务账号是一种特殊类型的账号,通常由应用或计算工作负载用于进行已获得授权的 API 调用。
增加永久性磁盘的大小 介绍如何增加永久性磁盘的大小。
在虚拟机上启用虚拟显示 介绍如何在虚拟机实例上启用虚拟显示。
在单个可用区中创建 MIG 介绍如何在单个可用区中创建托管式实例组 (MIG)。将 MIG 中的所有虚拟机放在单个可用区中有助于最大限度地缩短延迟时间,这对于某些工作负载(例如批量工作负载)很有用。
创建使用自定义主机名的虚拟机实例 介绍如何创建使用自定义主机名的虚拟机实例。
设置基于应用的健康检查和自动修复 介绍如何设置基于应用的健康检查,以自动修复 MIG 中的虚拟机。
创建使用抢占式虚拟机的 MIG 介绍如何创建使用抢占式虚拟机实例的 MIG。如果您的工作负载可以容忍中断,并且您希望利用与抢占式虚拟机相关的费用节省,则抢占式虚拟机非常有用。
在 MIG 中添加和移除虚拟机 介绍了如何在 MIG 中添加和移除虚拟机。
创建启用了自动扩缩功能的 MIG 介绍如何创建自动扩缩的 MIG,以便根据整个实例组的平均 CPU 利用率自动添加和移除虚拟机。
创建具备有状态磁盘的 MIG 介绍如何创建使用抢占式虚拟机实例的 MIG。如果您的工作负载可以容忍中断,并且您希望利用与抢占式虚拟机相关的费用节省,则抢占式虚拟机非常有用。
创建 SQL Server 虚拟机实例 介绍如何创建 Microsoft SQL Server 虚拟机实例。SQL Server 是一种在 Windows Server 和某些 Linux 发行版上运行的数据库系统。您可以将 Compute Engine 上的 SQL Server 用作应用后端的一部分、灵活的开发和测试环境,或者作为本地系统的补充用于备份和灾难恢复。
创建操作系统政策分配任务 介绍如何创建操作系统政策分配任务。您可以使用操作系统政策,在 Linux 和 Windows 虚拟机实例之间保持一致的软件配置。
在 MIG 中配置有状态元数据 介绍如何在 MIG 中配置有状态元数据。实例元数据对于为应用设置属性以及通过元数据服务器与应用进行通信非常有用。
在 MIG 中配置有状态永久性磁盘 介绍如何在 MIG 中配置有状态永久性磁盘。通过将永久性磁盘配置为有状态,您可以利用虚拟机实例自动修复和自动更新功能,同时保留磁盘的状态。
在 MIG 中配置有状态 IP 地址 介绍如何在 MIG 中配置有状态 IP 地址。通过在 MIG 中配置有状态 IP 地址,您可以确保在自动修复、更新和重新创建实例组中的虚拟机实例时保留 IP 地址。
为区域级 MIG 中的虚拟机设置目标分布形状 介绍如何为虚拟机设置目标分布形状。
创建其虚拟机位于一个区域内的多个可用区中的 MIG 介绍如何创建其虚拟机分布在一个区域内的多个可用区中的 MIG。将应用负载分布到多个可用区可保护您的工作负载免受可用区级故障的影响。
在区域级 MIG 中停用并重新启用主动式虚拟机重新分布功能 介绍如何在区域级 MIG 中停用并重新启用主动式虚拟机重新分布功能。在区域 MIG 中,如需在该区域的选定可用区中保持均匀的虚拟机实例数量,请使用主动式实例重新分布功能。此配置选项可在发生可用区级故障时最大限度地提高应用的可用性。

适用于 Google Cloud 的 Terraform 模块和蓝图

模块和蓝图可帮助您自动化大规模预配和管理 Google Cloud 资源。模块是一组可重复使用的 Terraform 配置文件,用于创建 Terraform 资源的逻辑抽象。蓝图是一个可部署且可重复使用的模块和政策的软件包,用于实现和记录特定解决方案。

下表列出了与 Compute Engine 相关的模块和蓝图:

模块或蓝图 详细信息
terraform-google-vm 可用作基础组件以在 Google Cloud 中预配虚拟机的专有子模块的集合。
terraform-google-startup-scripts 提供可嵌入虚拟机中的有用启动脚本库。
terraform-google-container-vm 在 Compute Engine 实例上部署容器

后续步骤