Terraform 基础资源创建

LinuxBeginner
立即练习

简介

Terraform 是由 HashiCorp 开发的一款开源基础设施即代码(IaC)工具。它允许你使用声明式的配置语言来定义和提供数据中心基础设施。这意味着你只需在配置文件中描述你想要的基础设施状态,Terraform 就会自动计算出如何创建、更新或删除资源以匹配该状态。

Terraform 的核心工作流程包含三个主要阶段:

  1. 编写(Write):编写基础设施代码。
  2. 规划(Plan):在应用更改前预览变更。
  3. 应用(Apply):配置并管理你的基础设施。

在本实验中,你将通过创建一个非常简单的资源——本地文件,来完整体验这一工作流程。使用 local 提供程序(provider)是学习 Terraform 机制的绝佳方式,无需任何云服务商的凭证。你将定义一个文件、规划其创建过程、应用更改并验证结果。

在 main.tf 中定义 local_file 资源

在这一步中,你将首先在 Terraform 配置文件中定义一个资源。所有的 Terraform 配置都编写在以 .tf 为后缀的文件中。主配置文件通常命名为 main.tf

resource 代码块是声明基础设施对象的主要语法。它定义了一个给定类型(例如 local_file)且具有特定本地名称(例如 example)的资源。类型与名称的组合在模块内必须是唯一的。

首先,使用 nano 文本编辑器打开 ~/project 目录下的 main.tf 文件。

nano main.tf

现在,将以下代码添加到文件中。这段代码定义了一个类型为 local_file 的资源,并将其本地名称设为 example。目前,该资源块的内容为空。

resource "local_file" "example" {
}

添加代码后,按下 Ctrl+X,然后按 Y,最后按 Enter 键保存并退出 nano

在资源块中指定文件名和内容

在这一步中,你将向资源块添加参数,以指定你想要创建的文件的属性。参数是资源块内部定义其配置的键值对。对于 local_file 资源,最重要的两个参数是 filenamecontent

  • filename:要创建的文件的路径。
  • content:要写入文件中的内容。

再次使用 nano 打开 main.tf 文件。

nano main.tf

修改 local_file 资源块,加入 filenamecontent 参数,如下所示:

resource "local_file" "example" {
  content  = "Hello, Terraform!"
  filename = "${path.module}/hello.txt"
}

在这里,我们告诉 Terraform 在当前项目目录下创建一个名为 hello.txt 的文件。${path.module} 是一个特殊的 Terraform 表达式,它会解析为当前模块的路径,在本例中即 ~/project。文件的内容将是字符串 "Hello, Terraform!"。

按下 Ctrl+XYEnter 保存文件并退出 nano

初始化 Terraform 并预览变更

在这一步中,你将首先初始化 Terraform 项目,然后运行 terraform plan 命令来创建执行计划。

在规划任何变更之前,必须先初始化项目。terraform init 命令会扫描你的配置,下载所需的提供程序(本例中为 local_file),并设置后端。

在终端中,首先运行 terraform init

terraform init

初始化成功后,运行 terraform plan。该命令是 Terraform 工作流程中至关重要的一部分,因为它提供了变更的「预演」。它会向你展示 Terraform 将对基础设施执行的操作,而不会真正进行任何更改。这使你能够在应用之前审查并验证预期的操作。

terraform plan

Terraform 将读取你的配置文件并将其与基础设施的当前状态(目前为空)进行比较。随后,它会显示一份行动计划。你应该会看到类似下面的输出,表明将创建一个资源。

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  ## local_file.example will be created
  + resource "local_file" "example" {
      + content              = "Hello, Terraform!"
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "./hello.txt"
      + id                   = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

resource "local_file" "example" 旁边的 + 符号表示该资源将被创建。输出详细列出了将在新文件上设置的所有属性。

运行 terraform apply 创建资源

在这一步中,你将使用 terraform apply 命令来应用更改,从而真正创建文件。该命令会执行 terraform plan 输出中提出的操作。

默认情况下,terraform apply 会再次向你展示计划,并在继续之前要求交互式确认。为了使其非交互式运行(这对实验和自动化非常有用),你可以使用 -auto-approve 标志。

在终端中运行以下命令:

terraform apply -auto-approve

Terraform 现在将执行该计划。输出将首先再次显示计划,随后是应用过程的进度。完成后,你将看到一条确认消息。

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  ## local_file.example will be created
  + resource "local_file" "example" {
      + content              = "Hello, Terraform!"
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "./hello.txt"
      + id                   = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.
local_file.example: Creating...
local_file.example: Creation complete after 0s [id=42086c02e03bf671ddf621ed9922f52f2c7a605c]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

消息「Apply complete!」确认 Terraform 已成功按照你的配置定义创建了资源。

验证文件系统中的创建结果

在最后一步中,你将验证 Terraform 是否已按照指定在本地文件系统中成功创建了文件。由于你使用了 local_file 资源,结果就是项目目录中生成了一个真实的文件。

首先,使用 ls 命令列出当前目录下的文件。你应该能看到 hello.txt 和你的 Terraform 配置文件。

ls

预期输出:

hello.txt  main.tf  terraform.tfstate

接下来,使用 cat 命令显示新创建的 hello.txt 文件的内容。

cat hello.txt

你应该能看到你在 main.tf 中定义的内容。

Hello, Terraform!

这证实了你的 Terraform 配置已成功应用,并且资源已完全按照你在代码中定义的方式创建。

总结

恭喜!你已经成功完成了第一个 Terraform 项目。

在本实验中,你学习了 Terraform 的基本工作流程:

  1. 编写(Write):你在 main.tf 配置文件中定义了一个 local_file 资源。
  2. 规划(Plan):你使用了 terraform plan 在不进行任何更改的情况下预览了文件的创建过程。
  3. 应用(Apply):你使用了 terraform apply 执行计划并在本地文件系统中创建了文件。

这个创建本地文件的简单示例展示了基础设施即代码的核心力量。你在配置文件中声明了资源的期望状态,而 Terraform 则处理了实现该状态的逻辑。当你管理云端的虚拟机、网络和数据库等更复杂的基础设施时,同样的原则也适用。