#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 простых варианта:
- Создайте уведомление S3 для создания объекта и отреагируйте на него: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html
- Отправьте сообщение «преобразование выполнено» в очередь SQS из той части приложения, которая выполняет преобразование, включите в него ключ объекта S3. Затем настройте lambda для получения сообщений из очереди.
Конечно, есть и другие возможности, но это всего лишь общая идея.