Создание бессерверного рабочего процесса с использованием AWS Step Functions

Недавно мы создали полностью бессерверное приложение для распространения видео / мультимедиа для одного из наших клиентов. Приложение использует комбинацию Serverless Framework, AWS S3, Lambda, API Gateway, X-Ray, Lambda Layers, Pinpoint, AppSync и множество других сервисов.

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

Ранее мы делали то же самое с помощью CloudWatch Events, где мы планируем несколько лямбда-выражений для различных задач и рассылаем электронные письма и уведомления в конвейере. Однако это означает больше, чем несколько движущихся частей, нам нужно управлять CloudWatch Events, Lambdas, которые извлекают данные для каждого пользователя, не говоря уже о проблеме часового пояса, поскольку нам нужно было отправлять уведомления в час X для каждого пользователя.

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

Поэтому для этого приложения мы решили перейти к персонализированной логике, которая может выполняться независимо и позволяет нам управлять вещами в структурированном виде. И мы все еще искали вариант без сервера.

Что такое AWS Step Functions

AWS Step Functions позволяет координировать несколько сервисов AWS в бессерверные рабочие процессы, чтобы вы могли быстро создавать и обновлять приложения. Используя Step Functions, вы можете разрабатывать и запускать рабочие процессы, которые объединяют такие сервисы, как AWS Lambda и Amazon ECS, в многофункциональные приложения. Рабочие процессы состоят из серии шагов, при этом выходные данные одного шага служат входными данными для следующего.

Поскольку все наше приложение уже построено с использованием нескольких лямбда-выражений, это был справедливый выбор.

Как это бессерверное !!

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

Стоимость пошаговых функций

Уровень бесплатного пользования Step Functions включает 4000 бесплатных переходов между состояниями в месяц. После этого 0,025 USD за 1000 переходов между состояниями. Цены варьируются от региона к региону, поэтому проверьте таблицу цен для своего целевого региона.

Например, вы создаете простые пошаговые функции в регионе Восток США с 2 переходами. Начало - ›Hello World -› Конец, и вы запускаете этот поток 1000 раз в день, 30 дней в месяц.

2 перехода * 1000 раз * 30 дней = 60000 переходов в месяц

60000 переходов в месяц - 4000 бесплатных переходов в месяц = ​​56000

56000 оплачиваемых переходов * 0,000025 доллара США = 1,4 доллара США в месяц

Примечание. Это просто стоимость Step Functions и не включает затраты, понесенные для любых других сервисов AWS.

Сценарий использования

Мы рассмотрим простой пример использования этого поста. Это был четверг, когда я решил написать это, поэтому мы создадим простой сервис для «Уже пятница !!».

Наша служба API Gateway вызовет Lambda, чтобы проверить, сегодня пятница или нет. Если это так, он вернет Success, в противном случае он вызовет функции Step, чтобы запланировать напоминание, когда оно достигнет пятницы.

Шаги

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

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

Функции

Теперь давайте построим функцию. Для этого сервиса нам понадобятся две функции. 1) для проверки текущего дня и 2) для отправки уведомления. Вот как я это делаю, чтобы не усложнять.

Примечание. Как видите, этот код не подходит для часовых поясов.

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

{
  "status": false,
  "today": "Sat",
  "nextDay": 1,
  "wait": "2019-05-31T08:41:58.642Z"
}

Шаги и функции вместе

Когда вы выполняете пошаговую функцию, вы можете видеть отдельное состояние выполнения из консоли.

Наша функция Lambda, которая отвечает за проверку дня, а также за генерацию отметки времени ожидания в случае, если сегодня не пятница.

В консоли Step Functions вы можете проверить прогресс отдельного выполнения. Когда вы щелкаете по одному из шагов, вы также можете увидеть, что является входом, выходом или исключением для этого шага.

Что дальше!!!

Это, вероятно, чрезвычайно простой пример, но с его помощью мы можем делать прекрасные вещи.