Terraform 项目初始化

LinuxBeginner
立即练习

介绍

Terraform 是 HashiCorp 创建的一个流行的开源基础设施即代码(IaC)工具。它允许你使用声明性配置文件来定义和配置基础设施资源。

在任何新的 Terraform 项目中运行的第一个命令是 terraform init。这个命令至关重要,因为它为使用 Terraform 准备你的工作目录。它执行几个关键操作:

  • **后端初始化 (Backend Initialization)**:配置状态存储后端。
  • **提供程序插件安装 (Provider Plugin Installation)**:扫描你的配置文件,确定需要哪些提供程序(provider),并从 Terraform Registry 下载它们。
  • **模块安装 (Module Installation)**:下载你的配置中引用的任何模块。

在这个 Lab 中,你将学习初始化新 Terraform 项目的基本流程。你将创建一个项目目录,定义一个简单的配置文件,并使用 terraform init 来下载所需的提供程序插件。

为 Terraform 项目创建一个新目录

在这一步中,你将为你的新 Terraform 项目创建一个专用的目录。将每个 Terraform 项目保存在其自己的目录中是一种最佳实践,可以避免冲突并保持配置的组织性。你所有的操作都将在 ~/project 目录下进行。

首先,创建一个名为 terraform-init-lab 的新目录。

mkdir terraform-init-lab

接下来,进入新创建的目录。这将是你本次 Lab 剩余操作的工作目录。

cd terraform-init-lab

你的终端提示符现在应该显示你位于 ~/project/terraform-init-lab 目录下。

在项目目录中创建 main.tf 文件

在这一步中,你将为你的项目创建主要的配置文件。Terraform 配置文件使用 .tf 扩展名,并使用 HashiCorp Configuration Language (HCL) 编写。按照惯例,主要的配置文件通常命名为 main.tf

在你的 terraform-init-lab 目录内,使用 touch 命令创建一个名为 main.tf 的空文件。

touch main.tf

你可以通过列出目录内容来验证文件是否已创建。

ls

你应该在输出中看到 main.tf 文件。

main.tf

在 main.tf 中定义本地 provider 配置

在这一步中,你将向 main.tf 文件中添加配置代码。这段代码将告诉 Terraform 需要下载和使用哪个 Provider。Provider 是一个插件,它允许 Terraform 与特定的 API(例如云 Provider 或 SaaS 服务)进行交互。

对于本次实验,我们将使用 local Provider,它允许你管理本地文件。这是一个很棒的学习用 Provider,因为它不需要任何云凭证(credentials)。

使用 nano 文本编辑器打开 main.tf 文件。

nano main.tf

现在,将以下代码块复制并粘贴到 nano 编辑器中。这个 terraform 块指定了项目所需的 Provider。

terraform {
  required_providers {
    local = {
      source  = "hashicorp/local"
      version = "2.4.0"
    }
  }
}

此配置告诉 Terraform:

  • required_providers: 我们正在声明此项目所需的 Provider。
  • local: 我们为该 Provider 指定的本地名称。
  • source: Terraform Registry 中该 Provider 的全局地址,即 hashicorp/local
  • version: 要使用的 Provider 的具体版本。

粘贴代码后,按 Ctrl+O 保存文件,然后按 Enter,最后按 Ctrl+X 退出 nano

运行 terraform init 初始化项目

在这一步中,你将运行 terraform init 命令。有了 Provider 配置之后,Terraform 现在就知道需要做什么来初始化项目了。它将读取 main.tf 文件,找到 required_providers 块,并从 Terraform Registry 下载指定版本的 hashicorp/local Provider。

确保你仍然在 terraform-init-lab 目录中,然后运行初始化命令。

terraform init

你将看到输出信息,表明 Terraform 正在初始化后端(backend)和 Provider 插件。成功的初始化将以成功消息结束。

Initializing the backend...

Initializing provider plugins...
- Finding hashicorp/local versions matching "2.4.0"...
- Installing hashicorp/local v2.4.0...
- Installed hashicorp/local v2.4.0 (signed by HashiCorp)

Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

检查 .terraform 目录以下载的插件

在这一步中,你将验证 terraform init 是否已成功下载 Provider 插件。该命令会在你的项目文件夹中创建一个名为 .terraform 的隐藏目录,用于存储这些插件和其他初始化数据。

首先,列出所有文件和目录,包括隐藏文件,以查看 init 命令创建的新产物。

ls -a

你应该在输出中看到 .terraform 目录和 .terraform.lock.hcl 文件。锁定文件记录了初始化期间选择的 Provider 版本。

.  ..  main.tf  .terraform  .terraform.lock.hcl

现在,让我们检查 .terraform 目录的内容,查看已下载的 Provider。你可以使用 tree 命令以清晰的层级结构查看。

tree .terraform

输出将显示 Provider 插件存储的目录结构。你可以看到从 Registry 下载的 local Provider 的可执行文件。

.terraform
└── providers
    └── registry.terraform.io
        └── hashicorp
            └── local
                └── 2.4.0
                    └── linux_amd64
                        └── terraform-provider-local_v2.4.0_x5

6 directories, 1 file

这确认了 terraform init 已使用必要的 Provider 成功设置了你的项目。

总结

恭喜你!你已成功完成了关于 Terraform 项目初始化的这个实验(Lab)。

在这个实验中,你学习了启动新 Terraform 项目的基本第一步。你实践了:

  • 为 Terraform 项目创建一个专用的目录。
  • main.tf 配置文件中定义所需的 Provider(提供者)。
  • 运行 terraform init 命令来准备项目。
  • 验证 Provider 插件是否已下载到 .terraform 目录中。

项目初始化完成后,你现在已准备好进入 Terraform 工作流程的下一步,例如编写资源定义,并使用 terraform planterraform apply 来管理你的基础设施。