dynamodb.transactWriteItems不是Lambda上的函数错误,但使用VS Code时不是

Che*_*ter 7 amazon-web-services amazon-dynamodb aws-lambda

我已经使用VS Code(节点js)成功测试了dynamodb.transactWriteItems,但是当我将代码移至Lambda时,它始终会引发类型错误:dynamodb.transactWriteItems不是函数。请注意,我没有使用documentClient,所以声明dynamodb = new AWS.DynamoDB()不是解决方案。

如何检查Lambda使用的AWS-SDK(我的npm aws-sdk是v2.372.0),如果这是问题的根本原因,我如何在Lambda上使用正确的AWS-SDK版本?

data = await dynamodb.transactWriteItems({
  ReturnConsumedCapacity: "INDEXES",
  ReturnItemCollectionMetrics: "SIZE",
  TransactItems: [
      {
          Put: {
            TableName: envVarPOTableName,
            Item: {
              "poNumber": {S: poNumber}, 
              "supplierName": {S: event.supplierName},
              "poStatus" : {S: "Created"},
              "rmItemsArr": {L: [
                { M:{
                  "type": {S:event.rmItemObj.type}, 
                  "description": {S:event.rmItemObj.description}
                  },
                }
              ]}
            }
          }
      },
      {
        Update: {
          TableName: envVarRMTableName,
          Key:{
            "type": {S: event.rmItemObj.type},
            "description": {S: event.rmItemObj.description}
          },
          UpdateExpression: "set #pnA = list_append(#pnA, :vals)",
          ExpressionAttributeNames: {
            "#pnA" : "poNumbersArr"

          },
          ExpressionAttributeValues:{
            ":vals" : {L:[{S:poNumber}]}

          },
          ReturnValuesOnConditionCheckFailure: "ALL_OLD"
        }
      }
]
}).promise();
Run Code Online (Sandbox Code Playgroud)

Pra*_*ddy 6

问题在于,AWS lambda当前支持适用于JavaScript的AWS开发工具包– 2.290.0 Ref。DynamoDB事务从版本2.365.0 Ref实施。为了解决这个问题,您可以尝试在Lambda部署包Ref中包含最新版本的JavaScript SDK 。

  • 您是否知道任何AWS路线图,说明他们何时将在自己的Lambda上支持其新的Dynamodb服务?AWS的减分。大声笑 (2认同)

Fra*_*ank 5

我最初设法使自己在这一点上加倍混淆,所以我想我会分享以防其他人做同样的事情......

我的问题是我正在使用: const dynamoDB = new AWS.DynamoDB.DocumentClient()

并试图拨打.transactWriteItems无效的电话。如果您使用的是 DocumentClient,则需要.transactWrite改用。

要使用.transactWriteItems您的 dynamodb 必须设置为const dynamoDB = new AWS.DynamoDB()

正如@schof 上面所说,最新的 lambda aws sdks 将支持这个 f() https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html (在撰写本文时最高为 2.488.0适用于 10.x 和 8.10)

  • 我的情况也是如此。所以版本现在很好,但您需要实例化一个不同的类。 (2认同)