简介
Terraform 是由 HashiCorp 创建的一款流行的开源基础设施即代码(IaC)工具。它允许你使用声明式配置语言来定义和配置基础设施资源。
在任何新的 Terraform 项目中,你运行的第一个命令通常是 terraform init。该命令至关重要,因为它会为 Terraform 的使用准备好工作目录。它会执行以下几个关键操作:
- 后端初始化:配置状态存储后端。
- 提供程序插件安装:扫描你的配置文件,确定需要哪些提供程序,并从 Terraform Registry 下载它们。
- 模块安装:下载配置中引用的任何模块。
在本实验中,你将学习初始化新 Terraform 项目的基本流程。你将创建一个项目目录,定义一个简单的配置文件,并使用 terraform init 下载所需的提供程序插件。
为 Terraform 项目创建新目录
在这一步中,你将为新的 Terraform 项目创建一个专用目录。将每个 Terraform 项目保存在各自的目录中是一种最佳实践,这样可以避免冲突并保持配置的条理性。你所有的操作都将在 ~/project 目录下进行。
首先,创建一个名为 terraform-init-lab 的新目录。
mkdir terraform-init-lab
接下来,进入刚创建的目录。这将是你本实验剩余部分的工作目录。
cd terraform-init-lab
你的终端提示符现在应该显示你已进入 ~/project/terraform-init-lab 目录。
在项目目录中创建 main.tf 文件
在这一步中,你将为项目创建主配置文件。Terraform 配置文件使用 .tf 扩展名,并使用 HashiCorp 配置语言(HCL)编写。按照惯例,主配置文件通常命名为 main.tf。
在 terraform-init-lab 目录下,使用 touch 命令创建一个名为 main.tf 的空文件。
touch main.tf
你可以通过列出目录内容来验证文件是否已创建。
ls
你应该能在输出中看到 main.tf 文件。
main.tf
在 main.tf 中定义本地提供程序配置
在这一步中,你将向 main.tf 文件添加配置代码。这段代码将告诉 Terraform 它需要下载并使用哪个提供程序。提供程序是一个插件,允许 Terraform 与特定的 API(如云服务商或 SaaS 服务)进行交互。
在本实验中,我们将使用 local 提供程序,它允许你管理本地文件。这是一个非常适合学习的提供程序,因为它不需要任何云凭证。
使用 nano 文本编辑器打开 main.tf 文件。
nano main.tf
现在,将以下代码块复制并粘贴到 nano 编辑器中。此 terraform 块指定了项目所需的提供程序。
terraform {
required_providers {
local = {
source = "hashicorp/local"
version = "2.4.0"
}
}
}
此配置告诉 Terraform:
required_providers:我们正在声明此项目所需的提供程序。local:我们为该提供程序指定的本地名称。source:提供程序在 Terraform Registry 中的全局地址,即hashicorp/local。version:要使用的提供程序的特定版本。
粘贴代码后,按 Ctrl+O,然后按 Enter 保存文件,最后按 Ctrl+X 退出 nano。
运行 terraform init 初始化项目
在这一步中,你将运行 terraform init 命令。有了提供程序配置,Terraform 现在知道初始化项目需要做什么。它将读取 main.tf 文件,找到 required_providers 块,并从 Terraform Registry 下载指定版本的 hashicorp/local 提供程序。
确保你仍处于 terraform-init-lab 目录中,然后运行初始化命令。
terraform init
你将看到指示 Terraform 正在初始化后端和提供程序插件的输出。初始化成功后,会显示一条成功消息。
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 是否已成功下载提供程序插件。该命令会在你的项目文件夹中创建一个名为 .terraform 的隐藏目录,用于存储这些插件和其他初始化数据。
首先,列出所有文件和目录(包括隐藏文件),以查看 init 命令创建的新产物。
ls -a
你应该能在输出中看到 .terraform 目录和 .terraform.lock.hcl 文件。锁文件记录了初始化期间选择的提供程序版本。
. .. main.tf .terraform .terraform.lock.hcl
现在,让我们检查 .terraform 目录的内容,查看已下载的提供程序。你可以使用 tree 命令来获取清晰的层级视图。
tree .terraform
输出将显示存储提供程序插件的目录结构。你可以看到从注册表中下载的 local 提供程序的可执行文件。
.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 已成功为你的项目设置了必要的提供程序。
总结
恭喜!你已成功完成了本次关于 Terraform 项目初始化的实验。
在本实验中,你学习了启动新 Terraform 项目的基本步骤。你练习了:
- 为 Terraform 项目创建专用目录。
- 在
main.tf配置文件中定义所需的提供程序。 - 运行
terraform init命令来准备项目。 - 验证提供程序插件是否已下载到
.terraform目录中。
项目初始化完成后,你现在可以继续进行 Terraform 工作流的后续步骤,例如编写资源定义,以及使用 terraform plan 和 terraform apply 来管理你的基础设施。



