我将 Terragrunt 与 Terraform 版本 0.14.8 一起使用。
我的项目使用 mono repo 结构,因为项目要求将 Terragrunt 文件和 Terraform 模块打包在一个包中。
文件夹结构:
project root:
├── environments
│ └── prd
│ ├── rds-cluster
│ │ └── terragrunt.hcl
│ └── terragrunt.hcl
└── modules
├── rds-cluster
│ ├── README.md
│ ├── main.tf
│ ├── output.tf
│ └── variables.tf
└── secretsmanager-secret
├── README.md
├── main.tf
├── output.tf
└── variables.tf
在 prd/terragrunt.hcl 中,我定义了远程状态块和生成提供程序块。
remote_state {
backend = "s3"
...
}
generate "provider" {
path = "provider.tf"
if_exists = "overwrite_terragrunt"
contents = <<EOF
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.0"
}
}
}
provider "aws" {
region = "ca-central-1"
}
EOF
}
在 environment/prd/rds-cluster/terragrunt.hcl 中,我定义了以下内容:
include {
path = find_in_parent_folders()
}
terraform {
source = "../../../modules//rds-cluster"
}
inputs = {
...
}
在 modules/rds-cluster/main.tf 中,我定义了以下内容:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 3.0"
}
}
}
// RDS related resources...
我的问题是,当我尝试在 下运行 terragrunt plan 时environments/prd/rds-cluster
,我收到以下错误消息:
Error: Duplicate required providers configuration
on provider.tf line 3, in terraform:
3: required_providers {
A module may have only one required providers configuration. The required
providers were previously configured at main.tf:2,3-21.
我可以通过在提供程序块中声明版本来解决这个问题,如下所示。但是,提供程序块中的 version 属性已在 Terraform 0.13 中被弃用;Terraform 建议使用 terraform 块下的 required_providers 子块。
有谁知道我需要做什么才能为我的 aws 提供程序使用新的 required_providers 块?