Dynamodb.transactWriteItems не является ошибкой функции в Lambda, но не при использовании кода VS - PullRequest
0 голосов
/ 23 декабря 2018

Я успешно протестировал dynamicodb.transactWriteItems с использованием кода VS (узел js), но когда я перемещал свой код в Lambda, он всегда выдает ошибку типа: Dynamodb.transactWriteItems не является функцией.Обратите внимание, что я НЕ использую documentClient, поэтому объявление dynamodb = new AWS.DynamoDB() не является решением.

Как я могу проверить AWS-SDK, используемый Lambda (мой npm aws-sdk v2.372.0) и как мне сделатьиспользовать правильную версию AWS-SDK на Lambda, если это является основной причиной проблемы?

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();

Ответы [ 3 ]

0 голосов
/ 10 июня 2019

Хорошие новости - новые среды выполнения Lambda , очевидно, имеют самый последний SDK.Из того, что я прочитал в этом блоге, я понимаю, что лямбды Node 10X уже автоматически используют новые среды.Сегодня я протестировал с помощью лямбда-функции, которая использовала новую среду выполнения Node 10X, и мне больше не нужно было связывать свою собственную копию AWS SDK.

Кроме того, очевидно, что с завтрашнего дня новые функции Lambda (независимо от времени выполнения Node) будут иметь новую среду Lambda, так что, предположительно, они также будут работать.

0 голосов
/ 03 сентября 2019

Мне сначала удалось запутаться в этом, поэтому я поделился, если кто-нибудь еще сделает то же самое ...

Моя проблема была в том, что я использовал: const dynamoDB = new AWS.DynamoDB.DocumentClient()

и пытается позвонить .transactWriteItems, что недействительно.Если вы используете DocumentClient, вам нужно использовать .transactWrite.

Чтобы использовать .transactWriteItems ваш динамод должен быть установлен как 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)

0 голосов
/ 23 декабря 2018

Проблема заключается в том, что AWS lambda в настоящее время поддерживает AWS SDK для JavaScript - 2.290.0 Ref .Транзакции DynamoDB реализованы с версии 2.365.0 Ref .Чтобы решить эту проблему, вы можете попробовать включить последнюю версию JavaScript SDK в свой пакет развертывания Lambda Ref .

...