Возникли проблемы с DynamoDB.transactWriteItems - PullRequest
1 голос
/ 10 апреля 2019

Я пытаюсь использовать транзакции DynamoDB для одновременного обновления нескольких таблиц из лямбды с помощью Node.js.Я получаю сообщение об ошибке «transactWriteItems не является функцией».Я следую шаг за документацией за шагом и не слишком уверен, что я делаю здесь неправильно.Вот как выглядит моя функция:

'use-strict';
var AWS = require('aws-sdk');

exports.handler = async (event, context, callback) => {
var dynamoDB = new AWS.DynamoDB({apiVersion: '2012-10-08'});

var date_created = (new Date).getTime().toString()

var media_id = event['media_id']

var params = {
    TransactItems: [
        {
            Put: {
                TableName: 'Table_Name',
                Item: {
                    "media_id": {S: event['media_id']},
                    "timestamp_date_liked": {N: date_created},
                    "liker_id": {S: event['liker_id']},
                    "type" : {N: event['type']},
                }
            }
        }
    ]
}

var data = await dynamoDB.transactWriteItems(params).promise();

};

И точная ошибка, которую я получаю:

Response:
{
  "errorMessage": "dynamoDB.transactWriteItems is not a function",
  "errorType": "TypeError",
  "stackTrace": [
    "exports.handler (/var/task/index.js:40:31)"
  ]
}

1 Ответ

2 голосов
/ 11 апреля 2019

AWS еще не обновил лямбда-среду до последней версии aws-sdk, используемая в настоящее время версия не имеет транзакций DynamodB.

В настоящее время, если вы хотите использовать транзакции, вам потребуетсясвязать в текущей версии SDK с вашей лямбда или поместить его в слой.

Примечание: Существуют сложности с использованием aws-sdk в слое.То есть родная версия все равно будет иметь приоритет.Вы можете обойти это, установив пакет в слое, который требует, чтобы aws-sdk использовал относительный путь ('../aws-sdk') и повторно экспортировал его как другое имя пакета, и вместо этого использовал этот пакет.

...