简介
了解HCL及其主要组件。
概述
使用 Terraform 部署基础设施的第一步是通过一系列配置文件来定义基础设施。编写 Terraform 配置文件可以采用以下两种格式之一:
- JSON
- HCL
JSON
我们可以使用 JSON 编写 Terraform 配置文件,但其语法可能较为复杂且繁琐。以 JSON 格式编写的配置文件通常使用 .tf.json 作为文件扩展名。以下是使用 JSON 格式编写的示例配置:
1{ 2 "resource": { 3 "aws_instance": { 4 "sample_instance": { 5 "instance_type": "t2.micro", 6 "ami": "ami-0a606d8395a538502" 7 } 8 } 9 } 10}
HCL
HCL 是由 HashiCorp 开发的一种语言,旨在简化配置文件的编写并提升可读性。使用 HCL 编写的配置文件以 .tf 为文件扩展名。相比标准的 JSON 格式,HCL 更加灵活。以下是使用 HCL 格式编写的示例配置:
1resource "aws_instance" "sample_instance" { 2 instance_type = "t2.micro" 3 ami = "ami-0a606d8395a538502" 4}
上述两种配置格式均用于在 AWS 上创建一个 EC2 实例,并通过指定 instance_type 和 ami 这两个必要参数来完成资源配置。
HCL 子语言
使用 HCL 格式编写的配置文件通常由三个 HCL 子语言组成,分别是:
- 结构子语言:包含主要的配置结构,由 HCL 的主体、块和属性构成。
- 表达式子语言:用于直接或基于其他值推导出属性的取值。
- 模板子语言:用于通过组合字符串和其他值生成新的字符串。
简单 HCL 配置文件示例解析
下面是一个简单的 HCL 配置文件示例,用于在 AWS 上部署一个 VPC 资源。
下图展示了以下主要组成部分:
- 保留关键字
- 标签 1
- 标签 n
- 资源块的开始
- 属性键
- 属性值
- 资源块的结束
任何 HCL 配置文件的主要组成部分包括:
- 属性(Attributes):用于将值赋给名称。常见的属性包括
inputs、download_dir、prevent_destroy、skip和iam_role。 - 块(Blocks):包含资源类型和自定义标签。常见块包括
terraform、resource、provisioner、output、variable、locals、data、module等。 - 主体内容(Body content):由多个块和属性组成的集合。
实践演练
我们将逐步演示如何为 AWS 上的 VPC 资源编写 HCL 配置。
- 首先,定义资源块,如下所示:
Terraform 资源块
1resource "aws_vpc" "my_vpc" { 2 3}
注意:该资源块包含两个标签,分别为 aws_vpc 和 my_vpc,其中 aws_vpc 是 AWS 提供商识别的资源名称,my_vpc 是我们为该资源自定义的名称。
- 在资源块内部,添加两个必要的属性键,如下所示:
VPC 属性
1 cidr_block = "10.0.0.0/16" 2 instance_tenancy = "default"
注意:我们有两个属性及其对应的值。第一个属性键为 cidr_block,值为 10.0.0.0/16;第二个属性键为 instance_tenancy,值为 default。
- 在属性之后,添加一个标签,如下所示:
在 Terraform 中标记资源
1 tags = { 2 Name = "dev" 3 }
对于标签,我们仅使用键值对 Name = "dev" 对资源进行标记。打标签是一种有效的方式来分类和组织我们的资源。
最终 main.tf 文件中的代码块应如下所示:
VPC 资源块
1resource "aws_vpc" "my_vpc" { 2 cidr_block = "10.0.0.0/16" 3 instance_tenancy = "default" 4 5 tags = { 6 Name = "dev" 7 } 8}
- 使用
terraform init命令初始化 Terraform 后端。 - 使用
terraform plan命令查看执行计划。 - 使用
terraform apply命令创建 VPC 资源,并在提示时输入 “yes”。 - 使用
terraform destroy命令清理已创建的 VPC 资源,并在提示时输入 “yes”。