1. 概述
Terraform 是一个基础设施即代码(Infrastructure-as-Code, IaC)工具,用于自动化部署和管理云资源。它通过 Provider 与云平台和 SaaS(Software-as-a-Service) 服务进行交互。Terraform 中的 Provider 提供了各种 资源类型 或 数据源。
在本教程中,我们将讨论如何查看 Terraform 配置中使用的所有 Provider 的版本。本文使用的 Terraform 版本为 1.9.3。
2. 示例配置
我们使用如下 Terraform 配置文件 example.tf,其中包含了三个 Provider:
$ cat example.tf
provider "kubernetes" {
}
resource "local_file" "hello" {
file_name = "hello.txt"
}
resource "aws_instance" "web" {
ami = data.aws_ami.ubuntu.id
instance_type = "t3.micro"
}
- 第一个
provider
块是显式声明的 Provider。provider "kubernetes"
中的kubernetes
表示该 Provider 的本地名称。Kubernetes Provider 用于与 Kubernetes 平台交互。 - 另外两个
resource
块隐式声明了 Provider:local_file
中的local
表示使用的是local
Provider,file
是资源类型。local_file
用于生成指定内容的本地文件。aws_instance
中的aws
表示使用 AWS Provider。aws_instance
用于创建 Amazon EC2 实例。
3. 使用 terraform version
我们可以使用 terraform version
命令来查看当前配置中使用的 Provider 版本。
初始化之前运行:
$ terraform version
Terraform v1.9.3
on linux_amd64
此时还没有 Provider 被安装,所以只显示 Terraform 的版本。
接着使用 terraform init
初始化配置:
$ terraform init
Initializing the backend...
Initializing provider plugins...
- Finding latest version of hashicorp/local...
- Finding latest version of hashicorp/aws...
- Finding latest version of hashicorp/kubernetes...
- Installing hashicorp/local v2.5.1...
- Installed hashicorp/local v2.5.1 (signed by HashiCorp)
- Installing hashicorp/aws v5.61.0...
- Installed hashicorp/aws v5.61.0 (signed by HashiCorp)
- Installing hashicorp/kubernetes v2.31.0...
- Installed hashicorp/kubernetes v2.31.0 (signed by HashiCorp)
...
可以看到,Terraform 自动下载并安装了所需的 Provider 插件。
再次运行 terraform version
:
$ terraform version
Terraform v1.9.3
on linux_amd64
+ provider registry.terraform.io/hashicorp/aws v5.61.0
+ provider registry.terraform.io/hashicorp/kubernetes v2.31.0
+ provider registry.terraform.io/hashicorp/local v2.5.1
输出结果中列出了所有已安装的 Provider 及其版本。
3.1 使用 JSON 格式输出
如果你希望以 JSON 格式查看,可以加上 -json
参数:
$ terraform version -json
{
"terraform_version": "1.9.3",
"platform": "linux_amd64",
"provider_selections": {
"registry.terraform.io/hashicorp/aws": "5.61.0",
"registry.terraform.io/hashicorp/kubernetes": "2.31.0",
"registry.terraform.io/hashicorp/local": "2.5.1"
},
"terraform_outdated": false
}
✅ 建议:在脚本中解析版本信息时,使用 JSON 格式会更方便。
4. 查看 .terraform
目录
Terraform 在执行 init
后会在当前目录下生成一个隐藏目录 .terraform
,里面包含了 Provider 插件的本地副本。
我们可以直接查看该目录来获取 Provider 版本信息:
$ ls -l .terraform/providers/registry.terraform.io/hashicorp/
total 12
drwxr-xr-x 3 ubuntu ubuntu 4096 Aug 4 14:57 aws
drwxr-xr-x 3 ubuntu ubuntu 4096 Aug 4 14:57 kubernetes
drwxr-xr-x 3 ubuntu ubuntu 4096 Aug 4 14:56 local
每个 Provider 对应一个子目录,目录名即为 Provider 名称。
进一步查看每个 Provider 的版本目录:
$ ls -l .terraform/providers/registry.terraform.io/hashicorp/aws
total 4
drwxr-xr-x 3 ubuntu ubuntu 4096 Aug 4 14:57 5.61.0
$ ls -l .terraform/providers/registry.terraform.io/hashicorp/kubernetes
total 4
drwxr-xr-x 3 ubuntu ubuntu 4096 Aug 4 14:57 2.31.0
$ ls -l .terraform/providers/registry.terraform.io/hashicorp/local
total 4
drwxr-xr-x 3 ubuntu ubuntu 4096 Aug 4 14:56 2.5.1
⚠️ 注意:.terraform
目录通常不提交到 Git 仓库中,因为它包含的是本地缓存的 Provider 插件。
5. 总结
在本文中,我们介绍了两种查看 Terraform 配置中 Provider 版本的方法:
- ✅ 使用
terraform version
命令:直接、标准、支持 JSON 输出,适合脚本使用。 - ✅ 查看
.terraform
目录:适用于离线查看或调试,但需要手动查找目录结构。
两种方式各有优劣,建议根据实际场景选择使用。如果你在 CI/CD 流水线中需要自动化获取版本信息,推荐使用 -json
格式解析。