Terraform - Infrastructure as Code什么是 Terraform Terraform 是一个安全、高效地部署、更改、版本化基础设施和应用程序的工具,可以用来管理多层次的资源。从上层的软件配置到底层的网络、系统配置都可以使用 Terraform 统一进行管理。 Terraform 用配置文件来描述一个应用。 Terraform 会将配置文件与当前环境对比后,生成一个执行计划,这个计划会列出为了达到配置文件中定义的状态所需要执行的操作,然后执行计划以达到期望的状态。 Terraform 通过插件机制管理不同的资源提供者,以此来接入各种资源,如虚拟机,存储,网络和各种应用服务。 Terraform 的主要特性Infrastructure as Code将基础架构使用配置语法进行描述,这可以让数据中心的构建计划可以像其他代码一样进行版本化和追踪。 Execution PlansTerraform 有一个规划步骤,它生成一个执行计划。执行计划显示当您调用应用程序时 Terraform 将执行的操作。使用这个功能可以保证操作基础设施时不发生意外 Resource GraphTerraform 创建了一个所有资源的视图。这使得 Terraform 可以并行化没有依赖的创建与修改。 因此,Terraform 可以高效地构建基础架构。操作人员也能更加了解环境的结构。 Change AutomationTerraform 会自动的分析什么是需要修改的,从而避免了许多可能的人为错误。 Terraform vs. Other Software与 Terraform 类似的 Infrastructure as Code 工具大概有下面几种: 下面将从几个方面来说明 Terraform 与其他工具对比的优势。 配置管理工具与编排工具Chef、Puppet、Ansible、SaltStack 都可以称为配置管理工具,这些工具的主要目标是在已经存在的机器上安装和管理软件。 而 Terraform 和 CloudFormation 可以称为编排工具,更注重于数据中心以及相关服务的高级抽象。他们的工作重点是创建资源并且引导进行初始化。 而且在现在的环境下,大家使用容器等服务,镜像已经包括了软件的安装与配置。一旦你有了镜像,你需要的是一些服务器去运行它。 对于提供服务器这种需求,编排工具会比配置管理工具更适合做此类工作。 编程式语言与声明式语言Chef 和 Ansible 希望你去一步步编写程序以达到最终所期望的状态。 Terraform、CloudFormation、SaltStack、Puppet 希望你去声明最终想要的资源与资源的状态,工具本身会自动分析达到想要的状态需要进行怎样的操作。 在使用编程式语言时,工具不会获取历史的状态,所以我们需要考虑的更多以达到与之前版本的兼容。 并且使用编程式语言会导致代码库变得越来越庞大,不利于人们理解与代码的复用。不过声明式的语言的表达能力是较为欠缺的,例如我们需要基础设施的滚动升级时,声明式的语言是很难满足要求的。 为此 Terraform 提供了一些基础服务,例如输入变量,输出变量,在销毁之前创建等。 客户端服务器架构与客户端架构Chef、Puppet、SaltStack 在默认情况下都使用了客户端服务器架构。客户端(可能是 Web UI 或 CLI 工具)是用来发出命令(例如 “deploy X”)的东西。 这些命令到达一个服务器,它负责执行你的命令并存储系统的状态。要执行这些命令,服务器会与 agent 进行通信,agent 必须在要配置的每个服务器上运行,这有几个缺点: 您必须在每台服务器上安装并运行额外的软件。 为了配置管理,您必须部署额外的服务器(甚至是一组服务器以实现高可用性)。 由于客户端,服务器和代理都需要通过网络进行通信,因此您必须为其打开额外的端口,并配置相互验证。 这些配置会引入大量不同类型的故障,当收到错误警告时,必须要弄清楚是哪一部分出现了故障。
CloudFormation 也是客户端 / 服务器架构,但 AWS 透明地处理所有的服务器细节,作为最终用户,您只需要考虑客户端代码。Ansible 客户端则通过 SSH 直接连接到您的服务器。 Terraform 使用云提供商 API 来配置基础架构,因此除了您已经使用云提供商之外,没有新的身份验证机制,并且不需要直接访问您的服务器。
|