我正在尝试使用DynamoDB事务来使用Node.js从lambda同时更新多个表。我收到“ transactWriteItems不是函数”的错误。我正在按照文档步骤进行操作,但不太确定自己在这里做错了什么。这是我的函数:
'use-strict';
var AWS = require('aws-sdk');
exports.handler = async (event, context, callback) => {
var dynamoDB = new AWS.DynamoDB({apiVersion: '2012-10-08'});
var date_created = (new Date).getTime().toString()
var media_id = event['media_id']
var params = {
TransactItems: [
{
Put: {
TableName: 'Table_Name',
Item: {
"media_id": {S: event['media_id']},
"timestamp_date_liked": {N: date_created},
"liker_id": {S: event['liker_id']},
"type" : {N: event['type']},
}
}
}
]
}
var data = await dynamoDB.transactWriteItems(params).promise();
};
我收到的确切错误是:
Response:
{
"errorMessage": "dynamoDB.transactWriteItems is not a function",
"errorType": "TypeError",
"stackTrace": [
"exports.handler (/var/task/index.js:40:31)"
]
}
答案 0 :(得分:2)
AWS尚未将lambda运行时间更新为aws-sdk的最新版本,当前使用的版本没有dynamodb事务。
当前,如果要使用事务,则需要将当前sdk版本与lambda捆绑在一起或放置在一个层中。
注意: 在图层中使用aws-sdk会带来一些麻烦。也就是说,本机版本仍将具有优先权。您可以通过使用相对路径('../aws-sdk')在要求aws-sdk的层中安装软件包并将其重新导出为其他软件包名称,然后改用该软件包来解决此问题。 / p>
答案 1 :(得分:0)
使用transactWrite
代替transactWriteItems
。