基础设施即代码(IaC)是指使用代码和软件开发技术来配置和管理基础设施的实践。IaC 背后的逻辑是尽量消除手动配置基础设施和资源的需求,比如服务器、负载均衡以及数据库等。由于基础设施是整个软件开发流程的一个组成部分,并且与应用交付更紧密地联系在一起,因此让基础设施的更改更容易交付十分重要。
使用代码来定义和管理基础设施及其配置,可以让开发者采用版本控制、测试和自动化部署等技术,这有助于避免各种应用问题产生,比如性能瓶颈、功能故障等。
Terraform 是一个被广泛使用的开源 IaC 工具,用户可以以声明式的方式来管理基础设施。借助 Terraform, 用户可以使用简单的配置语言管理多个不同云厂商的云资源,比如 AWS、Azure、GCP等。
本文将会介绍 Terraform 的基础,包括架构、工作原理、工作流程及最佳实践等方面的内容。
Terraform 是一款基于插件的工具,因此其有一个核心应用 Terraform,和上百个插件。核心应用提供了一个统一的层来管理 IaC 代码,并且它还会负责安装所需的插件,调用它们、管理状态等。另一方面,插件可以与基础设施平台和应用通信,如AWS、GCP、Grafana、Jenkins、GitLab等。其中一些插件由 Hashicorp 团队维护,另外的那些则是由第三方维护。每个人都可以编写并发布自己的插件,访问下方网站可以获取插件库:
https://registry.terraform.io/
Terraform 插件由两大主要类型:Provider 和 Provisioner。Provider 是通过 API 负责与实际基础设施或应用进行连接,并创建、修改和删除对象和资源。Provisioner 是负责连接已经配置好的基础设施并对其进行更改。例如,你可以使用 AWS Provider 来配置一个 EC2 实例,并在配置完成后远程执行 Provisioner 来在实例上执行某些命令行。(需要注意的是,Provisioner 通常不是最佳实践)
本节介绍一些 Terraform 中使用的核心概念/术语:
Terraform 的生命周期由init、plan、apply和 destroy,4个阶段构成。
Terraform 可以让用户通过配置文件定义和管理整个基础设施和版本控制。这主要由 Terraform 架构中的两个主要组件来实现这一目标:Core 和 Provider。
要完成工作,Terraform core 需要使用2个输入源。第一个源将用户配置输入到 Terraform,并定义需要创建或配置什么资源。第二个输入源包括向Terraform提供的关于当前基础设施设置情况的数据。
Terraform 会获取这些输入信息并决定下一步应该如何进行。它采用用户指定的期望状态,并将其与当前状态进行对比,进而对架构进行配置以消除两种状态之间的差距。Terraform core 本质上是要计算出需要创建、更新或删除的内容,以便全面配置基础设施。
第二个让 Terraform 运行的关键组件是 provider。常见的是云厂商,如 AWS 或 Azure,但其他基础设施或平台服务工具也可以。例如,Kubernetes 也是 Terraform 用的一个 provider。
Terraform 有上百个不同技术的 Provider 可供用户访问。例如,如果你正在使用 AWS,Terraform 可以访问 EC2 实例和在这一技术栈内的其他资源。接着,用户可以在不同层级上创建基础设施,比如在 Azure 上构建 Kubernetes。
这就是 Terraform 的工作原理:使用 Core 和 Provider 功能来快速完成应用程序和基础设施的设置,并且仅仅使用代码即可。
Terraform 的工作流程由以下3个步骤组成:
在 Terraform 工作流程的第一步中,用户需要使用 Haschicorp Configuration Language (HCL)来将基础设施资源声明为代码。
接下来,Terraform 会展示其计划,它会根据用户设置的期望状态和现有资源的当前状态进行比较,来增加或移除资源。
最终,接受计划的更改,来增加或删除任何基础设施资源。然后基础设施将在 Terraform 的帮助下进行全面部署。
Terraform 是 IaC 领域备受开发者青睐的开源工具,本文介绍了 Terraform 的基础,包括其工作流程、工作原理、核心概念以及架构解释,希望可以帮助你初步了解这个强大的工具。除了 Terraform 本身拥有强大的功能之外,还有非常完善的配套文档和教程,帮助开发者快速上手使用。