DynamoDB Stream触发Lambda失败:无法触发SNS通知问题求助
排查步骤
1. 检查Lambda的基于资源策略权限
DynamoDB流需要具备调用目标Lambda的权限,前往第二个Lambda的配置 > 权限 > 基于资源的策略,确认存在来自DynamoDB服务的调用权限策略,示例如下:
{ "Version": "2012-10-17", "Id": "dynamodb-trigger-policy", "Statement": [ { "Sid": "AllowDynamoDBInvoke", "Effect": "Allow", "Principal": { "Service": "dynamodb.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:[区域]:[账户ID]:function:[你的第二个Lambda名称]", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:dynamodb:[区域]:[账户ID]:table:[你的表名]/stream:[流ID]" } } } ] }
若缺失该策略,可手动添加或删除触发器重新创建(重新创建时AWS会自动生成该权限)。
2. 验证Lambda对DynamoDB流事件格式的兼容性
单独测试时使用的是自定义JSON事件,但DynamoDB流触发的事件为固定结构(包含Records数组)。检查第二个Lambda的代码是否正确解析该格式,示例流事件结构:
{ "Records": [ { "eventName": "INSERT", "dynamodb": { "NewImage": { /* 写入的新数据 */ } } } ] }
若代码直接读取顶层字段而非Records数组内的数据,会导致执行报错,触发Function call failed。
3. 查看CloudWatch日志定位具体错误
前往第二个Lambda的监控 > 日志 > 日志组,查看流触发时的执行日志,日志中会明确标注错误原因(如代码异常、权限缺失、超时等)。这是定位问题最直接的方式。
4. 检查Lambda并发限制
前往第二个Lambda的配置 > 并发,确认:
- 预留并发数未设为0
- 账户级并发配额未被耗尽
若并发不足,DynamoDB调用Lambda会失败。
5. 确认DynamoDB流状态
前往DynamoDB表的流标签页,确认流状态为ACTIVE,流的视图类型(如NEW_IMAGE)与Lambda代码预期一致。
内容的提问来源于stack exchange,提问作者ssji
相关产品推荐
相关产品推荐

