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 } ]) }
关键逻辑说明
merge(local.tags, {...}):将全局标签和资源专属标签合并为一个Map,专属标签会自动覆盖全局标签中同名的keyfor k, v in ...:遍历合并后的Map,将每个键值对转换为{key=k, value=v}的标准对象格式toset(...):将列表转换为Set类型,完全匹配awscc资源对tags的类型要求
内容的提问来源于stack exchange,提问作者Dilu
相关产品推荐
相关产品推荐

