Node.js+Serverless+DynamoDB批量写入遇权限错误,单条写入正常求助
解决Lambda批量写入DynamoDB的AccessDeniedException问题
你的问题其实很典型:单条PutItem能正常执行,但批量的BatchWriteItem触发权限拒绝,核心原因就是你的Lambda执行角色的IAM策略缺少了dynamodb:BatchWriteItem权限。
为什么会出现这个差异?
DynamoDB的单条写入(PutItem/DeleteItem)和批量写入(BatchWriteItem)是两个独立的权限动作,IAM不会因为你拥有单条操作权限就自动赋予批量操作的权限。所以哪怕PutItem能跑通,没有显式配置BatchWriteItem的话,批量写入肯定会被拦截。
具体修复步骤:
定位Lambda的执行角色
打开AWS控制台的Lambda服务,找到你的目标函数,切换到「配置」标签页,在「权限」板块找到「执行角色」,点击角色名称跳转到IAM控制台。更新IAM权限策略
在IAM角色的「权限」页面,找到给你授权PutItem的那个DynamoDB策略,编辑策略内容,添加dynamodb:BatchWriteItem动作。修改后的策略示例如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:PutItem", "dynamodb:BatchWriteItem" // 新增这个权限项 ], "Resource": "arn:aws:dynamodb:你的区域ID:你的账号ID:table/你的表名" } ] }验证权限生效
保存策略后,等待1-2分钟让IAM权限同步(偶尔会有延迟),然后重新测试你的批量写入逻辑。
额外注意事项:
- 确认策略中的
ResourceARN完全正确,包括区域、账号ID和表名,不要出现拼写错误。 - 如果你的策略包含
Condition条件语句,要确保这些条件不会对BatchWriteItem操作造成限制。 - 如果你用Serverless Framework部署,检查
serverless.yml里的IAM角色配置,确保已经包含dynamodb:BatchWriteItem,比如:provider: name: aws iamRoleStatements: - Effect: Allow Action: - dynamodb:PutItem - dynamodb:BatchWriteItem Resource: "arn:aws:dynamodb:${self:provider.region}:*:table/${self:custom.tableName}"
完成以上操作后,你的Lambda应该就能顺利执行DynamoDB批量写入了。
内容的提问来源于stack exchange,提问作者Vipul Sharma
相关产品推荐
相关产品推荐

