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

Terraform中awscc_elasticache_serverless_cache标签配置错误求助

解决awscc_elasticache_serverless_cache标签合并配置问题

问题根源

awscc_elasticache_serverless_cache 属于AWS Cloud Control API类型资源,它的tags字段要求是包含key和value属性的对象集合(set of objects),而非普通Terraform资源常用的键值对Map格式。这就是两次报错的核心原因:

  • 第一次用merge得到的是Map类型,不符合资源对tags的类型要求
  • 第二次改成列表但未按要求定义key和value属性,导致字段缺失报错

正确配置方法

先通过merge合并全局标签(local.tags)和资源专属标签为一个Map,再将这个Map转换为资源要求的对象集合格式:

修改后的完整资源代码

resource "awscc_elasticache_serverless_cache" "elasticache" {
  serverless_cache_name    = "${data.aws_ssm_parameter.environment.value}-serverless-elasticache"
  description              = "Generic ElastiCache Redis Serverless"
  engine                   = "redis"
  major_engine_version     = 7
  daily_snapshot_time      = "03:00"
  snapshot_retention_limit = 7
  security_group_ids       = ["${aws_security_group.elasticache_access.id}"]
  subnet_ids               = module.vpc_data.subnet_ids
  depends_on               = [aws_security_group.elasticache_access]
  kms_key_id               = data.aws_kms_key.ucm.id

  # 合并标签并转换为要求的格式
  tags = toset([
    for k, v in merge(local.tags, {
      Name        = "${data.aws_ssm_parameter.environment.value}-ucm-elasticache-serverless"
      Description = "Elasticache serverless for ucm"
    }) : {
      key   = k
      value = v
    }
  ])
}

关键逻辑说明

  1. merge(local.tags, {...}):将全局标签和资源专属标签合并为一个Map,专属标签会自动覆盖全局标签中同名的key
  2. for k, v in ...:遍历合并后的Map,将每个键值对转换为{key=k, value=v}的标准对象格式
  3. toset(...):将列表转换为Set类型,完全匹配awscc资源对tags的类型要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:53:16