Terraform读取DynamoDB复合主键数据报错,请求协助
问题分析与解决
错误原因
- 数据源选型错误:
data "aws_dynamodb_table_item"仅用于读取单个完整主键匹配的DynamoDB条目,你的表采用「分区键+排序键」的复合主键结构,使用该数据源时必须同时提供两个键的完整值才能定位唯一条目,仅指定分区键会触发键结构不匹配的报错。 - 需求不匹配:你需要获取同一分区键下的所有条目,这属于DynamoDB的Query批量查询场景,而
aws_dynamodb_table_item不支持这类批量查询操作。
解决方法
改用支持Query操作的aws_dynamodb_query数据源,该数据源可以查询同一分区键下的所有条目,具体配置如下:
1. 配置Query数据源
data "aws_dynamodb_query" "cost_centers" { table_name = aws_dynamodb_table.poc.name # 指定查询条件:匹配分区键tag_key等于CostCenter key_condition_expression = "tag_key = :tag_key_val" # 为条件占位符赋值,遵循DynamoDB的AttributeValue格式 expression_attribute_values = <<VALUES { ":tag_key_val": { "S": "CostCenter" } } VALUES }
2. 提取查询结果
可以通过输出变量获取所有成本中心编号,示例:
output "all_cost_center_numbers" { value = [for item in data.aws_dynamodb_query.cost_centers.items : item.tag_value.S] }
执行terraform apply后,即可得到所有分区键为CostCenter的tag_value值列表。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

