1.4.2.1. 配置语法
这里讲的仍然是HCL的语法,但我们只讲一些关键语法。如果读者有兴趣了解完整信息可以访问HCL语法规约
1.4.2.1.1. 参数
参数赋值就是将一个值赋给一个特定的名称:
image_id = "abc123"
等号前的标识符就是参数名,等号后的表达式就是参数值。参数赋值时Terraform会检查类型是否匹配。参数名是确定的,参数值可以是确定的字面量硬编码,也可以是一组表达式,用以通过其他的值加以计算得出结果值。
1.4.2.1.2. 块
一个块是包含一组其他内容的容器,例如:
resource "aws_instance" "example" {
ami = "abc123"
network_interface {
# ...
}
}
一个块有一个类型(上面的例子里类型就是resource)。每个块类型都定义了类型关键字后面要跟多少标签,例如resource块规定了后面要跟两个标签——在例子里就是aws_instance
和example
。一个块类型可以规定任意多个标签,也可以没有标签,比如内嵌的network_interface
块。
在块类型及其后续标签之后,就是块体。块体必须被包含在一对花括号中间。在块体中可以进一步定义各种参数和其他的块。
Terraform规范定义了有限多个顶级块类型,也就是可以游离于任何其他块独立定义在配置文件中的块。大部分的Terraform功能(例如resource, variable, output, data等)都是顶级块。
1.4.2.1.3. 标识符
参数名、块类型名以及其他Terraform规范中定义的结构的名称,例如resource、variable等,都是标识符。
合法的标识符可以包含字母、数字、下划线(_)以及减号(-)。标识符首字母不可以为数字。
要了解完整的标识符规范,请访问Unicode标识符语法。
1.4.2.1.4. 注释
Terraform支持三种注释:
#
单行注释,其后的内容为注释//
单行注释,其后的内容为注释/*
和*/
,多行注释,可以注释多行
默认情况下单行注释优先使用#。自动化格式整理工具会自动把//替换成#。
1.4.2.1.5. 编码以及换行
Terraform配置文件必须始终使用UTF-8编码。分隔符必须使用ASCII符号,其他标识符、注释以及字符串字面量均可使用非ASCII字符。
Terraform兼容Unix风格的换行符以及Windows风格的换行符,但是理想状态下应使用Unix风格换行符。