参考文档:阿里云栖社区
官方文档:Terraform官网
1. Configuration:基础设施的定义和描述
“基础设施即代码(Infrastructure as Code)”,这里的Code就是对基础设施资源的代码定义和描述,也就是通过代码表达我们想要管理的资源。
// 块存储资源
resource "myprovider_blockstorage_volume_v1" "main" {
server_id = ""
volume_name = "vol-name"
volume_type = ""
volume_size = 20
}
Terraform使用一个以tf
结尾的文件来描述基础资源,其中可以包括许多resource块。我们称这个文件为tf
模板
2. Provider:基础设施管理组件
Provider 是一个直接与API进行交互的后端驱动,Terraform就是通过Provider来完成对基础设施资源的管理,不同的厂商会提供自己的Provider,只要拥有一套Provider就可以通过Terraform来管理。
当我们的电脑上面成功安装了Terraform后我们在运行Terraform的时候,Terraform会自动下载指定的Provider,并将其放在执行目录下的一个隐藏目录
.terraform
下。例如:
provider "myprovider" {
user_name = "admin"
tenant_name = "admin"
password = var.password
auth_url = var.auth_url
region = var.region
cacert_file = var.cacert_file
}
3. Resource:基础设施资源和服务的管理
在Terraform之中每一个具体的基础资源或者一个服务都称之为一个resource例如云主机,vpc,LB 等等。每个resource都有自己独有的属性字段,我们就是通过这些属性字段来定义基础资源的。
resource "myprovider_compute_instance_v1" "default" {
// 定义一个云主机实例资源
name = ""
image_id = ""
flavor_id = ""
count = 3
...
}
-
myprovider_compute_instance_v1
表示 资源类型,我们需要定义一个这个名称的.go
代码,完善其中的Create、Read、Update、Delete等方法,来实现对具体资源的管理。 -
default
表示 资源名称 是一个具体的资源实例的名称,必须模块内唯一。 -
{}
里面的内容就是这个云主机的具体属性。 -
count
参数可以批量创建多个主机。
4. Data Source:基础设施资源和服务的查询
- datasource 实现资源查询。
- 在定义resource时用来向参数传值,这样底层数据发生变化上层不用修改代码。
Data Source 通过data
来描述,一般采用datasource_*.go
的形式来编写代码只实现Read功能。
data "flavor" "default" {
cpu = 4
memory = 4
disk = 20
}
resource "instance" "web" {
flavor_id = data.flavor.default.flavors[0].id
name = "instance-0"
...
}
5. State:保存资源关系及其属性文件的数据库
Terraform 用来保存和管理资源数据的数据库,本质上是一个名为terraform.tfstate
的文件,这就是所谓的state
(状态)文件,state
文件十分重要,我们在terraform plan
时会与.tf
文件中的内容做diff
,倘若该文件损坏或者修改Terraform
会认为用户想要执行资源删除/修改,Terraform
会一直是一个有状态的情形,直到完全没有diff
.
注:在拷贝
.tf
模板文件时也需要拷贝state
文件,可以使用远端存储服务来存储state
文件,这样就实现了state
和.tf
文件的分离.官方文档Remote State
6.Backend:存放 State 文件的载体
远端存储设备,用来存储state
文件的,用户可以存储在本地也可以存储在远端,存储在远端有利于多人开发维护。
7. Provisioner:在机器上执行操作的组件
Provisioner 通常用来在本地机器或者登陆远程主机执行相关的操作,如 local-exec
provisioner 用来执行本地的命令, chef
provisioner 用来在远程机器安装,配置和执行chef client, remote-exec
provisioner 用来登录远程主机并在其上执行命令。
Provisioner 通常跟 Provider一起配合使用,provider用来创建和管理资源,provisioner在创建好的机器上执行各种操作。
Ref :
reference1
网友评论