【发布时间】:2020-08-22 11:11:22
【问题描述】:
我创建了一个 Lambda 函数,它使用 Node.js 10.x 将项目放入 DynamoDB 表中。 Lambda 函数已通过触发器与 SQS Queue 集成。当我将消息放入队列时,会调用 Lambda,但在 DynamoDB 表中插入项目时会引发错误。
消息 -> SQS -> Lambda -> DynamoDB
我将 TableName 和 Item 作为输入传递给 DynamoDB put 方法。但是,CloudWatch Logs 说缺少 TableName 和 Item 参数。下面是代码sn-ps和截图。
我确实花了很多时间,但无法解决问题。有人可以帮我吗?
Lambda 代码
console.log('Loading function');
var AWS = require('aws-sdk');
var dynamo = new AWS.DynamoDB.DocumentClient();
exports.handler = function(event, context, callback) {
console.log('Received event:', JSON.stringify(event, null, 2));
event.Records.forEach(record => {
const { body } = record;
console.log("Input to DynamoAPI :", body);
dynamo.put(body, callback);
});
return {};
}
进入队列的消息
{
"TableName": "user-transaction",
"Item" : {
"transaction-id": 1
}
}
来自 CloudWatch 的错误消息
【问题讨论】:
-
看来是对的,可以添加你的dynamoDb表的定义吗?您是否添加了 transaction-id 作为 key?
-
@desoss 我创建了一个 'user-transaction' 表,其中 'transaction-id' 作为分区键,但我认为它与表结构没有任何关系。它在验证失败并且没有命中数据库。如果没有表格,我也会遇到同样的错误。
标签: node.js amazon-web-services aws-lambda amazon-dynamodb amazon-sqs