Terraform 简介及工作原理

与 Vagrant 和 Packer 一样,Terraform 也是 HashiCorp 旗下的开源产品。Terraform 使用 Go 编程语言开发而成,于 2014 年 7 月 28 日推出了第一个公开发布版本。从发布至今的 5 年间,Terraform 已经得到了包括 AWS、IBM Cloud、Google Cloud、Microsoft Azure、Oracle Cloud、阿里云、腾讯云、VMware vSphereOpenStack 等多种公有云及私有云的支持。因为 Terraform 在目前是如此流行,掌握它的用法自然成为了一项必备的 IT(Information technology,信息技术)技能。

Terraform 简介

Terraform 是用来创建和管理基础设施的得力而优雅的工具。它通过自创的 HCL(HashiCorp Configuration Language,HashiCorp 配置语言)配置语言来声明想要创建的基础设施的最终状态。例如,假设我们打算在 AWS 上创建一台计算实例,那么只需为其指定实例的类型(由此决定可以使用多少 CPU、内存及网络带宽)和操作系统的镜像(如 Debian GNU/Linux)即可,而完全不必在意该计算实例是如何创建的过程。因为,Terraform 将为我们关心这一切。

在应用声明配置之前,Terraform 做得非常好的一点是,它允许我们先执行计划,故而能够让我们清晰的看到即将实施的基础设施的具体变化。通过执行计划,我们不仅可以详细了解创建、变更以及销毁的是哪些基础设施,而且还能据此判断是否需要最终加以应用配置。

Terraform 还能与 Ansible、SaltStack、Chef、Puppet 等配置管理工具集成,在创建基础设施的同时,执行安装、配置软件及服务。利用 Terraform 这项功能,我们可以重用现有的配置管理资源,从而将以往的工作流和 Terraform 整合在一起。

目前,Terraform 主要用于管理云计算平台和 SaaS(Software as a Service,软件即服务)基础设施,其范围包括虚拟服务器、数据存储、网络、DNS、CDN、数据库、监视服务等等。

Terraform 的工作原理

Terraform 的工作原理如图 @ref(fig:how-it-works) 所示[1]。以自顶向下的视角来看,首先,我们通过人类可读的 HCL 配置语言将基础设施表示为代码。在代码中,我们声明想要创建的基础设施的最终状态。这一步,我们既可以从 Terraform 公开的模块仓库及社区中重用基础设施资源,也能够将 Terraform 状态文件存储到云中或从云中同步该文件以便与整个团队的所有成员协作。

howitworks

接着,Terraform 负责解析我们在上一步编写的基础设施代码,并生成相应的执行计划。这份执行计划向我们展示 Terraform 实际上在应用代码时所做的具体操作。

最后,Terraform 应用我们定义的基础设施代码。在内部,Terraform 将 HCL 配置语言转换成向云供应商(如 AWS、Google Cloud、Microsoft Azure、阿里云等)或应用服务(如 Kubernetes、Heroku 等)进行调用的 API(Application programming interface,应用程序编程接口),从而最终实现创建和管理基础设施。


  1. https://www.hashicorp.com/products/terraform/ ↩︎