Terraform 新手村指南,萌新必读!

时间:2022-03-05 00:50:24

基础设施即代码(IaC)是指使用代码和软件开发技术来配置和管理基础设施的实践。 IaC 背后的逻辑是尽量消除手动配置基础设施和资源的需求,比如服务器、负载均衡以及数据库等。由于基础设施是整个软件开发流程的一个组成部分,并且与应用交付更紧密地联系在一起,因此让基础设施的更改更容易交付十分重要。
 

使用代码来定义和管理基础设施及其配置,可以让开发者采用版本控制、测试和自动化部署等技术,这有助于避免各种应用问题产生,比如性能瓶颈、功能故障等。
 

Terraform 是一个被广泛使用的开源 IaC 工具,用户可以以声明式的方式来管理基础设施。借助 Terraform, 用户可以使用简单的配置语言管理多个不同云厂商的云资源,比如 AWS、Azure、GCP等。
 

本文将会介绍 Terraform 的基础,包括架构、工作原理、工作流程及实践等方面的内容。
 

Terraform 架构

Terraform 是一款基于插件的工具,因此其有一个核心应用 Terraform,和上百个插件。核心应用提供了一个统一的层来管理 IaC 代码,并且它还会负责安装所需的插件,调用它们、管理状态等。另一方面,插件可以与基础设施平台和应用通信,如AWS、GCP、Grafana、Jenkins、GitLab等。其中一些插件由 Hashicorp 团队维护,另外的那些则是由第三方维护。每个人都可以编写并发布自己的插件,访问下方网站可以获取插件库:
 
Terraform 新手村指南,萌新必读!
 

Terraform 插件由两大主要类型:Provider 和 Provisioner。Provider 是通过 API 负责与实际基础设施或应用进行连接,并创建、修改和删除对象和资源。Provisioner 是负责连接已经配置好的基础设施并对其进行更改。例如,你可以使用 AWS Provider 来配置一个 EC2 实例,并在配置完成后远程执行 Provisioner 来在实例上执行某些命令行。(需要注意的是,Provisioner 通常不是实践)
 

Terraform 核心概念

本节介绍一些 Terraform 中使用的核心概念/术语:
 

  • Variables:也被称为 input-variables(输入变量),它是 Terraform 模块使用的键值对,可以自定义。
  • Provider:一种插件类型,与 API 服务进行交互并访问相关资源。
  • Module:它是一个包含 Terraform 模板的文件夹,所有的配置都可以在这里定义。
  • State:它由 Terraform 管理的基础设施和相关配置的缓存信息组成。
  • Resources:它指一个或多个基础设施对象(计算实例、虚拟网络等)的块(block),这些对象用于配置和管理基础设施。
  • Data Source:它是由 provider 实现的,以返回外部对象的信息到 Terraform。
  • Output Values:这是 Terraform 模块的返回值,可以被其他配置使用。
  • Plan:这是指其中一个阶段,在这一阶段中会决定需要创建、更新或销毁什么,以便从基础设施的 real/current 状态转移到期望状态。
  • Apply:这一阶段会应用基础设施的更改 real/current 状态,以推动到期望状态。
     

Terraform 生命周期

Terraform 的生命周期由 init、plan、apply和 destroy,4个阶段构成。
 

  • Terraform init 初始化工作目录,其中包括所有的配置文件。
  • Terraform plan 被用来创建执行计划以达到基础设施的期望状态。为了达到预期状态,会对配置文件进行更改。
  • Terraform apply 会对在 plan 阶段中定义的基础设施进行更改,从而使基础设施达到期望状态。
  • Terraform destroy 这一阶段用于删除所有的旧基础设施资源,这些资源在apply 阶段后被标记为污损(taint)。
     

Terraform 的工作原理

Terraform 可以让用户通过配置文件定义和管理整个基础设施和版本控制。这主要由 Terraform 架构中的两个主要组件来实现这一目标:Core 和 Provider。
 

Terraform Core 如何工作

要完成工作,Terraform core 需要使用2个输入源。第一个源将用户配置输入到 Terraform,并定义需要创建或配置什么资源。第二个输入源包括向Terraform提供的关于当前基础设施设置情况的数据。
 

Terraform 会获取这些输入信息并决定下一步应该如何进行。它采用用户指定的期望状态,并将其与当前状态进行对比,进而对架构进行配置以消除两种状态之间的差距。Terraform core 本质上是要计算出需要创建、更新或删除的内容,以便全面配置基础设施。
 

Terraform Provider 如何工作

第二个让 Terraform 运行的关键组件是 provider。常见的是云厂商,如 AWS 或 Azure,但其他基础设施或平台服务工具也可以。例如,Kubernetes 也是 Terraform 用的一个 provider。
 

Terraform 有上百个不同技术的 Provider 可供用户访问。例如,如果你正在使用 AWS,Terraform 可以访问 EC2 实例和在这一技术栈内的其他资源。接着,用户可以在不同层级上创建基础设施,比如在 Azure 上构建 Kubernetes。
 

这就是 Terraform 的工作原理:使用 Core 和 Provider 功能来快速完成应用程序和基础设施的设置,并且仅仅使用代码即可。
 

Terraform 工作流程

Terraform 的工作流程由以下3个步骤组成:
 

Step 1:写

在 Terraform 工作流程的第一步中,用户需要使用 Haschicorp Configuration Language (HCL)来将基础设施资源声明为代码。
 

Step 2:审核

接下来,Terraform 会展示其计划,它会根据用户设置的期望状态和现有资源的当前状态进行比较,来增加或移除资源。
 

Step 3:应用

最终,接受计划的更改,来增加或删除任何基础设施资源。然后基础设施将在 Terraform 的帮助下进行全面部署。
 

Terraform 实践

  • 使用版本控制来管理 Terraform 配置
  • 在存储后端远程保存你的 Terraform 状态
  • 使用变量来确保你的配置更灵活和可复用
  • 使用模块来整理你的配置并将其共享给他人
  • 使用 terraform plan 命令来在应用之前预览更改
     

总结

Terraform 是 IaC 领域备受开发者青睐的开源工具,本文介绍了 Terraform 的基础,包括其工作流程、工作原理、核心概念以及架构解释,希望可以帮助你初步了解这个强大的工具。除了 Terraform 本身拥有强大的功能之外,还有非常完善的配套文档和教程,帮助开发者快速上手使用。
 

教程地址:
https://developer.hashicorp.com/terraform/tutorials