Terraform

Terraform (二):基本概念

2020-03-10  本文已影响0人  WanjinYoung

参考文档:阿里云栖社区
官方文档: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
   ...
}

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

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

上一篇 下一篇

猜你喜欢

热点阅读