Как правильно проверить файл в корзине AWS S3

#javascript #amazon-web-services #amazon-s3

#javascript #amazon-веб-сервисы #amazon-s3

Вопрос:

У меня есть конвертер, я добавил файл во входную корзину, затем AWS Lambda конвертирует этот файл в другой формат, а затем добавляет его в выходную корзину, после чего я загружаю этот файл. Если файл имеет небольшой размер, преобразование выполняется быстро, но если файл имеет большой размер, это может занять много времени. Как правильно проверить, есть ли этот файл?

Я просто рекурсивно использую функцию для проверки:

 convertingFile(fileName) {
  this.isConverting = true

  const params = {Bucket: BUCKET_OUTPUT_NAME}

  this.s3Client.listObjects(params)
  .promise()
  .then(data => {
    for (let file of data.Contents.values()) {
      if (file.Key === fileName) {
        console.log('There is the file: '   fileName   ' in the bucket')
        this.isConverting = false
        this.downloadFile(fileName)
      }
    }

    if (this.isConverting) {
      console.log('There is no the file: '   fileName   ' in the bucket, try to find again')
      this.convertingFile(fileName)
    }
  }).catch(err => console.log(err))
}
 

Но это делает много запросов. Как сделать это лучше?

Ответ №1:

Это действительно зависит от того, как структурировано ваше приложение, но я бы рекомендовал отделить часть, которая загружает обработанный файл, от отдельной функции Lambda.

Таким образом, у вас будет 2 простых варианта:

  1. Создайте уведомление S3 для создания объекта и отреагируйте на него: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html
  2. Отправьте сообщение «преобразование выполнено» в очередь SQS из той части приложения, которая выполняет преобразование, включите в него ключ объекта S3. Затем настройте lambda для получения сообщений из очереди.

Конечно, есть и другие возможности, но это всего лишь общая идея.