正如您在下面看到的,我试图将一个特定的提供程序传递给一个模块,然后该模块将其作为主提供程序(aws = aws.some_profile)
传递给第二个嵌套模块。
在terraform plan
上,我得到以下错误:
Error: missing provider module.module_a.provider["registry.terraform.io/hashicorp/aws"].some_profile
我一定是做错了什么,或者认为语言在某种程度上是有效的。想法?
文件结构:
├── main.tf
├── module_a
│ ├── main.tf
│ └── module_b
│ └── main.tf
└── providers.tf
main.tf(顶级(:
module "module_a" {
source = "./module_a"
providers = {
aws.some_profile = aws.some_profile
}
}
main.tf(模块内部_a(:
module "module_b" {
source = "./module_b"
providers = {
aws = aws.some_profile
}
}
main.tf(模块b内部(:
resource "null_resource" "null" {}
供应商.tf:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 3.22.0"
}
}
}
provider "aws" {
profile = "default"
region = "us-west-2"
}
provider "aws" {
alias = "some_profile"
profile = "some_profile"
region = "us-west-2"
}
好的,所以在Reddit上得到一些答案后,看起来尽管你将提供者传递到子模块,但你仍然需要在每个子模块中声明所述提供者,如下所示:
provider "aws" { alias = "some_provider" }
它看起来像是一种"地形";所需提供者";块仅在最顶层上是必需的。但是,如果它不起作用,您也可以尝试将它添加到每个子模块中。
希望这能帮助到别人。