AWS Lambda函数开发求助:Node.js 6.10实现S3上传触发
嘿,别慌!我刚上手AWS Lambda的时候也一脸懵,这就一步步带你搭建这个S3触发的Node.js 6.10 Lambda函数,全程保姆级教程👇
第一步:创建Lambda函数(指定Node.js 6.10环境)
- 登录AWS控制台,找到Lambda服务,点击「创建函数」
- 选择「从头开始创建」,给函数起个好记的名字(比如
S3UploadTrigger) - 关键一步:在「运行时」下拉框里找到Node.js 6.10(这个版本比较老,可能需要往下翻或者搜索才能看到)
- 权限部分,新手直接选「创建具有基本Lambda权限的新角色」就行,后面我们再给它加S3访问权限
第二步:给Lambda角色配置S3访问权限
Lambda要能读取S3的上传事件和对象内容,得给它的执行角色加权限:
- 打开IAM控制台,搜索刚才创建的Lambda角色(名字一般是
lambda-role-xxxxxx) - 点击「添加权限」→「创建内联策略」
- 切换到JSON模式,粘贴下面的策略代码,记得把
你的存储桶名称替换成你实际的桶名:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::你的存储桶名称", "arn:aws:s3:::你的存储桶名称/*" ] } ] }
- 给策略起个名字(比如
S3AccessForLambdaTrigger),保存就搞定了
第三步:配置S3触发事件
现在让Lambda在对象上传到S3时自动触发:
- 回到Lambda函数页面,找到「触发器」标签,点击「添加触发器」
- 触发器类型选「S3」
- 选择你要监控的目标存储桶
- 事件类型选「所有对象创建事件」(如果只需要监听上传操作,选「Put」也可以)
- 注意勾选那个「递归调用」的警告提示(只要你别让Lambda把文件再传回去同一个桶,就不会有无限循环的问题)
- 点击「添加」,触发配置就完成了
第四步:编写Node.js 6.10的Lambda代码
把Lambda默认的代码替换成下面这个基础示例,它会打印上传对象的信息,还能读取对象内容,你可以按需扩展:
exports.handler = (event, context, callback) => { // 从事件中提取S3相关信息 const s3Record = event.Records[0].s3; const bucketName = s3Record.bucket.name; // 解码对象键,避免特殊字符乱码 const objectKey = decodeURIComponent(s3Record.object.key.replace(/\+/g, ' ')); console.log(`检测到新对象上传:桶名 → ${bucketName},对象键 → ${objectKey}`); // 示例:读取上传的对象内容(如果不需要可以删掉这部分) const AWS = require('aws-sdk'); const s3 = new AWS.S3(); s3.getObject({ Bucket: bucketName, Key: objectKey }, (err, data) => { if (err) { console.error('读取对象失败:', err); callback(err); // 标记执行失败 } else { console.log('对象内容预览:', data.Body.toString()); callback(null, `成功处理对象:${objectKey}`); // 标记执行成功 } }); };
提示:Node.js 6.10版本的AWS SDK是Lambda内置的,不用自己打包上传,直接用就行
第五步:测试函数是否正常工作
- 在Lambda页面点击「测试」,选择「S3 Put」测试模板,把模板里的桶名和对象键改成你实际的信息
- 点击「测试」,就能看到执行结果和日志了,如果成功会打印出对象信息
- 也可以实际上传一个小文件到你的S3桶,然后去Lambda的「监控」标签里查看CloudWatch日志,确认函数确实被触发了
几个要注意的点
- Node.js 6.10已经停止官方维护了,如果项目允许的话,建议升级到更高版本(比如Node.js 18.x),但如果必须用这个版本,上面的代码完全兼容
- 权限配置遵循「最小权限原则」,不要给Lambda不必要的权限,避免安全风险
- 对象键的解码很重要,不然遇到带空格或特殊字符的文件名会出现乱码问题
内容的提问来源于stack exchange,提问作者Wonho
相关产品推荐
相关产品推荐

