You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lambda报错Cannot read properties of undefined (reading 'bucket'):S3通知经SNS触发Lambda无事件详情

问题解决步骤

1. 明确事件结构差异

S3直接触发Lambda时,事件是顶层的S3原生结构;但通过SNS中转后,Lambda收到的是SNS封装后的事件结构,S3的原始事件被嵌套在event.Records[0].Sns.Message中,且该字段是JSON字符串格式,无法直接当作对象访问。

2. 修改Lambda代码解析事件

把原来直接读取event.bucket的逻辑,改为先解析SNS消息中的S3原始事件:

示例Node.js代码:

exports.handler = async (event) => {
  // 提取SNS消息体(S3事件的JSON字符串)
  const snsMessage = event.Records[0].Sns.Message;
  // 解析为JSON对象
  const s3Event = JSON.parse(snsMessage);
  
  // 正常访问S3事件的bucket和object信息
  const bucketName = s3Event.Records[0].s3.bucket.name;
  const objectKey = s3Event.Records[0].s3.object.key;
  
  console.log(`Bucket: ${bucketName}, Object: ${objectKey}`);
  // 后续业务逻辑...
};

3. 验证事件结构(可选)

如果不确定事件层级,可以先打印完整event对象确认结构:

exports.handler = async (event) => {
  console.log('Received event:', JSON.stringify(event, null, 2));
};

执行后查看CloudWatch日志,就能清楚看到SNS消息的位置和S3事件的嵌套关系。

4. 检查SNS订阅配置

确保SNS订阅Lambda时,协议选择AWS Lambda,同时确认Lambda的IAM角色已授权SNS服务调用该函数(可在Lambda触发器配置中查看SNS触发器是否正常添加)。


内容的提问来源于stack exchange,提问作者Rushi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 16:55:05