#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.html2. Я пробовал ‘2012-08-10’ и ‘2012-10-08’, но все равно получаю ту же ошибку
Ответ №1:
AWS еще не обновила время выполнения lambda до последней версии aws-sdk, используемая в настоящее время версия не содержит транзакций dynamodb.
В настоящее время, если вы хотите использовать транзакции, вам нужно будет объединить текущую версию sdk с вашим lambda или поместить ее в слой.
Примечание: При использовании aws-sdk на уровне возникают сложности. То есть собственная версия по-прежнему будет иметь приоритет. Вы можете обойти это, установив пакет на уровне, для которого требуется aws-sdk, используя относительный путь (‘../ aws-sdk’) и повторно экспортируя его как другое имя пакета, и вместо этого используйте этот пакет.
Ответ №2:
Используйте transactWrite
вместо transactWriteItems
, если вы используете DocumentClient.