美文网首页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