Теория


Что такое Step Functions?


Из AWS Docs: Step Functions — это сервис бессерверной оркестровки, который позволяет комбинировать функции AWS Lambda и другие сервисы AWS для создания критически важных для бизнеса приложений. С помощью графической консоли Step Functions вы видите рабочий процесс своего приложения как серию управляемых событиями шагов. Step Functions основана на конечных автоматах и задачах. Конечный автомат — это рабочий процесс. Задача — это состояние в рабочем процессе, которое представляет собой единицу работы, которую выполняет другой сервис AWS. Каждый шаг рабочего процесса — это состояние.

С помощью встроенных элементов управления Step Functions вы проверяете состояние каждого шага рабочего процесса, чтобы убедиться, что ваше приложение работает в правильном порядке и должным образом. В зависимости от вашего варианта использования Step Functions может вызывать сервисы AWS, такие как Lambda, для выполнения задач. Вы можете создавать рабочие процессы для обработки и публикации моделей машинного обучения. Вы можете использовать Step Functions для управления сервисами AWS, такими как AWS Glue, для создания рабочих процессов извлечения, преобразования и загрузки (ETL). Вы также можете создавать длительные автоматизированные рабочие процессы для приложений, требующих взаимодействия с человеком.


Или простыми словами – сервис для управления вашими процессами.



Какие могут быть возможные варианты использования Step Functions?


  1. Оркестрация Lambda Functions

    image
  2. Разветвление

    image
  3. Обработка исключительных ситуаций(Retry or Catch)

    image
  4. Участие человека в процессе

    image
  5. Параллелелизм

    image

Типы процессов в Step Functions


  • Standard – нужны для процессов выполняющихся долгое время, имеет широкую поддержку сервисов и вариантов взаимодействия
  • Express – нужны для быстро выполняющихся процессов (5 минут), в ~20 раз экономии за миллион выполненных процессов. Имеет меньшую интеграцию с сервисами AWS

Типы интеграции с сервисами AWS


Request a response (default) — вызывает сервис и позволяет Step Functions перейти к следующему состоянию после получения ответа HTTP.

Run a job (.sync) — вызывает сервис и дожидается завершения задания.

Wait for a callback with a task token (.waitForTaskToken) — вызывает сервис с токеном задачи и дожидается возврата токена задачи с помощью обратного вызова.


Сравнение интеграции с сервисами AWS в Standard и Express типах


Supported Service Integrations for Standard
Service Request Response Run a Job (.sync) Wait for Callback (.waitForTaskToken)
Lambda ? ?
AWS Batch ? ?
DynamoDB ?
Amazon ECS/AWS Fargate ? ? ?
Amazon SNS ? ?
Amazon SQS ? ?
AWS Glue ? ?
SageMaker ? ?
Amazon EMR ? ?
CodeBuild ? ?
AWS Step Functions ? ? ?

Supported Service Integrations for Express
Service Request Response Run a Job (.sync) Wait for Callback (.waitForTaskToken)
Lambda ?
AWS Batch ?
DynamoDB ?
Amazon ECS/AWS Fargate ?
Amazon SNS ?
Amazon SQS ?
AWS Glue ?
SageMaker ?
Amazon EMR ?
CodeBuild ?
Step Functions ? ?

Хватит с тебя теории, пошли к примеру.


Теоретический пример


Для того чтобы получить хоть какое-то представление как выглядит сервис — рассмотрим Hello world-пример.


Предусловия

  1. AWS аккаунт
  2. Перейти в Step Functions service в AWS аккаунте

Итак, следующее что мы делаем:

  1. Переходим в “Create Step Functions”
  2. Define state machine = Author with code snippets
  3. Type = Standard
  4. Definition =

    {
      "Comment": "A Hello World example of the Amazon States Language using Pass states",
      "StartAt": "Hello",
      "States": {
        "Hello": {
          "Type": "Pass",
          "Result": "Hello",
          "Next": "World"
        },
        "World": {
          "Type": "Pass",
          "Result": "World",
          "End": true
        }
      }
    }


Нажимаем Start execution. Insert можно не передавать. Должны увидеть вот такую диаграмму:


image

Мои поздравления, вы создали простейшую Step Functions.


Вместо заключения


Если эта тема будет интересна, в следующей части создатим Step Functions с интеграцией AWS Lambda + SQS + SNS, как показано на диаграмме:


image

Ссылки на источники:


https://docs.aws.amazon.com/step-functions/