Terraform的理念是IaC,所以把基于HCL语言编写的Terraform配置信息也叫做Terraform代码。
Terraform代码同时支持HCL和JSON两种格式,详见Syntax,但本文讲解的语法是基于HCL而言的。
如下内容是构成Terraform代码的基本要素。
参数
如下代码示例:
image_id = "abc123"
在等号左边的就是参数名,在等号右边的就是参数值,参数值可以是一个表达式,也可以是字面量硬编码。
在参数赋值时Terraform会检查类型是否匹配,Terraform的某些类型之间存在隐式类型转换规则,如果无法执行隐式类型转换,不同的类型数据间赋值将会报错。
块
大括号{}
以及其中的内容是一个代码块,如下示例:
resource "aws_instance" "example" {
ami = "abc123"
network_interface {
# something
}
}
这是一个定义AWS Instance资源的块,resource
关键字表示这是一个定义资源的块,aws_instance
表示这是一个AWS EC2实例资源,example
可以理解为是一个块变量名。当然,也可以直接定义一个内嵌的块,如:network_interface
块。
在Terraform的规范中定义了多个顶级的块,如:resource
(服务资源,可执行CRUD),data
(数据资源,只能用于读取数据),variable
(变量),output
(输出)等。
标识符
参数名,块类型名以及其他Terraform规范中定义的结构的名称,例如:resouce
,variable
等,都是标识符。
合法的标识符可以包含字符(a-z
,A-Z
),数字(0-9
),下划线(_
)以及减号(-
),但是标识符首字母不能是数字。
完整的标识符规则参考the Unicode identifier syntax。
注释
Terraform支持三种注释方式:
# 单行注释
// 单行注释
/**
多行注释
*/
默认情况下单行注释优先使用#
,格式化工具会自动把//
替换成#
。
编码及换行
Terraform代码文件必须始终是UTF-8
编码。
Terraform兼容Unix风格的换行符LF
以及Windows风格的换行符CR&LF
,推荐使用Unix风格的换行符。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,在下面评论区告诉我^_^^_^