Заставьте AWS Lambda отправить файл обратно после нескольких минут обработки

#node.js #aws-lambda #httprequest #aws-api-gateway

Вопрос:

У меня есть приложение node, которое берет URL-адрес, соскабливает текст с помощью puppeteer и переводит его с помощью deepl, прежде чем отправить мне результат в txt-файле. Он работает, как и ожидалось, локально, но, имея много URL-адресов для посещения и желая учиться, я пытаюсь заставить это приложение работать с AWS Lambda и изображением докера.

Я думал об использовании запроса GET/POST для отправки URL-адреса на шлюз API, чтобы запустить мою лямбду и дождаться, пока она отправит мне обратно файл txt. Проблема в том, что весь процесс занимает 2/3 минуты, чтобы завершить и отправить файл обратно. Это не проблема локально, но я знаю, что вам не следует ждать http-запроса в течение 3 минут перед возвращением.

Я действительно не знаю, как решить эту проблему. Должен ли я создать локальный сервер и заставить lambda отправить запрос на мой ip-адрес, как только это будет сделано?

Я здесь в растерянности.

Заранее спасибо!

Ответ №1:

Можно увидеть несколько альтернатив тому, что кажется проблемой асинхронной обработки.

Вставьте в лямбду необходимые данные (через API, SDK или CLI), а затем попросите ее записать свои результаты в корзину S3. Можно было бы асинхронно опросить корзину s3 для получения результатов и удалить их, очевидно, для этого требуются некоторые сценарии.

Другой подход состоял бы в том, чтобы лямбда-код публиковал результаты в теме SNS, на которую вы подписались.

Тем не менее, я не совсем уверен, что подразумевается под локальным IP-адресом, но я бы избегал передачи данных непосредственно на самоуправляемый сервер (или ваш локальный IP-адрес), скорее я хотел бы использовать один из сервисов «развязки» AWS, таких как SNS, SQS или даже S3, чтобы разделить этапы обработки. Таким образом, можно делать много запросов и извлекать данные по мере необходимости.

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

1. Спасибо вам за ваш ответ! Я собирался заставить свою лямбду хранить ответ в MongoDB Atlas, чтобы запросить его позже, но вы правы, зачем покидать среду AWS. Спасибо, хорошего дня!