1.terraform介绍
什么是 terraform
Terraform 是一种基础架构即代码工具,通过配置文件定义基础设施并对其进行版本控制、重用和共享。Terraform 的主要吸引力在于,我们声明了我们的基础设施应该是什么样子,该工具将决定必须采取哪些行动来“实现”该基础设施。
terraform 愿景
Terraform 的愿景主要是成为一种通用、可扩展和高效的基础设施即代码 (Infrastructure as Code, IaC) 工具,让用户能够以代码的形式管理和配置复杂的基础设施。
terraform 工作原理
Terraform 通过其应用程序编程接口 (API) 在云平台和其他服务上创建和管理资源。provider 插件机制使 Terraform 能够使用几乎任何具有可访问 API 的平台或服务。
HashiCorp和Terraform社区已经编写了数千个提供商来管理许多不同类型的资源和服务。您可以在Terraform Registry上找到所有公开可用的提供商,包括Amazon Web Services(AWS),Azure,Google Cloud Platform(GCP),Kubernetes,Helm,GitHub,Splunk,DataDog等等。
terraform 工作流包括的三个阶段:
- write:定义资源,这些资源可能跨多个云提供商和服务。例如,您可以创建一个配置,以便在具有安全组和负载均衡器的虚拟私有云 (VPC) 网络中的虚拟机上部署应用程序。
- plan:Terraform 创建一个执行计划供您预览
- apply:一旦批准后,Terraform 会按照正确的顺序执行建议的操作,并遵守任何资源依赖关系。例如,如果您更新 VPC 的属性并更改该 VPC 中的虚拟机数量,Terraform 将在扩展虚拟机之前重新创建 VPC。
使用步骤
编写配置文件:用户通过编写配置文件来定义所需的基础设施资源。这些文件通常以 .tf 扩展名结尾,并使用 HashiCorp Configuration Language (HCL) 编写,它是一种简洁的配置语言,专为基础设施管理而设计。
初始化环境:通过运行 terraform init 命令来初始化 Terraform 工作目录。这个命令负责下载所需的提供者插件(比如 AWS、Azure 或 GCP)和设置后端存储(用于存储 Terraform 状态文件)。
计划和预览:在应用更改之前,可以运行 terraform plan 命令来查看 Terraform 将要执行的操作。这个命令展示了哪些资源将被创建、更新或删除。
应用变更:使用 terraform apply 命令来应用配置中定义的变更。Terraform 将与云提供商通信,并创建、更新或删除资源以匹配配置文件中的定义。
状态管理:Terraform 使用状态文件(通常是一个名为 terraform.tfstate 的文件)来跟踪管理的资源的当前状态。状态文件对于 Terraform 的工作至关重要,因为它允许 Terraform 知道哪些资源已经存在,并据此计划未来的变更。
为什么选择Terraform?
Terraform 是一种广受欢迎的基础设施即代码 (Infrastructure as Code, IaC) 工具,它由 HashiCorp 开发。以下是选择 Terraform 的一些原因:
云平台无关性:Terraform 支持多个云服务提供商,例如 AWS、Azure、Google Cloud Platform 等,允许用户跨多个云提供商和平台部署和管理基础设施。
代码化管理:通过代码的形式来创建、管理和配置资源,有助于提高可重复性和一致性。这也使得基础设施可以像管理应用程序代码一样进行版本控制和审查。
模块化和可重用:Terraform 允许你通过模块化的方式来组织代码。你可以创建可复用的模块,这有助于保持代码的整洁,并提高开发效率。
计划和预览变更:在实际应用任何变更之前,Terraform 允许你查看这些变更将对基础设施产生什么影响。这有助于识别和解决问题,以及提高变更控制的可预测性。
状态管理:Terraform 跟踪管理的资源的状态。这使得它能够有效地确定需要应用哪些变更以达到期望的配置。
大社区支持:Terraform 有一个活跃的社区和大量的开源贡献者。这使得你可以找到大量的文档、示例和第三方插件,以帮助解决问题和增强功能。
供应商支持:由于 Terraform 的流行,许多云服务提供商都积极支持 Terraform,并提供与其服务紧密集成的 Provider 插件。
管理任何基础设施
查找您在 Terraform 注册表中已经使用的许多平台和服务的提供商。您也可以编写自己的代码。Terraform 对基础设施采用不可变的方法,从而降低了升级或修改服务和基础设施的复杂性。
自动更改
Terraform 配置文件是声明性的,这意味着它们描述基础结构的最终状态。您无需编写分步说明即可创建资源,因为 Terraform 会处理底层逻辑。Terraform 构建资源图以确定资源依赖关系,并并行创建或修改非依赖资源。这使得 Terraform 能够有效地配置资源。