使用Pulumi配置DynamoDB时L类型报错:仅支持S/N/B类型
问题
尝试通过Pulumi配置DynamoDB表,查阅官方文档后以为配置正确,但收到数据类型无效的报错:
error: aws:dynamodb/table:Table resource 'table-name' has a problem: expected type to be one of ["S" "N" "B"], got L. Examine values at 'table-name.attributes'.
希望使用L(列表)数据类型存储数组值,这是在官方文档中看到的用法。请问出现该报错的原因是什么?是普遍问题还是流程中未知的规则导致?
相关代码:
const tableName = `table-name`; const dynamoDbTable = new DynamoDBTable(tableName, { name: tableName, hashKey: "ID", attributes: [ { name: "ID", type: "S", }, ... { name: "RESULTS", type: "L" } ], ... });
回答
报错原因是你混淆了DynamoDB表结构定义和数据存储的类型规则:
- 表配置里的
attributes字段仅用于声明主键(Hash/Rangekey)以及全局/本地二级索引的属性,这些属性只能是S(字符串)、N(数字)、B(二进制)三种基础标量类型——因为DynamoDB的主键和索引不支持列表(L)、映射(M)这类复杂类型。 - L类型是写入数据时的属性值类型,DynamoDB是无Schema数据库,不需要在表结构里提前声明非主键的字段类型。直接在写入数据时把
RESULTS字段设为L类型的数组即可,完全不需要在表的attributes数组里定义它。
解决方法:删除代码里attributes数组中RESULTS那一项,表结构只保留主键ID的定义,写入数据时正常存储数组值即可。
内容的提问来源于stack exchange,提问作者physicsboy
相关产品推荐
相关产品推荐

