Terraform简介

2021-06-19  本文已影响0人  Raphael_yf

简介

Terraform的定义

Terraform的特点

关键概念

Configuration:基础设施的定义和描述

基础设施即代码,其中的代码Code就是对基础设施资源的代码定义和描述,通过代码表达需要管理的资源。

所有资源的代码描述都是定义在一个以.tf结尾的文件,用于terraform的加载和解析。这个文件就称之为“Terraform模板”或者“configuration”

Provider: 基础设施管理组件

Terraform常用于公有云上基础设施的管理,如虚拟机、网络、容器等。Provider就是与OpenAPI交互的后端驱动,Terraform通过Provider完成对基础设施资源的管理。

每个基础设施提供商,aliyun、aws等都需要提供一个provider来实现对自家资源的统一管理。目前我们使用的阿里云对应的provider就是alicloud。

在运行环境中,Terraform和Provider是两个独立存在的package,执行Terraform时,会根据用户模板中指定的Provider或者resource/datasource的标志自动下载模板使用的provider,并放在当前目录下的.terraform隐藏目录下。

Resource:基础设施资源和服务的管理

在Terraform中,一个具体的资源或者服务称为resource,比如一个ECS,一个SLB、一个域名解析记录。每个特定的resource包含了若干可用于描述对应资源或服务的属性字段。通过这些字段来定义一个完整的资源或者服务,比如dns的domain_name、ttl等。

如下定义一个resource:

|
resource "alicloud_alidns_record" "dns701438486351555584" {
domain_name = "test.com"
line = "default"
priority = 0
rr = "mobile.api"
status = "ENABLE"
ttl = 600
type = "A"
value = "1.1.1.4"
}
|

Data Source:基础设施资源和服务的查询

Data Source提供查询资源的功能,每个data source实现对一个资源的动态查询,其结果可以认为是动态变量,只有运行时才知道其值。
|
data "alicloud_alidns_records" "records_ds_uni" {
domain_name = "test.com"
type = "A"
line = "unicom"
rr_regex = "mobile*.api"
output_file = "records-uni.txt"
}
|

如上定义一个records_ds_uni的资源,其通过data引用,查询test.com域名下,解析记录匹配mobile*.api的,解析线路为unicom的所有A记录,并输出到records-uni.txt文本中。

state:保存资源关系以及属性文件的数据库

Terraform创建和管理所有资源都保存在自己的数据库上,这个数据库是一个名为terraform.tfstate文件,在terraform中称之为state,默认存放在执行命令的本地目录中。

在执行terraform命令时,terraform会利用state文件与模板文件进行diff对比,如果出现不一致,terraform将按照模板中的定义重新创建,或者修改资源,直到没有diff。所以这个文件非常重要,如果损坏,terraform将认为已创建的资源被破坏,或者需要重建。当然实际的云资源不会收到影响。

Backend:存储state文件的载体

因terraform创建资源后,会将资源属性保存在state文件中,而这个文件可以放本地,也可以存放在远端,实现state和模板代码的分离,这个存放state文件的载体就是backend。

Backend分为本地和remote两类,默认为本地。目前已支持多达13中远端存储方案,如console、etcd、oss等,可以降低多人协作对state维护的成本,也可以保障数据的安全性。

Provisioner:在机器上执行操作的组件

用来在本地机器或者登录远程主机执行相关的操作,如local-exec在本地执行命令,chef用来在远程主机安装、配置、执行chef client,remote-exec用来登录远程主机执行命令。

通常与provider搭配实现,provider创建资源后,使用provisioner在创建的资源上执行各种操作。

常用命令

用于对模板定义的资源进行预览。如预览当前模板中定义的资源是否符合预期,如果存在state文件则展示diff结果,即变更的内容。

概念和命令的理解可以参考下图:

image

操作生命周期

image

资源编排的动作的生命周期如上,其中左侧为Terraform系统系统的能力,右侧provider、provisioner为厂商提供。

当执行terraform apply命令时:

  1. terraform唤醒进程,初始化backend(默认为local-file);
  2. 解析用户定义的模板文件,并获取最新的资源状态,进行对比;
  3. 构建DAG,将所有编排动作依次发送给provider;
  4. provider调用云API管理云资源
  5. 将返回的结果写回state
上一篇 下一篇

猜你喜欢

热点阅读