You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform中修改Map属性:更新awslogs_group时避免丢失其他参数

为Terraform嵌套对象参数追加后缀并保留其他字段

问题场景

需要更新Terraform对象中的awslogs_group参数,为其追加后缀(例如foo-bar)。现有变量定义如下:

variable "task_log_drive" {
  default = {
     log-drive = "awslogs"
    options = {
      awslogs_group = "foo"
      awslogs_stream_prefix = "foo"
      awslogs_create_group = "true"
      awslogs_retention_period = "7"
    }
  }
}

尝试使用merge函数处理时,虽然成功更新了awslogs_group,但options中的其他参数全部丢失:

locals {
modified = merge(var.task_log_drive, { options = {awslogs_group = "${var.task_log_drive.options.awslogs_group}-bar"}})
}

执行后结果:

{
  "log-drive" = "awslogs"
  "options" = {
    "awslogs_group" = "foo-bar"
  }
}

解决方法

通过对嵌套的options对象进行针对性处理,可保留原有所有参数同时更新目标字段:

方法1:显式保留所有字段(已验证可行)

locals {
  modified  = merge(
    var.task_log_drive, 
    {
      options = { 
        awslogs_group = "${var.task_log_drive.options.awslogs_group}-bar",
        awslogs_stream_prefix = var.task_log_drive.options.awslogs_stream_prefix,
        awslogs_create_group = var.task_log_drive.options.awslogs_create_group,
        awslogs_retention_period = var.task_log_drive.options.awslogs_retention_period
      }
    }
  )
}

方法2:更简洁的嵌套merge(优化方案)

无需手动列举所有字段,直接对内层options单独执行merge操作,自动保留原有键值对并覆盖目标字段:

locals {
  modified = merge(
    var.task_log_drive,
    {
      options = merge(
        var.task_log_drive.options,
        { awslogs_group = "${var.task_log_drive.options.awslogs_group}-bar" }
      )
    }
  )
}

内容的提问来源于stack exchange,提问作者Everton Evaristo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:12:45