无法从Lambda调用AWS DynamoDB DocumentClient上的transactWrite

时间:2019-01-02 18:24:42

标签: aws-lambda amazon-dynamodb

我有一个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()获得相同的结果

3 个答案:

答案 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(至少在我撰写本文时不使用)。

要使用最新版本:

  • 下载lambda部署软件包;
  • 使用npm install aws-sdk安装aws-sdk的最新版本;
  • 在lambda内部重新上传软件包;

这时,当您使用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函数的“功能代码”部分中的“运行时”下拉菜单,然后选择更新的运行时。

Update Lambda runtime