Logo
Section 1 / 8

简介

了解HCL及其主要组件。

导入

简介

了解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 示例配置

任何 HCL 配置文件的主要组成部分包括:

  1. 属性(Attributes):用于将值赋给名称。常见的属性包括 inputs、download_dir、prevent_destroy、skip 和 iam_role。
  2. 块(Blocks):包含资源类型和自定义标签。常见块包括 terraform、resource、provisioner、output、variable、locals、data、module 等。
  3. 主体内容(Body content):由多个块和属性组成的集合。

实践演练

我们将逐步演示如何为 AWS 上的 VPC 资源编写 HCL 配置。

  1. 首先,定义资源块,如下所示:

Terraform 资源块

1resource "aws_vpc" "my_vpc" { 2 3}

注意:该资源块包含两个标签,分别为 aws_vpc 和 my_vpc,其中 aws_vpc 是 AWS 提供商识别的资源名称,my_vpc 是我们为该资源自定义的名称。

  1. 在资源块内部,添加两个必要的属性键,如下所示:

VPC 属性

1 cidr_block = "10.0.0.0/16" 2 instance_tenancy = "default"

注意:我们有两个属性及其对应的值。第一个属性键为 cidr_block,值为 10.0.0.0/16;第二个属性键为 instance_tenancy,值为 default。

  1. 在属性之后,添加一个标签,如下所示:

在 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}
  1. 使用 terraform init 命令初始化 Terraform 后端。
  2. 使用 terraform plan 命令查看执行计划。
  3. 使用 terraform apply 命令创建 VPC 资源,并在提示时输入 “yes”。
  4. 使用 terraform destroy 命令清理已创建的 VPC 资源,并在提示时输入 “yes”。

Terraform 的基本概念

Terraform 变量:本地变量与环境变量