amazon-web-services - 使用 Terraform for_each 创建动态资源

标签 amazon-web-services terraform

我想使用 Terraform 创建 AWS SSM 参数,并将参数作为输入变量传入。
我看到有一个 for_each 功能,但是如何将其应用于 terraform 资源中的顶级属性?从文档中,for_each 的使用似乎仅限于不能在资源的顶级属性上工作,我误解了吗?
这就是我想要完成的:
主文件

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
}
在上面,您必须将列表( map )投影到 map ,因为 for_each 需要它。

关于amazon-web-services - 使用 Terraform for_each 创建动态资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63210077/

相关文章:

terraform - 将变量设置为 Python 脚本返回的值

amazon-web-services - AWS CodePipeline 角色无权在阶段的 "action" block 中对角色执行 AssumeRole

amazon-web-services - 使用 Nested Stack 将 API 网关错误与其他堆栈上的 use 分开

amazon-web-services - 如何检查我的代码是否在AWS EC2上的容器中运行

amazon-web-services - boto3在rpm下打包时抛出错误

php - 从 AWS 上的 PHP ping Node.js 服务器

terraform - 如何从 Terraform 创建的 APIM 中删除演示产品?

amazon-web-services - 通过 SQS 向 Elastic Beanstalk 工作线程环境发布消息

azure - Terraform Azure VM 扩展不会将 VM 添加到 Azure 虚拟桌面的 Azure Active Directory

azure - 在 Terraform 中设置 Azure AD Microsoft Graph 电子邮件 API/权限