【发布时间】:2022-01-04 10:52:49
【问题描述】:
我希望有人可以帮助我解决 Terraform/Terragrunt 遇到的问题。我目前使用的每个版本是:
- Terragrunt v0.35.9
- Terraform v1.0.11
我正在使用 Terragrunt 将项目相关的基础架构部署到 GCP。我有两个单独的 Terragrunt 项目,用于在同一 GCP 解决方案的测试和生产实例之间拆分变量。
当我使用测试 .hcl 文件运行命令 terragrunt init 或 terragrunt plan -out tf.plan 时,该过程按预期完成。但是,当我使用生产 .hcl 文件运行这些命令中的任何一个时,都会出现以下错误:
│ Error: Invalid legacy provider address
│
│ This configuration or its associated state refers to the unqualified
│ provider "google".
│
│ You must complete the Terraform 0.13 upgrade process before upgrading to
│ later versions.
我查看了其他人对此错误的建议,并找到了以下文章:
- "Invalid legacy provider address" error on Terraform
- https://stackguides.com/questions/65396812/invalid-legacy-provider-address-error-on-terraform
但是,其中的解决方案适用于 Terraform 的版本在当前版本之前而不是之后的情况,就像我在 v1.0.11 上一样。此外,他们建议使用replace-provider 命令替换提供程序。但是,在我的 terraform 项目中,GCP 提供程序似乎已经是最新的,因为当我运行 terraform providers 命令时,我得到:
Providers required by configuration:
.
└── provider[registry.terraform.io/hashicorp/google] ~> 4.1.0
对于v0.13.x 之后的 Terraform 版本,这似乎是正确格式的 GCP 提供程序。
我还尝试删除生产实例的.terragrunt-cache 文件夹和关联的锁定文件,并尝试重新运行terragrunt init 命令,但我一直收到相同的错误。我觉得这很令人困惑,因为这适用于测试 .hcl 文件,它使用相同的底层 Terraform .tf 文件。
我注意到,在测试实例中,providers 文件夹正在.terragrunt-cache 文件夹下创建,但是由于此错误,它没有在生产实例中创建,如下所示:
此屏幕截图还显示了我注意到的两个 Terragrant 项目之间的另一个区别,生产实例正在生成一个 .terragrunt-init-required 文件,而测试实例中不存在该文件。据我所知,这与生产实例需要初始化这一事实有关。
这些是我的 Terraform main.tf 文件的内容:
terraform {
backend "gcs" {}
}
provider "google" {
project = var.deployment_project_id
}
这些是我的 Terraform provider.tf 文件的内容(我在网上看到的建议中添加了该文件,但测试 Terragrunt 项目不需要正确初始化):
terraform {
required_version = "~> 1.0.11"
required_providers {
google = {
source = "hashicorp/google"
version = "~> 4.1.0"
}
}
}
我的 Terragrunt .hcl 文件都使用了这些文件。如果您提供有关如何解决此问题的任何帮助或想法,我将不胜感激。
【问题讨论】:
标签: terraform terraform-provider-gcp terraform0.12+ infrastructure-as-code terragrunt