Provide Best Programming Tutorials

Terraform是什么

官方定义

Terraform 是一种开源基础设施即代码软件工具,可提供一致的 CLI 工作流来管理数百个云服务。 Terraform 将云 API 编码为声明性配置文件。这是它的官网:https://www.terraform.io

官方的定义听起来有些云里雾里,用通俗点话说,

Terraform 是一个自动化的基础设施管理工具。

为了彻底理解这个解释的含义,这里面有个核心的概念我们要搞清楚—–基础设施。

基础设施

所谓的基础设施,在我们生活里是指为社会生产和居民生活提供公共服务的物质工程设施,是用于保证国家或地区社会经济活动正常进行的公共服务系统。

在IT世界里,就是承载我们程序运行的服务器,路由器,交换机等。现在是一个云的时代,基础设施上云是一个潮流也是大势所趋,所以像阿里云,AWS,Azure这些云服务供应商就取代了传统的机房成为了我们的基础设施。有了他们,我们不再需要自己购买硬件设备,我们只需要网络,在浏览器里通过界面点击鼠标,就可以创建一个服务器,数据库,或者是网络交换机等。

讲到这里,你就应该明白基础设施的含义了。

为什么需要Terraform

接下来,就要讲讲为什么我们需要Terraform。

在它出现之前,我们管理基础设施的方法无非就是两种:

  1. 通过图像化界面来手动的管理。比如AWS的控制台里,人们可以手动的点击界面来操作,创建和维护我们的基础设施。不过这种方式的缺陷也是显而易见的,诸如人工操作效率低下,易出错和无法管理大规模的基础设施,是想一下,如果有一万台机器让你去管理运维,是不是会疯掉?
  2. 通过自定义的脚本来管理。人们可以自己去写shell脚本或者是python脚本,来维护基础设施。这种方式相较于手动的方式是一种进步。但是缺陷依旧明显。比如,脚本语言不统一。每个公司,甚至每个团队都会有自定义的脚本,每个脚本可能使用不同的语言来编写,运维和管理是很困难的。另外,脚本语言是一种面向过程的语言,为了编写脚本,你不得不了解你所操作的基础设施的细节,这往往非常费时费力。

Terraform解决了上面提到的两个问题。

首先,它提供了统一的语言,这样大家就有统一的语言,就好比英语是国际语言一样,这就解决了上面提到的第一个问题。

另外,它是一种声明式的语言。所谓的声明式,意思是我们只需要告诉Terraform我们想干什么,而不必关心怎么干。比如说,我想创建一个AWS EC2的实例,我只需要告诉Terraform我要创建它,至于怎么创建,就留给Terraform来解决就好。

比如下面的代码,就是使用Terraform来创建AWS EC2的实例。我们通过resource 告诉Terraform我们要创建一个资源,这个资源是aws_instance,我们给他起名字叫example。然后指定实例的镜像ami和实例的规格instance_type。Terraform就会按照我们的需求把资源创建好。很酷,是不是?

resource "aws_instance" "example" {
  ami           = "ami-2757f631"
  instance_type = "t2.micro"
}

这就解决了上面提到的第二个问题。

这就是Terraform的一个大致介绍,看到这里,你是不是了解了Terraform的作用了呢?

Provider

在基础设施这个层面,Terraform支持的种类非常多,我们前面只是拿AWS举例。常见的云计算基础设施包括AWS,Azure,Aliyun,Google Cloud都是支持的,另外还有其他几百种基础设施,并不仅仅局限在云计算层面,像VMware这种软件也是基础设施,Terraform也是支持的。

Terraform 是通过Provider这个概念来支持各种基础设施的,这个概念是它自己定义的,后面会有专门的文章介绍。

你可以在下面的链接中找到目前 Terraform 所支持的基础设施。

https://registry.terraform.io/browse/providers

总结

总结一下,本文给大家讲述了Terraform、基础设施的基本概念,以及他们之间的关系,希望大家有所收获。

视频课程

如果大家希望了解更多Terraform的内容,可以学习我的在线课程:

Leave a Reply

Close Menu