Step Functions: Wait for Task token, Activity Flashcards
В чём суть Wait for Task token?
Можно заставить Step Function задачу … перед дальнейшним выполнением.
Например, ….
Тогда выполнятся следующие шаги: …
дожидаться какого-то события
отправить сообщение в SQS
- Отправка сообщения происходит ассинхронно
- Через какое-то время Consumer poll’ит сообщение из SQS
- После обработки сообщения Consumer отправляет запрос обратно в Step Function
- Получив запрос от Consumer’а, Step Function продолжает выполнение
Что такое Task Token?
Как он задействован в схеме “Wait for Task token”?
Он секретный?
Чтобы внешний сервис (SQS Consumer в данном случае) знал, какую Task’у ему запустить, то по всей этой цепочке вызовов нужно передать идентификатор Task’а.
Идентификатор задачи называется Task Token.
Он передаётся в MessageBody
Task Token ≠ secret token (ничего секретного нет, просто payload, event)
Как Step Function принимает информацию о необходимости продолжить работу?
Какая это может быть информация?
Какой API call используется?
Если SQS Consumer обработал сообщение
- успешно, то он выполняет
SendTaskSuccess
API вызов - НЕ успешно, то -
SendTaskFailure
API вызов
Где применим Wait For Task Token
- Ассинхронная отправка сообщения в SQS (ждём, пока Consumer стянет и обработает сообщение)
- Ждём Human Approval
- Ждём завершения вызова 3-rd party системы или любого AWS сервиса
Цель использования Wait For Task Token
Благодаря этому механизму при построении своей State Machine
мы можем выполнить вызов ВНЕШНЕЙ системы АССИНХРОННО.
Когда внешняя система закончит свою работу, то она уведомит наш State Machine
(уточнив при этом успешно ли выполнена работа).
И тогда State Machine продолжит выполнение с того же Task’а, на котором она остановилась.
Зачем нужен Activity? Кто может быть Activity Worker’ом?
Есть возможность выполнять продолжительную задачу на EC2 instance, Lambda.
Эти Activity Worker’ы будут poll’ить (спрашивать, какие) задачи через GetActivityTask
API вызов.
Как происходит Уведомление о завершении работы?
После того, как Activity Worker выполнил задачу, он отправит response о своём успешном/failed выполнении через вызов SendTaskSuccess или SendTaskFailure API вызов.
Эти API вызовы также использует “Wait For Task Token” SQS Consumer
Разница между Activity и “Wait for Task Token”?
-
Activity Worker
сам PULL’ит Step Функцию. Он сам спрашивает, есть ли для него работа. - Step Функция PUSH’ит задачу в SQS очередь и даёт её callback (
Wait for Task Token
).
Параметры Activity Worker’а похожи на …
Например …
Конфигурация Activity Worker’а похожа на конфигурацию Consumer’а очереди.
-
TimeoutSeconds
- максимально время, которое задача может быть в статусе in progress до того момента, как она будет считаться failed -
HeartBeatSeconds
- интервал времени, в течение которого Activity Worker должен слать запросы (SendTaskHeartBeat
API call) о своей жизнеспособности.
Если HeartBeatSeconds установлен в 10 секунд, то …
Activity Worker может отчитываться, например, каждые 5 секунд
Активность может занять до …, если TimeoutSeconds …, а Activity Worker …
Если TimeoutSeconds выбран очень долгим, и Activity Worker исправно шлёт HeartBeat отчёты, то Активность может занять до 1 года