AWS Lambda 和 DynamoDB 空响应
AWS Lambda and DynamoDB Null Response
我正在尝试从 Lambda 函数写入 DynamoDB table。当我测试 运行 函数时,它 returns 为空,没有错误消息,也没有任何内容写入 table。函数如下。我已经为此功能设置了一个服务角色,其权限策略允许访问 'Products' table。我看过一些教程提到创建“AWS Lambda 应用程序”,然后创建 Lambda 函数,但我认为这对我的使用来说不是必需的。
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
exports.handler = async (event, context, callback) => {
dynamodb.putItem({
TableName: "Products",
Item: {
"sku": {S: "29574839"},
"name": {S: "Test Code"}
}
}, function(err, data) {
if (err) {
console.log(err, err.stack);
return callback(null, {
statusCode: '500',
body: err
});
} else {
return callback(null, {
statusCode: '200',
body: 'Adding to table!'
});
}
});
};
我也尝试过使用文档客户端 const docClient = new dynamodb.DocumentClient();
,但出现错误:“dynamodb.DocumentClient 不是构造函数”。
我在这里错过了什么?谢谢!
CloudWatch 日志显示(我删除了请求 ID):
函数日志:
开始 RequestId:版本:$LATEST
结束 RequestId:
REPORT RequestId:持续时间:491.07 毫秒计费持续时间:500 毫秒内存大小:128 MB 使用的最大内存:87 MB 初始持续时间:405.37 毫秒
由于您使用的是 async handler,我认为问题在于您的函数在处理程序的主体有机会 运行.
之前完成
纠正此问题的一种方法是使用 Promise
,如 AWS docs 所示。例如:
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
exports.handler = async (event, context, callback) => {
const promise = new Promise(function(resolve, reject) {
dynamodb.putItem({
TableName: "Products",
Item: {
"sku": {S: "29574839"},
"name": {S: "Test Code"}
}
}, function(err, data) {
if (err) {
console.log(err, err.stack);
return callback(null, {
statusCode: '500',
body: err
});
} else {
return callback(null, {
statusCode: '200',
body: 'Adding to table!'
});
}
});
})
return promise;
};
以上更改仅供参考,因此可能仍需要进行一些调整。
我正在尝试从 Lambda 函数写入 DynamoDB table。当我测试 运行 函数时,它 returns 为空,没有错误消息,也没有任何内容写入 table。函数如下。我已经为此功能设置了一个服务角色,其权限策略允许访问 'Products' table。我看过一些教程提到创建“AWS Lambda 应用程序”,然后创建 Lambda 函数,但我认为这对我的使用来说不是必需的。
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
exports.handler = async (event, context, callback) => {
dynamodb.putItem({
TableName: "Products",
Item: {
"sku": {S: "29574839"},
"name": {S: "Test Code"}
}
}, function(err, data) {
if (err) {
console.log(err, err.stack);
return callback(null, {
statusCode: '500',
body: err
});
} else {
return callback(null, {
statusCode: '200',
body: 'Adding to table!'
});
}
});
};
我也尝试过使用文档客户端 const docClient = new dynamodb.DocumentClient();
,但出现错误:“dynamodb.DocumentClient 不是构造函数”。
我在这里错过了什么?谢谢!
CloudWatch 日志显示(我删除了请求 ID): 函数日志: 开始 RequestId:版本:$LATEST 结束 RequestId: REPORT RequestId:持续时间:491.07 毫秒计费持续时间:500 毫秒内存大小:128 MB 使用的最大内存:87 MB 初始持续时间:405.37 毫秒
由于您使用的是 async handler,我认为问题在于您的函数在处理程序的主体有机会 运行.
之前完成纠正此问题的一种方法是使用 Promise
,如 AWS docs 所示。例如:
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
exports.handler = async (event, context, callback) => {
const promise = new Promise(function(resolve, reject) {
dynamodb.putItem({
TableName: "Products",
Item: {
"sku": {S: "29574839"},
"name": {S: "Test Code"}
}
}, function(err, data) {
if (err) {
console.log(err, err.stack);
return callback(null, {
statusCode: '500',
body: err
});
} else {
return callback(null, {
statusCode: '200',
body: 'Adding to table!'
});
}
});
})
return promise;
};
以上更改仅供参考,因此可能仍需要进行一些调整。