Terraform - Infrastructure as Code什么是 Terraform编程
Terraform 是一个安全、高效地部署、更改、版本化基础设施和应用程序的工具,能够用来管理多层次的资源。从上层的软件配置到底层的网络、系统配置均可以使用 Terraform 统一进行管理。安全
Terraform 用配置文件来描述一个应用。 Terraform 会将配置文件与当前环境对比后,生成一个执行计划,这个计划会列出为了达到配置文件中定义的状态所须要执行的操做,而后执行计划以达到指望的状态。服务器
Terraform 经过插件机制管理不一样的资源提供者,以此来接入各类资源,如虚拟机,存储,网络和各类应用服务。网络
Terraform 的主要特性Infrastructure as Code架构
将基础架构使用配置语法进行描述,这可让数据中心的构建计划能够像其余代码同样进行版本化和追踪。工具
Execution Plansspa
Terraform 有一个规划步骤,它生成一个执行计划。执行计划显示当您调用应用程序时 Terraform 将执行的操做。使用这个功能能够保证操做基础设施时不发生意外插件
Resource Graph代理
Terraform 建立了一个全部资源的视图。这使得 Terraform 能够并行化没有依赖的建立与修改。orm
所以,Terraform 能够高效地构建基础架构。操做人员也能更加了解环境的结构。
Change Automation
Terraform 会自动的分析什么是须要修改的,从而避免了许多可能的人为错误。
Terraform vs. Other Software
与 Terraform 相似的 Infrastructure as Code 工具大概有下面几种:
Chef:
Ansible:
下面将从几个方面来讲明 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 来配置基础架构,所以除了您已经使用云提供商以外,没有新的身份验证机制,而且不须要直接访问您的服务器。