我必须设置可选属性,以便在地形资源中添加自定义提供程序,以便与多个提供程序一起重用资源。
我需要像这个一样的东西
resource "aws_kms" "key" {
provider = aws."custom_alias"
description = "xxx"
policy = "yyy"
}
在上面的资源块中,我想将不同的值传递给provider属性。要使用默认提供程序,我想向其传递一个null值;要使用自定义提供程序,我们想传递提供程序的自定义别名。
提供程序属性不支持变量。所以我不能把它设置为一个变量(这很容易,不确定为什么不支持它!(
我想我可以使用动态块在资源provider = aws."custom_alis"
中创建此属性
不确定这是否可行。就像大多数例子一样,我看到的动态块是在这样的资源中插入一个动态块
settings {
xyz = abc
abc = xyz
}
不确定是否可以使用dynamic在资源中创建可选属性。
想知道如何处理这个用例的建议吗?
目标是在具有不同值的资源中添加提供者属性。
提前感谢!
Terraform不支持动态提供程序选择。已经有一个流行的[功能请求][1]。
相反,你可以做的是将你的可重复使用的代码放在[模块][2]中,并与不同的提供商多次创建该模块:
module "mymodule_provider1" {
source = "./path/to/module"
providers = {
aws = aws.provider1
}
}
module "mymodule_provider2" {
source = "./path/to/module"
providers = {
aws = aws.provider2
}
}
这就是";建议";HashiCorp的方法,但它有模块数量不能是动态的限制。如果您确实需要模块的数量是动态的,并且不能静态地创建提供程序,那么您可以在模块内部创建提供程序,然后在模块本身上使用for_each
参数。您必须将提供程序初始化值作为输入参数传递到模块中。
编辑:对不起,直到我自己尝试过,我才想起,如果模块在内部创建提供程序,Terraform不允许在模块中使用for_each
。所以,恐怕我不知道该怎么做。你必须静态地创建提供者。