Загрузка и обработка файлов через AWS Lambda с ответом

#python #amazon-web-services #amazon-s3 #aws-lambda #aws-sdk-js

Вопрос:

Моя цель-загрузить zip-файл, содержащий проект python, обработать его и вернуть json. Для этого я реализовал веб-приложение, которое извлекает zip-файл с помощью перетаскивания. Я хочу обработать этот zip-файл с помощью AWS Lambda и вернуть json в веб-приложение, но, поскольку Lambda должна получать, распаковывать и читать файлы, это заставляет меня использовать S3, я думаю. Я могу выполнить прямую загрузку из моего javascript веб-приложений в S3 и позволить S3 запускать Лямбда-код для каждого загруженного файла. Но затем я теряю эту типичную семантику ответа на запрос между моим веб-приложением и Лямбдой, поскольку триггер S3 для Лямбды асинхронен, и таким образом Лямбда не будет знать, кому отвечать.

Я предполагаю, что мой вопрос в какой-то степени концептуальен, так как я могу в принципе отправить запрос из своего веб-приложения в любой форме или форме, чтобы лямбда могла обработать файл, отправленный моим веб-приложением, и отправить ответ в виде json, содержащего некоторую информацию, обратно в веб-приложение?

Ответ №1:

На самом деле здесь не может быть синхронной обработки. API-шлюз ограничит время отклика на Лямбду до 29 секунд, поэтому, если ваши файлы действительно малы, вы, скорее всего, не сможете уложиться в этот период.

Я предлагаю сделать следующее:

Загрузите файл в S3 и запустите Лямбду после успешного завершения загрузки. Обработайте файл с помощью лямбда-функции (она может выполняться в течение 15 минут). Когда обработка завершится, сохраните выходные данные в известном месте, например в таблице DynamoDB. Вы можете опросить это местоположение с внешнего интерфейса, чтобы узнать, завершена ли обработка.