我想使用Terraform创建AWS SSM参数,并将这些参数作为输入变量传递。
我看到有一个for_each功能,但是如何将此功能应用于terraform资源中的顶级属性?从文档来看,对for_each的使用似乎仅限于不能在资源的顶级属性上使用,我误会了吗?
这是我要完成的工作:
main.tf
resource "aws_ssm_parameter" "ssm_parameters" {
for_each = var.params
content {
name = name.value
type = "String"
overwrite = true
value = paramValue.value
tags = var.tags
lifecycle {
ignore_changes = [
tags,
value
]
}
}
}
variables.tf
variable "params" {
default = [
{
name = "albUrl"
paramValue = "testa"
},
{
name = "rdsUrl1"
paramValue = "testb"
},
{
name = "rdsUrl2"
valparamValueue = "testc"
},
]
}
答案 0 :(得分:4)
您可以使用每种格式,但是需要在var.params
中修改其语法并修复语法:
variable "params" {
default = [
{
name = "albUrl"
paramValue = "testa"
},
{
name = "rdsUrl1"
paramValue = "testb"
},
{
name = "rdsUrl2"
paramValue = "testc"
},
]
}
然后将其用于每个对象,并创建3个ssm参数:
resource "aws_ssm_parameter" "ssm_parameters" {
for_each = {for v in var.params: v.name => v.paramValue}
type = "String"
name = each.key
value = each.value
overwrite = true
}
在上面,您必须将列表(地图)投影到for_each
所需的地图上。