Возникли некоторые проблемы с DynamoDB.transactWriteItems

#amazon-web-services #aws-lambda #amazon-dynamodb

#amazon-веб-сервисы #aws-лямбда #amazon-dynamodb

Вопрос:

Я пытаюсь использовать транзакции 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. Верен ли ваш apiVersion? Документация, похоже, предполагает, что так и должно быть 2012-08-10 . docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html

2. Я пробовал ‘2012-08-10’ и ‘2012-10-08’, но все равно получаю ту же ошибку

Ответ №1:

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

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

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

Ответ №2:

Используйте transactWrite вместо transactWriteItems , если вы используете DocumentClient.