使用Terraform数据资源获取Aurora集群快照ARN遇属性错误求助
解决Terraform获取Aurora全局集群快照ARN时的「Unsupported attribute」错误
问题根源
- 当用
for_each声明数据源时,data.aws_db_cluster_snapshot.db是映射(map)类型,而非列表。直接使用[*]列表展开语法会导致Terraform无法正确解析属性,因为映射和列表的元素访问逻辑不同。 - 全局Aurora集群的自动快照关联的是主集群(
new-test-db)而非全局数据库标识符(new-test),若数据源配置时指定了错误的集群ID,也可能导致属性读取异常。
修复方案
1. 修正属性访问语法
for_each生成的映射需先用values()函数提取所有元素,再用列表展开语法获取ARN:
# 错误写法 data.aws_db_cluster_snapshot.db[*].db_cluster_snapshot_arn # 正确写法 values(data.aws_db_cluster_snapshot.db)[*].db_cluster_snapshot_arn
若需访问单个集群的快照ARN,直接通过for_each的键取值:
data.aws_db_cluster_snapshot.db["new-test-db"].db_cluster_snapshot_arn
2. 确保数据源配置正确
明确指定主集群ID和自动快照类型,避免筛选偏差:
data "aws_db_cluster_snapshot" "db" { for_each = var.rds_sources db_cluster_identifier = each.value # 传入主集群ID,如"new-test-db" snapshot_type = "automated" # 限定只匹配自动快照 most_recent = true }
注意:不能将全局数据库ID(new-test)用于db_cluster_identifier字段,必须使用主集群的标识符。
3. 验证Provider属性兼容性
执行以下命令,查看当前AWS Provider实际暴露的属性,确认db_cluster_snapshot_arn是否存在:
terraform providers schema -type=data.aws_db_cluster_snapshot
你使用的~>3.75版本AWS Provider确实支持该属性,此步骤主要用于排查拼写错误或版本异常。
完整示例配置
variable "rds_sources" { type = set(string) default = ["new-test-db"] } data "aws_db_cluster_snapshot" "db" { for_each = var.rds_sources db_cluster_identifier = each.value snapshot_type = "automated" most_recent = true } output "snapshot_arns" { value = values(data.aws_db_cluster_snapshot.db)[*].db_cluster_snapshot_arn }
内容的提问来源于stack exchange,提问作者Somethingwhatever
相关产品推荐
相关产品推荐

