Lambda中调用AWS DynamoDB batchWriteItem写入数据丢失问题求助
问题根因及排查方案
最可能的核心原因:复合主键重复覆盖
如果你的DynamoDB表使用复合主键(分区键+排序键),只要多条数据的分区键+排序键值完全相同,后写入的请求会静默覆盖前一条数据,既不会报错也不会返回UnprocessedItems,最终表现为仅最后一条同主键数据写入成功,这和你描述的"40条仅成功写入1条"的特征高度匹配。
你可以先核对表主键定义:如果你的主键不是仅id单列,而是类似expertId+startTime的组合,就会触发该问题,你需要保证批量写入的数据中该组合全局唯一。
其他排查方向
- 确认环境变量
process.env.API_TAP_EXPERTAVAILABILITYTABLE_NAME的值和目标表名完全一致,避免写入到错误的DynamoDB表 - 检查Lambda执行角色的IAM权限,确认已添加
dynamodb:BatchWriteItem操作的放行规则,资源匹配目标表的ARN - 打印
Promise.all(promiseArray)返回的完整响应日志,确认所有批次的写入请求都返回成功状态,无隐藏错误字段 - 到AWS控制台DynamoDB页面直接扫描全表验证数据:如果你的Amplify配置了表的行级所有者权限,业务侧查询可能因为权限校验过滤掉已写入的数据,导致你误以为数据丢失
- 如果表配置了DynamoDB Streams触发器,检查关联的Lambda执行日志,确认没有写入后被其他逻辑删除数据的情况
内容的提问来源于stack exchange,提问作者Jafo Teng
相关产品推荐
相关产品推荐

