Выполнение функции AWS Lambda без печати всего результата

#node.js #amazon-web-services #amazon-s3 #aws-lambda

#node.js #amazon-веб-сервисы #amazon-s3 #aws-lambda

Вопрос:

Я пытаюсь прочитать содержимое всех файлов в корзине AWS S3 через AWS Lambda (используя Node). Я жестко запрограммировал ключ S3 в массиве для тестирования. Но результатом выполнения следующей функции является печать только частичного содержимого.

     var AWS = require('aws-sdk');
    var s3 = new AWS.S3();
    
    exports.handler = async  (event, context,callback) => {
       
       var AllKey=['Key1, 'Key2']
       
       AllKey.forEach(function(element) {
       (async () => {
      try {
        const file = await s3
          .getObject({ Bucket: 'mb2logs', Key: element })
          .promise();
        console.log(file.Body.toString('utf-8'));
      } catch (err) {
        console.log(err);
      }
    })();
        
       })
       

callback(null,{});
};
  

Комментарии:

1. У вашей функции есть тайм-аут? Может быть, вам нужно увеличить время ожидания, чтобы дать ему больше времени?

Ответ №1:

Мне кажется, что выполнение lambda может быть прекращено до завершения всех асинхронных операций. Вы должны вернуть обещание от обработчика, чтобы гарантировать, что асинхронные операции будут завершены. См. https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html

Для асинхронных обработчиков вы можете использовать return и throw для отправки ответа или ошибки соответственно. Функции должны использовать ключевое слово async, чтобы использовать эти методы для возврата ответа или ошибки.

Если ваш код выполняет асинхронную задачу, верните обещание, чтобы убедиться, что он завершает выполнение. Когда вы разрешаете или отклоняете обещание, Lambda отправляет ответ или ошибку вызывающему.