Terraform简介

基础设施即代码(Infrastructure as Code),是指将云资源、服务或操作步骤以代码的形式定义在模板中,借助编排引擎,实现资源的自动化管理。而这也是资源编排最高效的实现模式。下面,我们就来认识一下Terraform这个IaC工具。

一、我们为什么需要Terraform

在传统运维模式下,业务上线需经过设备采购、机器上架、网络搭建和系统安装等准备阶段。随着云计算的兴起,各大公有云厂商均提供了非常友好的交互界面,用户通过一个浏览器就可以按需采购各种云资源,从而快速实现业务架构的搭建。

然而,随着业务架构的不断扩展,云资源采购的规模和种类也会不断增加。当我们需要快速采购大量不同类型的云资源时,Web控制台上大量的交互操作反而会降低云资源的采购效率。此外,工作成果的不可复制性,带来的是夸Region和跨云平台场景下的重复劳动。

作为用户,在使用公有云时,我们关心的是资源的操作结果,并不关心资源的操作步骤。如果有一份完整的云资源采购清单,这张清单上清楚的记录了所需要购买的云资源的种类、规格、数量以及各云资源之间的关系,然后一键完成购买,并且当业务需求发生变化时,只需要变更清单就可以实现对云资源的快速变更,那么效率就会提高很多。而这在云计算中就是资源编排,目前很多云厂商已经提供了资源编排能力,比如阿里云的ROS、AWS的CloudFormation等。

然而,各云厂商自家的云编排服务带来的是高昂的学习成本、低效的代码复用率和复杂的多云协同工作流程。每一种服务仅限于管理自家的云平台,无法满足对多个云平台,多种层级(如IaaS,PaaS)资源的统一管理。

是否可以使用统一的编排工具,共用一套语法实现多云平台的统一管理呢?

二、Terraform是什么

Terraform是由Hashicorp公司于2014年推出的一个开源项目,是一个典型的IaC工具。在Terraform中,Infrastructure是一个很广泛的抽象,它几乎涵盖了云平台上所有可以被管理的资源和服务,如网络资源、计算资源、存储资源、数据库资源等。

Terraform与各云厂商自家的资源编排服务(如阿里云的ROS、AWS的CloudFormation)相比,具有如下几个特点:

  • 开源。从诞生之初,Terraform就是一个开源项目,任何开发者都可以对其贡献代码。
  • 多云管理。用户只需学习统一的Terraform语法,选择各云厂商提供的provider,定义相应的资源模板即可管理多个云平台上的资源。
  • 面向客户端。在一台机器上安装好Terraform,编写好相应的资源模板后,就可以通过几个简单的Terraform命令实现对云资源的一键管理,而无需与API、SDK等方式进行集成。

三、Terraform vs Ansible

目前,市场上的IaC工具大体可以分为两类:

  • 配置管理类,典型代表是Ansible。
  • 资源编排类,典型代表是Terraform。

我们对Ansible可能更加熟悉,并且认为它也能完成Terrform的工作。比如,阿里云的Ansible Module同样可以实现对阿里云VPC、ECS、SLB等云资源的配置和管理。但我们需要知道的是,两者存在很大的差别:

  • 使用场景不同。配置管理工具侧重于操作系统级别的配置和管理,比如,软件的安装、配置,服务的启停等,其目的是为了实现对操作系统及其上应用的管理;而资源编排工具侧重于基础设施整体资源栈(计算、网络、存储等)的配置和管理。
  • 工作模式不同。资源编排是声明式的,它只关心最终的操作结果,因为作为用户,我们只关心定义的资源是否都已经创建了。如果结果和声明的不一致,就会触发变更操作;配置管理工具则是过程式的,它需要关心每一步的操作结果,在执行时通常是串行的,会按顺序自动化执行所有的操作。

四、参考

听说“一分钟就能部署阿里云ECS集群”?


Terraform简介
https://kuberxy.github.io/2021/01/04/Terraform简介/
作者
Mr.x
发布于
2021年1月4日
许可协议