У AWS SWF есть активность, ожидающая, пока определенный файл S3 не существует - PullRequest
1 голос
/ 20 ноября 2019

У меня есть рабочий процесс SWF, в котором есть два действия.

В первом действии (A1) просто вызывается API службы, который, в свою очередь, запускает приложение, которое (в конечном итоге) загружает файл в определенную корзину S3.

Загрузка второго действия (A2)этот файл и оценивает содержащиеся в нем данные.

Моя проблема заключается в том, что у меня неоднократно происходит сбой А2 и повторная попытка, поскольку файл S3 отсутствует, пока файл не загружен приложением.

А1 простозапускает внешнее приложение и завершает работу сразу же после получения ответа «Приложение успешно запущено», поэтому ожидание A2 на Promise, возвращаемом A1, не заставляет A2 ждать, пока файл не окажется в S3.

Мое первоначальное решение:отловить исключение, вызванное отсутствием файла, и повторить попытку в рамках действия, но это плохая альтернатива, поскольку действие будет продолжать выполняться и мешать другим рабочим процессам, работающим на том же компьютере, выполнять полезную работу.

Я думаю, что идеальным решением было бы «впасть в спячку»и "просыпаться" каждые X минут, чтобы увидеть, есть ли файл там или нет таким образом, который потенциально не истощает другие рабочие процессы.

Возможно ли это?

1 Ответ

0 голосов
/ 21 ноября 2019

Альтернативой может быть разделение двух ваших шагов:

  1. Позвоните в службу API. Для этого даже не нужно использовать SWF.

  2. Создание Amazon S3 Event, которое запускает функцию AWS Lambda при создании файла в корзине. Затем лямбда-функция может обработать файл.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...