невозможно вызвать transactWrite на AWS DynamoDB DocumentClient из лямбды - PullRequest
0 голосов
/ 02 января 2019

У меня есть лямбда-функция (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 голосов
/ 03 января 2019

Как указал Морис, проблема в том, что Lambda не использует последнюю версию aws-sdk (по крайней мере, в момент, когда я пишу).

Чтобы использовать последнюю версию:

  • загрузите пакет развертывания lambda;
  • установите последнюю версию aws-sdk с npm install aws-sdk;
  • повторно загрузить пакет в lambda;

На этом этапе, когда вы импортируете aws-sdk с require('aws-sdk');, lambda использует последнюю версию sdk.

Примечание. Пакет aws-sdk увеличивает размер пакета lambda до более чем 3 МБ, поэтому вы не сможете редактировать код в редакторе встроенного кода.Лучший вариант - отредактировать код локально и загрузить его с помощью CLI.

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

Обновите время выполнения

Функция transactWrite была добавлена ​​в более поздней версии AWS SDK. Чтобы получить доступ к обновленному AWS SDK, переключите свою функцию Lambda на более новую среду выполнения.

AWS не обновляет версию AWS SDK для старых версий. Например, если вы используете устаревшую среду выполнения nodejs8.10, у вас есть доступ только к версии 2.290.0 пакета AWS SDK, который не поддерживает transactWrite. Если вы переключите время выполнения на nodejs10.x, вы получите версию 2.437.0 (на момент публикации), которая поддерживает транзакции DynamoDB.

Полный список версий SDK, доступных в каждой среде выполнения, можно найти здесь: AWS Lambda Runtime

Как обновить среду выполнения

Чтобы обновить среду выполнения, щелкните раскрывающийся список «Время выполнения» в разделе «Код функции» функции Lambda и выберите обновленное время выполнения.

Update Lambda runtime

0 голосов
/ 02 января 2019

Из документации (выделено мной):

Базовая среда выполнения AWS Lambda включает следующее программное обеспечение и библиотеки.

Операционная система - Amazon Linux

AMI - amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2

Ядро Linux - 4.14.77-70.59.amzn1.x86_64

AWS SDK для JavaScript - 2.290.0

SDK для Python (Boto 3) - 3-1.7.74 botocore-1.10.74

Самая последняя версия aws-sdk на момент написания этой статьи ist 2.382 - версия по умолчанию в Lambda Execution Environment имеет возраст 5 месяцев.

Я только что проверил это, и документация обновлена:

console.log("AWS SDK Version " + AWS.VERSION) // AWS SDK Version 2.290.0

Транзакции DynamoDB были объявлены в ноябре 2018 года , то есть ~ 3 месяца назад.

Скорее всего, transactWrite еще не реализован в этой версии - вам, вероятно, придется включить свою собственную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...