Terraform 介绍
在了解了 IaC 的基础知识之后,本文将帮您深入理解什么是Terraform。
什么是 Terraform
Terraform 是 HashiCorp 公司创建的一个开源的“基础设施即代码”的工具,它允许您使用声明式的配置文件来定义阿里云资源。
Terraform 所管理的资源,即包括如虚拟机、容器、存储和网络等基础类组件,也包括如安全组规则、DNS 条目、权限策略等配置类组件,还可以包括某些 SaaS 类功能。
Terraform 以一种简单的、人类易读的语言 — HashiCorp 配置语言(HCL)将基础设施表达为代码。Terraform 读取代码配置文件,并提供变更的执行计划,通过对这个执行计划的预览、确认和执行来完成基础设施的最终创建和管理。
阿里云提供了面向阿里云资源的 Terraform Provider,运维人员可以通过 Provider 定义和编写阿里云上的资源,并自动化地创建这些资源。
Terraform 的特点
Terraform 的特点包括:
多云和多 API 支持:除了阿里云,Terraform还支持所有主要的云服务提供商,并且支持像 GitHub 和Kubernetes 等的 API 服务。
开放的核心架构:提供从自托管到全托管的三个不同版本,包括企业级的支持。
庞大的社区:提供了一个开放的注册中心,支持包括阿里云在内的所有 Provider 和 Module 的在线注册和管理。
基础设施的配置:提供的是对基础设施资源层面生命周期(创建、修改、删除、查看)的管理,而不是基础设施系统层面的配置管理,如启动服务、安装依赖、安装应用程序和运行更新等
阿里云上的 Terraform 提供了如下的能力:
资源配置:您可以使用 Terraform 定义和配置阿里云资源,即您可以使用资源块(resource)来定义诸如虚拟机、网络、存储和防火墙等基础设施资源。
资源关系创建:您可以创建资源之间明确的依赖关系,以便在创建另一个资源之后才能创建另一个特定的资源。
标准化的模块:您可以通过创建可重用的模块来标准化特定资源的创建方式。阿里云也提供了一些标准化的模块,您可以直接引用。
IaC 工作流程
接下来,让我们看看标准的 IaC 工作流程。
范围确定
在进入 Terraform 工作流之前,您必须确定项目或者应用应该创建哪些资源。例如,对于常见的两层架构,你需要一个 Web 服务器池用于构建数据库。因此,在“范围确定”阶段,您需要确定所需的阿里云资源,并对它们之间如何相连进行规划。
模板编写
Terraform工作流以编写模板开始,您编写想要创建的基础设施的代码,然后代码组织在不同的配置文件中,比如 main.tf,variables.tf,tfvars 等
初始化
接下来就是初始化,在这个阶段会自动安装代码所需的任何插件或模块。您运行 terraform init 命令,它将初始化Terraform 工作目录并安装阿里云 Terraform Provider。
预览
在预览阶段,您需要运行 terraform plan 命令。该命令提供了按照模板编写阶段所定义的资源配置来创建、更改或销毁资源的执行计划,并且在将该计划应用到您的阿里云基础设施之前,您可以对其进行审查,以确保符合您的预期。
执行
在您审查了执行计划中描述的资源配置后,执行 terraform apply 命令,它将创建实际的基础设施或者对已经存在的基础设施资源进行变更或者销毁,执行的同时将会创建相对应的状态文件或者对已有的状态文件进行更改。
随着本教程的不断深入,您将更加详细地探索 Terraform 工作流。
使用场景
现在让我们来看一些常见的 Terraform 使用场景。
管理基础设施
Terraform 被用来管理基础设施,它采用的是不可变的方法,意味着您编写的代码可以降低升级或修改服务和基础设施所涉及的复杂度。
追踪变更
Terraform 还被用来追踪基础设施的变更。每当一个新的变更被预览或者被执行的时候,Terraform 都会要求您在修改基础设施状态之前进行确认。Terraform 在创建基础设施时,会自动生成一个状态文件。状态文件反映了您的基础设施的当前状态,并显示了配置模板中所修改的阿里云资源的数量和类型。
自动变更
Terraform 被用来自动化变更。由于模板配置文件是声明式的,您不需要编写详细的指令来构建基础设施,只需定义最终状态,Terraform 将自动管理依赖关系并完成资源的创建。
标准化配置模板
Terraform 也被用来标准化配置。您可以使用自定义模块或者 Terraform 注册中心中所提供的公共模块来提升效率并实现最佳实践。Terraform 还支持自动化的强制执行策略,以实现对团队可以配置和使用的资源类型进行约束和限制。