美文网首页Terraform
Terraform (二):基本概念

Terraform (二):基本概念

作者: WanjinYoung | 来源:发表于2020-03-10 14:42 被阅读0次

参考文档:阿里云栖社区
官方文档: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来管理。

image
当我们的电脑上面成功安装了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

相关文章

网友评论

    本文标题:Terraform (二):基本概念

    本文链接:https://www.haomeiwen.com/subject/zuipdhtx.html