在Lambda中调用DynamoDB未捕获错误,如何查看相关报错信息
问题根因
你遇到的问题核心是异步执行逻辑和Lambda生命周期不匹配:
- 你使用回调形式调用
dyDocClient.scan(),这是异步操作,代码不会等待回调执行就会继续往下走,直接提前返回了response,Lambda进程在DynamoDB请求返回结果前就已经终止,所以回调里的错误日志根本没有机会打印。 - 外层的
try/catch只能捕获同步代码抛出的错误,异步回调内部抛出的错误无法被外层捕获,所以你的catch分支永远不会触发。
修复方案
把SDK调用改成async/await的写法,让Lambda等待DynamoDB请求完成后再返回,错误也能被正常捕获:
const AWS = require("aws-sdk"); const dyDocClient = new AWS.DynamoDB.DocumentClient(); exports.lambdaHandler = async (event, context) => { const params = { TableName: "tttttt" }; console.log('The table name is ', params.TableName); try { // 用await等待异步请求完成,回调转换为promise形式 const data = await dyDocClient.scan(params).promise(); console.log("Doing baba dance!"); return { 'statusCode': 200, 'body': JSON.stringify({ message: 'received', data: data }) }; } catch (err) { console.log('Error was captured'); console.error("Unable to scan the table. Error JSON:", JSON.stringify(err)); return { 'statusCode': 500, 'body': JSON.stringify({ error: err.message }) }; } };
效果说明
修改后重新调用Lambda,你就能在CloudWatch日志里看到不存在表的完整报错信息,包括错误码、错误描述等内容。
内容的提问来源于stack exchange,提问作者Itay Moav -Malimovka
相关产品推荐
相关产品推荐

