【Terraform】一文了解特点、生命周期、基础语法

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文同时参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。

本文重点讲Terraform的特点和生命周期,以及基础语法。

一、显著特点

Terraform作为基础设施即代码的先驱者,有很多领先的思想,下面是它的一些主要特点。

  • 基于IaC(基础设施即代码,Infrastructure as Code)的设计,可以将基础设施以一种领域特定语言(HasiCorp的HCL/DCL)描述出来,消除了在基础设施自动化时描述语义上的歧义,同时减轻了人为因素造成的不确影响。
  • Terraform 在执行编排动作前,会生成一份可读性良好的执行计划,关键基础设施的变更可以得到充分审查,保证了基础设施的可靠性
  • 基于 DAG(有向无环图,Directed Acyclic Graph)描述资源与资源之间的关系,由于 DAG 良好的拓扑性质,当资源属性与资源关系发生改变时,变更动作将被充分并行地执行

二、生命周期

img

根据示例图,左侧的部分是 Terraform 本身提供的能力,右侧是由云厂商提供的能力。图上一共包含三个主要的线程,包括Terraform 核心进程Provider 进程Provisioner 进程。三个线程的能力分别如下:

  • Terraform 核心进程:负责资源定义文件,构建有向无环图,管理状态存储;
  • Provider 进程:即提供资源编排能力的进程,包括由云厂商实现的能力(比如 UCloud),和应用程序提供的能力(比如 TLS)等;
  • •Provisioner 进程:即提供资源编排后处理操作的进程,比如执行 Shell 命令,上传文件等;

三、基础语法规则

3.1 类型

原始类型(三种类型可隐式转换)

  • string

    其代表一组Unicode字符串,例如:"hello"。

  • number

    其代表数字,可以为整数,也可以为小数

  • bool

    逻辑判断,true or false

复杂类型

集合类型

  • list(连续集合)
  • map(字典类型)
  • set(集合类型,代表一组不重复的值)

结构化类型

  • object(名称+属性)

    • 格式:object({age=number, name=string})
    • 例子:object({age=number,name=string}),赋值{ age=18, name="john" }
  • tuple(类似于list,但每个元素都可具有独立的类型)

特殊类型

  • any(占位符,可以用于赋值任何类型)
  • null(无类型,表示数据缺失)

3.2 配置语法

参数赋值

将一个值赋给一个特定的名称,例子:image_id="abc123"

说明:一个块是包含一组其它内容的容器,块可以嵌套

  • 一个块类型可以规定任意多个标签,也可以没有标签
  • 内置了顶级块,可独立定义在配置文件中,例如resource, variable, output, data

img

注释

说明:注释掉不解释执行

  • 单行注释,其后的内容为注释,默认优先使用这个!
  • // 单行注释,其后的内容为注释
  • /* 和 */,多行注释,可以注释多行

编码格式

  • 配置文件必须始终使用UTF-8编码
  • 分隔符必须使用ASCII符号
  • 其他标识符、注释以及字符串字面量均可使用非ASCII字符

标识符

说明:参数名、块类型名以及其他Terraform规范中定义的结构的名称

  • 合法的标识符可以包含字母、数字、下划线(_)以及减号(-)
  • 标识符首字母不可以为数字

猜你喜欢

转载自juejin.im/post/7019109236957249544