Моя лямбда-функция запускается из очереди SQS, получая пакеты по 10 штук за раз. Я хочу перебрать эти записи очереди и вставить каждую в DynamoDB.
Код для функции Lambda выглядит следующим образом:
const AWS = require('aws-sdk');
AWS
.config
.update({accessKeyId: process.env.AWS_KEY, secretAccessKey: process.env.AWS_SECRET});
AWS
.config
.update({region: "us-west-1"});
exports.handler = async(event) => {
///some other stuff to set up the variables below
event
.Records
.forEach((record) => {
var docClient = new AWS
.DynamoDB
.DocumentClient({convertEmptyValues: true, endpoint: "dynamodb.us-west-1.amazonaws.com"});
var db_params = {
TableName: entity,
Key: entityKey,
"UpdateExpression": update_expression,
"ExpressionAttributeNames": expression_attribute_names,
"ExpressionAttributeValues": expression_attribute_values,
"ReturnValues": "ALL_NEW"
};
console.log('executing updateObjectPromise');
docClient
.update(db_params)
.promise()
.then((item) => {
console.log(entity + " inserted");
console.log(item);
return item;
})
.catch((error) => {
console.log("ERROR: ");
console.log(error);
return error;
});
console.log("end of function");
});
};
Этот код повторяется, но обещание обновления никогда не запускается и не завершается. await
не работает, потому что итератор не асинхронный. Я попытался использовать пакет async npm и асинхронный итератор, но даже при использовании await вызов update дает то же самое поведение. Похоже, что бы я ни делал, вызов либо никогда не запускается, либо не завершается до завершения функции. Я не нашел примеров, чтобы кто-нибудь делал что-то подобное. Кто-нибудь может помочь?