我有一个lambda函数(node.js),该函数需要在两个DynamoDB表上执行事务。
let ddb = new AWS.DynamoDB.DocumentClient();
ddb.transactWrite(params, function(err, data) {
if (err) {
...
}
else {
...
}
});
当我尝试使用它时,我收到错误消息:
ddb.transactWrite is not a function
我还尝试使用AWS.DynamoDB.transactWriteItems()获得相同的结果
答案 0 :(得分:5)
来自documentation(重点是我):
基础AWS Lambda执行环境包括以下内容 软件和库。
操作系统– Amazon Linux
AMI – amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2
Linux内核– 4.14.77-70.59.amzn1.x86_64
适用于JavaScript的AWS开发工具包– 2.290.0
SDK for Python(Boto 3)– 3-1.7.74 botocore-1.10.74
撰写本书时,aws-sdk
的最新版本为2.382-Lambda执行环境中的默认版本为5个月。
我刚刚验证了这一点,并且文档是最新的:
console.log("AWS SDK Version " + AWS.VERSION) // AWS SDK Version 2.290.0
DynamoDB事务已经announced in November 2018,大约3个月前。
该版本中尚未实现transactWrite
的可能性很大-您可能需要包括自己的版本。
答案 1 :(得分:0)
就像莫里斯(Maurice)所指出的那样,问题在于Lambda没有使用最新版本的aws-sdk(至少在我撰写本文时不使用)。
要使用最新版本:
npm install aws-sdk
安装aws-sdk的最新版本; 这时,当您使用require('aws-sdk');
导入aws-sdk时,lambda将使用sdk的最新版本。
注意:aws-sdk软件包将lambda的软件包大小增加到3MB以上,因此您将无法在嵌入式代码编辑器中编辑代码。最好的选择是在本地编辑代码,然后使用CLI上传代码。
答案 2 :(得分:0)
transactWrite
函数是在更高版本的AWS开发工具包中添加的。要访问更新的AWS开发工具包,请将Lambda函数切换到较新的运行时。
AWS不会为旧的运行时更新AWS开发工具包版本。例如,如果您正在使用过时的nodejs8.10
运行时,则只能访问不支持2.290.0
的AWS开发工具包的版本transactWrite
。如果将运行时切换为nodejs10.x
,则将获得版本2.437.0
(在本文发布时),该版本确实支持DynamoDB事务。
在此处查看每个运行时可用的SDK版本的完整列表: AWS Lambda Runtimes
要更新您的运行时,请单击Lambda函数的“功能代码”部分中的“运行时”下拉菜单,然后选择更新的运行时。