Skip to main content

Terraform 概述

Terraform 是一种开源工具,用于安全高效地预览、配置和管理云基础架构和资源。

什么是 Terraform

HashiCorp Terraform 是一个 IT 基础架构自动化编排工具,可以用代码来管理维护 IT 资源。它编写了描述云资源拓扑的配置文件中的基础结构,例如虚拟机、存储账户和网络接口。Terraform 的命令行接口(Command Line Interface,CLI)提供一种简单机制,用于将配置文件部署到阿里云或其他任意支持的云上,并对其进行版本控制。更多信息,请参见 HashiCorp Terraform。

同时,Terraform 是一个高度可扩展的工具,通过 Provider 来支持新的基础架构。Terraform 能够让您在阿里云上轻松使用简单的模板语言来定义、预览和部署云基础结构。您可以使用 Terraform 来创建、修改、删除 ECS、VPC、RDS、SLB 等多种资源。更多信息,请参见配置语法。

基础知识

Terraform 是您和云提供商 API 之间的一层。它使您能够将自动云配置提升到新的高度。Terraform 可以帮助您将云基础设施写成代码。这意味着您可以准确地定义您的应用程序需要什么,Terraform 将在云中远程配置这些资源。

首先,您将创建一个.tf 文件,列出您的应用程序在云中的需求和您的首选云提供商(AWS、Azure、GCP 等)。比方说,你包括一个 SQL 数据库、虚拟机和网络实例。

在您配置好您的应用需求后,Terraform 会根据您现有的云存在和您的.tf 文件中的配置来规划您的选择。Terraform 是需要在你的虚拟机和 SQL 数据库之上提供一个网络实例,还是需要创建所有的资源?

根据这个计划,Terraform 将使用云提供商的 API 和您的 API 令牌 "旋转这些资源"(Vennam)。

Terraform 将通过向您提供云供应的相关信息来完成这一过程。这包括应用程序的 URL、访问令牌等。

使用案例

您的项目是否需要使用 Terraform?以下是 Terraform 在测试和生产环境中最常用的一些使用案例。

测试环境:对于使用开发环境测试代码的开发人员来说,Terraform 是一个可靠的选择。它还能很好地与利用持续集成/持续开发方法进行测试并将其代码部署到生产服务器的团队进行整合。Terraform 可以根据部署和交付情况自动配置云资源。

分布式应用:使用分布式系统设计的应用通常需要按需提供云资源。将云中的基础设施配置过程编码化,可以节省人工配置系统的时间和资源。

多云部署:通常情况下,企业会将其云资源分布在不同的云提供商上。这允许从任何特定提供商的停机时间进行精细的恢复。由于只针对一个提供商的工具能力有限,资源协调可能极具挑战性。Terraform 允许开发人员以简单有效的方式管理多云设置,帮助降低应用程序的复杂性。

融合

使用 Terraform 通过一个接入点路由云服务,自然而然地降低了应用的复杂性。Terraform 服务是您的应用和云提供商提供的资源管理 API 之间的抽象层。使用 Terraform 提供了一种简单而统一的方式与云资源的后端进行交互,节省了原本需要手动协调云环境的时间。

定义和配置云资源很简单,创建一个 .tf 文件并运行三个命令。

terraform init terraform plan terraform apply

第一步,terraform init ,将使用项目目录下的 Terraform 配置文件来初始化你的应用程序。这些配置文件包含了你项目的需求。这可能包括一个 MySQL 数据库甚至一个虚拟机实例。

在你定义了你的.tf 文件并运行第一个命令后,你将运行 terraform plan 。该操作将把您项目当前的云基础设施与您的.tf 文件中定义的基础设施进行比较。根据您使用的现有云技术的数量,Terraform 将提供新的服务。

这个过程的最后一步是 terraform apply 。这条命令将执行所有的资源配置,并将输出直接提供给你的控制台窗口。有了这最后一条命令,你就完成了为你的应用创建云资源的工作!

缺点

虽然 Terraform 可以极大地帮助你管理项目的云资源,但有几个缺点需要注意。

控制台输出: Terraform 基础设施配置的规划阶段往往在控制台输出中充满了不必要的信息。这些无关紧要的输出大多降低了您查看 Terraform 是否能够成功配置资源的可见性。虽然大多数人都会对 Terraform 的这个方面感到满意,但有些人可能会觉得这很碍眼,很难管理。

回滚处理: 由于 Terraform 中没有回滚功能,不成功的配置可能会导致你的项目云基础设施的 "半成品工作"。例如,如果 Terraform 在应用阶段中途停止了供应,它不会回滚创建任何先前供应的资源。这可能会造成一个尴尬的局面,你必须手动删除所有的云基础设施,并重新启动整个过程。

错误处理:Terraform 的错误处理过程可能是不稳定的。很多时候,你会发现自己因为通用的错误声明而难以解决供应会话不成功的根本问题。当您的云存在分布在多个供应商时,这可能是一个痛苦。幸运的是,Terraform 社区已经非常成熟,因此您的问题很有可能得到其他开发者的解答。

参考