Amazon web services 使用Terraform为每个用户创建动态资源

Amazon web services 使用Terraform为每个用户创建动态资源,amazon-web-services,terraform,Amazon Web Services,Terraform,我想使用Terraform创建AWS SSM参数,参数作为输入变量传入 我看到每个功能都有一个for_,但如何将其应用于地形资源中的顶级属性?从文档中可以看出,for_each的使用似乎仅限于不在资源的顶级属性上工作,我误解了吗 这就是我努力实现的目标: main.tf resource "aws_ssm_parameter" "ssm_parameters" { for_each = var.params content { name

我想使用Terraform创建AWS SSM参数,参数作为输入变量传入

我看到每个功能都有一个for_,但如何将其应用于地形资源中的顶级属性?从文档中可以看出,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
        ]
      }
  }  
}
变量.tf

variable "params" {
  default = [
    {
      name   = "albUrl"
      paramValue = "testa"
    },
    {
      name   = "rdsUrl1"
      paramValue = "testb"
    },
    {
      name   = "rdsUrl2"
      valparamValueue = "testc"
    },
  ]
}

您可以使用for each,但需要修改其语法并在
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
}
在上述情况下,您必须将列表(映射)投影到映射,因为它是每个的
所必需的