调试lambda令人沮丧。
我有一个非常简单的lambda函数:
const AWS = require('aws-sdk')
const dynamodb = new AWS.DynamoDB.DocumentClient({region: 'ap-southeast-2'});
exports.handler = async (event, context, callback) => {
const params = {
TableName: 'people-dev',
Item: {
id: '1',
name: 'person',
email: 'person@example.com'
}
};
dynamodb.put(params, (err, data) => {
if(err) {
callback(err, null)
} else{
callback(null, data)
}
});
};
测试响应为:
Response:
null
Request ID:
"3d7e9329-3843-4760-917d-4b4d4781dbd7"
Function Logs:
START RequestId: 3d7e9329-3843-4760-917d-4b4d4781dbd7 Version: $LATEST
END RequestId: 3d7e9329-3843-4760-917d-4b4d4781dbd7
REPORT RequestId: 3d7e9329-3843-4760-917d-4b4d4781dbd7 Duration: 243.13 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 29 MB
没有任何内容写入Dynamo。 没有任何有用的信息记录在cloudwatch中。 是的,该功能具有DynamoDB的完全权限。
答案 0 :(得分:1)
问题在于处理程序正在异步执行。
exports.handler = async (event, context, ....
将其更改为以下内容,可以解决此问题:
exports.handler = function (event, context, ....
答案 1 :(得分:1)
将async
放回原处,因为使用回调已过时,并且容易出错。使用node.js aws-sdk上可用的内置promise()
方法,而对这些承诺仅使用await
。如果要处理错误,只需在代码中加上try/catch
块即可。
const AWS = require('aws-sdk')
const dynamodb = new AWS.DynamoDB.DocumentClient({region: 'ap-southeast-2'});
exports.handler = async (event) => {
const params = {
TableName: 'people-dev',
Item: {
id: '1',
name: 'person',
email: 'person@example.com'
}
};
await dynamodb.put(params).promise()
return {
statusCode: 200,
body: JSON.stringify({message: 'Success'})
}
};
有关async/await的更多信息