Я использую лямбда-триггеры для обнаружения вставки в таблицу DynamoDB (твиты). После запуска я хочу взять сообщение в событии и получить настроение для него, используя Comprehend . Затем я хочу обновить вторую DynamoDB таблицу (SentimentAnalysis), где я добавляю +1 к значению, зависящему от настроения.
Это работает нормально, если я вручную вставляю один элемент, но я хочу иметь возможность использовать Twitter API для вставки массовых данных в мою таблицу DynamoDB и анализировать каждый твит на предмет его настроений. Лямбда-функция работает нормально, если счетчик, указанный в параметрах Twitter, равен <= 5, но все вышеперечисленное вызывает проблему с обновлением в таблице SentimentAnalysis, и вместо этого триггер продолжает повторяться без признаков прогресса или остановки. </p>
Это мой лямбда-код:
let AWS = require("aws-sdk");
let comprehend = new AWS.Comprehend();
let documentClient = new AWS.DynamoDB.DocumentClient();
exports.handler = (event, context) => {
event.Records.forEach(record => {
if (record.eventName == "INSERT") {
//console.log(JSON.stringify(record.dynamodb.NewImage.tweet.S));
let params = {
LanguageCode: "en",
Text: JSON.stringify(record.dynamodb.NewImage.tweet.S)
};
comprehend.detectSentiment(params, (err, data) => {
if (err) {
console.log("\nError with call to Comprehend:\n " + JSON.stringify(err));
} else {
console.log("\nSuccessful call to Comprehend:\n " + data.Sentiment);
//when comprehend is successful, update the sentiment analysis data
//we can use the ADD expression to increment the value of a number
let sentimentParams = {
TableName: "SentimentAnalysis",
Key: {
city: record.dynamodb.NewImage.city.S,
},
UpdateExpression: "ADD " + data.Sentiment.toLowerCase() + " :pr",
ExpressionAttributeValues: {
":pr": 1
}
};
documentClient.update(sentimentParams, (err, data) => {
if (err) {
console.error("Unable to read item " + JSON.stringify(sentimentParams.TableName));
} else {
console.log("Successful Update: " + JSON.stringify(data));
}
});
}
});
}
});
};
Это изображение успешного вызова, оно работает с первыми несколькими твитами
Это неудачный звонок сразу после первого изображения. Время запроса истекло