Вопросы и ответы по AWS Step Functions

Обзор

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

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

Сервис Step Functions автоматически запускает каждый шаг, отслеживает его выполнение и при наличии ошибок перезапускает его. Таким образом можно проверить правильность работы приложения. Step Functions ведет журнал состояний каждого шага, чтобы при появлении ошибок можно было быстро определить и устранить их причину. Чтобы изменить или добавить шаг, не требуется даже писать код. Это позволяет легко развивать и совершенствовать приложение.

Разбиение приложения на сервисы (или шаги) гарантирует, что сбой одного компонента не вызовет сбой системы в целом. Каждый компонент масштабируется независимо от других, и его можно обновлять без повторного развертывания системы целиком после каждого изменения.

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

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

  • Обработка данных: консолидация данных из множества данных в объединенные отчеты, уточнение и уменьшение больших наборов данных и перевод их в форматы, пригодные для использования, итерирование и обработка миллионов файлов в корзине простого сервиса хранения данных Amazon (S3) с параллельными потоками или координация многоэтапных рабочих процессов аналитики и машинного обучения.
  • Создание бессерверных приложений на базе генеративного искусственного интеллекта: использование Step Functions для организации взаимодействия с базовыми моделями Amazon Bedrock, быстрого создания цепочек, точной настройки и расширения возможностей более 220 сервисов AWS.
  • Автоматизация DevOps и ИТ: создание средств для непрерывной интеграции и непрерывного развертывания или разработка приложений, управляемых по событиям, которые автоматически реагируют на изменения в инфраструктуре.
  • Интернет-коммерция: автоматизация критически важных бизнес-процессов, например процессов выполнения заказов и отслеживания запасов.
  • Веб-приложения: внедрение надежных процессов регистрации и аутентификации пользователей.

Подробнее см. в примерах использования AWS Step Functions и отзывах клиентов об этом сервисе.

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

Состояния могут выполнять работу, делать выбор, передавать параметры, инициировать параллельное выполнение, управлять тайм-аутами, а также завершать рабочий процесс (успешно либо со сбоями).

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

Подробнее см. в разделе о том, как работает Step Functions, в руководстве разработчика по Step Functions.

Вы можете управлять любым сервисом AWS благодаря интеграции с сервисами и любым компонентом самостоятельно управляемого приложения с помощью задач действий.

Интеграция с сервисами позволяет создавать конструкты вызовов к сервисам AWS и включать ответы в рабочие процессы. Интеграция сервисов AWS-SDK дает возможность вызвать одно из более 9000 действий AWS API из более чем 200 сервисов непосредственно из своего рабочего процесса.

Кроме того, оптимизация интеграции сервисов упрощает использование распространенных сервисов, таких как AWS Lambda, Amazon Elastic Container Service (Amazon ECS), AWS Glue или Amazon EMR, за счет таких возможностей, как интеграция политик IAM и шаблон RunAJob, который будет автоматически ожидать завершения выполнения асинхронных заданий.

Задачи действий объединяют интеграцию с исполнителями действий, которые выполняются в выбранном вами расположении, в том числе в Amazon Elastic Compute Cloud (Amazon EC2), Amazon ECS, на мобильном устройстве или на локальном сервере. Исполнитель действия опрашивает сервис Step Functions на наличие работы, принимает входные данные от сервиса Step Functions, выполняет работу, используя ваш код, и возвращает результаты. Так как исполнители действий запрашивают работу, то довольно легко использовать исполнители, развернутые за брандмауэром.

В конечном автомате в сервисе AWS Step Functions можно сочетать интеграцию сервисов и задачи действий. Кроме того, в приложениях в сервисе Step Functions можно сочетать исполнители действий, выполняемые в центре обработки данных, с задачами сервисов, выполняемыми в облаке. Исполнители в центре обработки данных будут работать как обычно, параллельно с любыми задачами сервисов в облаке.

Начать работу с сервисом Step Functions можно несколькими перечисленными ниже способами.

Конечные автоматы в сервисе AWS Step Functions заданы с помощью JSON с использованием описательного языка Amazon States Language.

Чтобы создать исполнитель действия, можно использовать любой язык программирования, так как обмениваться данными с сервисом Step Functions можно с помощью API веб-сервисов.

Можно также использовать AWS SDK на удобном языке программирования. Lambda поддерживает код, написанный на языках Node.js (JavaScript), Python, Golang (Go) и C# (с использованием среды выполнения .NET Core и других языков). Дополнительные сведения о модели программирования Lambda см. в руководстве разработчика Lambda.

Вы можете комбинировать два типа рабочих процессов.

  • Express Workflows могут выполняться как дочерние рабочие процессы Standard Workflows. Express Workflow инициируется из состояния Task в родительском рабочем процессе оркестрации и в целом завершается успехом или неудачей с точки зрения родительского процесса. Это зависит от политики повторных попыток родительского процесса для задачи.
     
  • Также можно вызывать Express Workflows из Express Workflow, если все рабочие процессы не превышают ограничение продолжительности родительского процесса. Вы можете разложить рабочие процессы таким образом, если сценарий использования предусматривает сочетание шагов с длительным временем выполнения и однократных высокоскоростных с коротким жизненным циклом.

Step Functions включает в себя Состояние сопоставления для динамического параллелизма. Состояние сопоставления использует два режима работы (встроенный и распределенный), и оба этих режима выполняют одни и те же шаги для сбора элементов. Сопоставление во встроенном режиме может поддерживать одновременное выполнение 40 параллельных ветвей и историю с пределом 25 000 событий или приблизительно 6 500 изменений состояния в рабочем потоке. В распределенном режиме могут одновременно выполняться до 10 000 ветвей. Сопоставление распределенного режима оптимизировано Amazon S3, что помогает ускорить итерации по объектам в корзине S3. См. вопросы и ответы в разделе об интеграции. Итерации в распределенном режиме разбиваются на параллельно выполняемые действия, что помогает преодолеть ограничения рабочей нагрузки и пределом истории выполненных действий. Также вы можете указать, будет ли каждая итерация выполняться стандартным потоком операций, который является идемпотентным, или экспресс-потоком операций, который отличается более высокой скоростью и более низкой ценой, но не является идемпотентным. Подробнее о состоянии сопоставления.

Теперь для определения переменных рабочего процесса можно использовать новое поле Assign, а затем ссылаться на эти переменные, используя синтаксис $varName. Если StateK нужно ссылаться на данные, созданные ранее в StateA, необходимо явно передать данные через все промежуточные состояния без переменных, тогда как в случае с переменными значение присваивается переменной в состоянии StateA, после чего необходимо сослаться на переменную в StateK.

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

Да. Переменные можно добавить в любой существующий рабочий процесс, присвоив переменные. Усовершенствованные преобразования данных с помощью JSONata доступны в любом существующем рабочем процессе, определив "QueryLanguage":"JSONata" как язык запросов для отдельных состояний или для всего рабочего процесса. Действующие клиенты с производственными рабочими нагрузками могут использовать преимущества переменных и JSONata в существующих рабочих процессах, а также использовать усовершенствованные директивы данных в новых рабочих процессах. Совместное применение возможностей переменных и JSONata упрощает обучение для новых клиентов по мере внедрения Step Functions в текущей версии ASL. При таком подходе все будущие функции Step Functions будут доступны всем клиентам без необходимости обновлять рабочие процессы для использования новой версии ASL.

Вместо использования JSONPath и встроенных функций для выбора и преобразования данных, как это делается сегодня, вы будете использовать JSONata. Чтобы написать выражение JSONata с использованием "QueryLanguage":"JSONata", выделите его с помощью {% %}: «{% JSONata expression %}». Таким образом, чтобы создать конструкт даты на сегодня, запишите выражение так: "DateStamp": "{% $now() %}".

JSONPath использует различные комбинации пяти основных полей для запроса и преобразования данных в каждом состоянии (inputPath, Parameters, ResultSelector, ResultPath и outputPath), о чем разработчикам сложно рассуждать. Теперь, с помощью JSONata, можно использовать "QueryLanguage":"JSONata", заменив пять полей двумя новыми полями (Arguments и Output). Новое поле Arguments предоставляет дополнительные возможности для построения значения с целью отправки в API или вспомогательный рабочий процесс, а новое поле Output предоставляет дополнительные возможности для построения выходных данных состояния. Оба поля принимают JSONata для обработки данных. "QueryLanguage":"JSONata" предоставляет упрощенный набор правил, в которых больше не используется соглашение «.$» для имен полей. Вместо этого выражения JSONata помещаются в {% %}. Теперь условия состояния Choice можно записать в одной строке, используя новое поле Condition. Поле Condition принимает либо логическое значение, либо строковое значение, которое должно быть выражением JSONPath или JSONata, в зависимости от настройки QueryLanguage.

Сравнения

Сервис AWS Step Functions рекомендуется использовать для координации компонентов сервисов при разработке высокомасштабируемых приложений, поддерживающих аудит. Если же необходима надежная, высокомасштабируемая выделенная очередь для отправки, хранения и приема сообщений в ходе взаимодействия между сервисами, лучше использовать сервис Amazon Simple Queue Service (Amazon SQS).

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

Сервис Step Functions рекомендуется использовать при разработке любых новых приложений, так как он обеспечивает более продуктивный и гибкий подход к координации компонентов приложения с помощью наглядного представления рабочих процессов. Если в процессах необходимо использовать внешние сигналы или предполагается выполнять дочерние процессы, которые возвращают результат родительскому процессу, рекомендуется использовать Простой сервис рабочих процессов Amazon (Amazon SWF).

В сервисе SWF вместо того, чтобы писать конечные автоматы в декларативном формате JSON, достаточно написать программу принятия решений, чтобы отделить рабочие шаги от шагов принятия решений. Это обеспечивает полный контроль над логикой механизмов оркестрации, но усложняет разработку приложений. Программы для принятия решений можно написать на любом языке либо, используя среду Flow, составить ее из программных элементов, которые организуют асинхронное взаимодействие автоматически.

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

Интеграция AWS Step Functions с адресами HTTPS позволит запускать сервисы на основе HTTPS и получать ответ, который можно использовать для управления потоком исполнения в соответствии с бизнес-логикой. Amazon EventBridge специализируется на маршрутизации событий, а Step Functions – на оркестрации рабочих процессов и управлении состоянием. Интеграция конечных точек API EventBridge и Step Functions с адресами HTTPS может поддерживать подключение для аутентификации, что позволяет повторно использовать учетные данные аутентификации в разных сервисах. Оба сервиса можно использовать вместе для создания высокомасштабируемых и надежных распределенных приложений.

Интеграция

Рабочие процессы, созданные с помощью Step Functions, могут подключаться к более 200 сервисам AWS и координировать их, используя возможности интеграции. Ниже приведены несколько примеров.

  • Вызов функции AWS Lambda
  • Запуск задания ECS или AWS Fargate
  • Получение существующего элемента из таблицы Amazon DynamoDB и размещение нового элемента в таблице DynamoDB
  • Отправка задания Пакета AWS и ожидание его выполнения
  • Вызов базовой модели Amazon Bedrock
  • Публикация сообщения в теме SNS
  • Отправка сообщения в очередь Amazon SQS
  • Запуск задания AWS Glue
  • Создание задания Amazon SageMaker для обучения модели машинного обучения или пакетного преобразования набора данных

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

Для ознакомления с наиболее распространенными случаями использования Step Functions посетите страницу примеров использования, где также представлена визуализация их архитектуры.

Используя интеграцию AWS Step Functions с адресами HTTPS, вы можете напрямую интегрироваться с сервисами на основе HTTP, включая приложения SaaS. С помощью визуального интерфейса можно создавать и координировать распределенные приложения, состоящие из сервисов AWS и приложений SaaS.

Можно использовать API TestState для тестирования одного этапа рабочего процесса, что позволяет ускорить циклы обратной связи и разработку. TestState позволяет напрямую вызывать службы и адреса, изменять входные данные для имитации различных сценариев и просматривать ответ. Доступ к TestState можно получить через Workflow Studio, что упрощает тестирование во время проектирования без необходимости развертывать рабочий процесс. TestState принимает одно определение и ввод состояния, а затем синхронно возвращает выходные данные состояния вместе с их промежуточными преобразованиями. После запуска рабочего процесса можно анализировать и отлаживать выполнения с помощью Журналов Amazon CloudWatch, AWS X-Ray и непосредственно в консоли Step Functions с помощью визуального интерфейса оператора, помогающего быстро выявлять проблемные области. 

Вы можете создавать рабочие потоки с помощью Состояния сопоставления в распределенном режиме для обработки больших объемов данных, например журналов, медиафайлов, торговых транзакций или данных с датчиков IoT. Step Functions будут проводить итерации по элементам и мгновенно начнут параллельное выполнение рабочих потоков, что позволит вам обеспечить обработку данных по требованию в любом масштабе. Состояние распределенного режима оптимизировано для работы с S3. В качестве входных данных вы можете указать корзину S3 с использованием критериев фильтрации, файла манифеста S3, коллекции JSON или CSV-файла, который хранится в S3. Также можно указать корзину S3 для выходных данных, получаемых в результате обработки распределенного сопоставления.

API Step Functions можно связать с API шлюзом Amazon, чтобы эти API вызывали конечные автоматы при отправке HTTPS-запроса в определенный метод API.

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

Можно выполнять даже бессерверные асинхронные вызовы API сервисов, используемых приложением. Дополнительные сведения см. в нашем учебном пособии Creating a Step Functions API Using API Gateway.

Хореграфия и оркестровка – это две разные модели того, как распределенные сервисы могут взаимодействовать друг с другом. В оркестровке связь контролируется более жестко, а Step Functions, сервис оркестровки, координирует взаимодействие и порядок вызова сервисов.

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

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

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

Да, Step Functions – это бессерверный сервис оркестрации. Сервис Step Functions автоматически масштабирует операции и используемые вычислительные ресурсы, чтобы обеспечить достаточную производительность приложения при изменении нагрузки. Сервис Step Functions имеет встроенные функции отказоустойчивости и поддерживает необходимые объемы вычислительных ресурсов в различных зонах доступности в каждом из регионов, защищая рабочие процессы приложения от неисправностей отдельных единиц оборудования или сбоев на уровне центров обработки данных. Это позволяет обеспечить доступность как самого сервиса, так и запускаемых в нем приложений.

Step Functions предлагает модель тарификации «плата за использование» для повышения гибкости и оптимизации затрат. Подробнее о ценах на Step Functions.

Для мониторинга приложений сервис AWS Step Functions отправляет метрики в сервисы Amazon CloudWatch и AWS CloudTrail. Amazon CloudWatch собирает и отслеживает метрики, настраивает предупреждения и автоматически реагирует на изменения в сервисе AWS Step Functions.

Сервис CloudTrail регистрирует в качестве событий все вызовы API для сервиса Step Functions, включая вызовы из консоли Step Functions и вызовы из кода к API Step Functions. Кроме того, Step Functions поддерживает управляемые правила событий CloudWatch для каждого интегрированного сервиса в рабочем процессе, а также при необходимости создает правила CloudWatch Events и управляет ими в аккаунте AWS.

Дополнительные сведения см. в разделе о мониторинге и ведении журналов в руководстве разработчика по Step Functions.

По умолчанию рабочие процессы Express Workflows передают данные со всеми результатами в журналы CloudWatch Logs, включая входящие и выходящие данные, а также выполненные шаги рабочего процесса. Вы можете выбрать разные уровни ведения журнала: регистрировать только ошибки, отменить регистрацию входящих и выходящих данных. Рабочие процессы, которые исчерпали повторные попытки или имеют неуправляемое исключение, необходимо перезапустить.

В Step Functions оптимизирована интеграция с Amazon Bedrock. Вы можете вызывать базовые модели Bedrock непосредственно из рабочего процесса Step Functions, используя естественный язык. Это дает вам следующие возможности.   

  • Оптимизировать данные, обрабатываемые сервисом Step Functions, с помощью возможностей генеративного искусственного интеллекта, чтобы снизить сложность процессов обработки данных, таких как суммирование текста, генерация изображений или персонализация.
  • Извлекать информацию из баз данных, такую как последние цены на продукты и данные о персонализации пользователей, и использовать встроенные функции Step Functions для ввода ее в запрос, убедившись, что LLM использует самые актуальные данные для самого точного ответа.
  • Создавать вложения, используя Step Functions для просмотра и фрагментации документов, извлечения данных, а затем преобразования данных из цифрового текста во вложение в виде многоэтапного процесса. Это можно сделать повторяющимся действием.
  • Использовать рабочие процессы Step Function для быстрого образования цепочки действий. Вы можете организовать несколько вызовов LLM и выбрать наилучшую модель для каждого этапа цепочки, сформировав индивидуальную цепочку этапов обработки и составив более контекстно-ориентированные и точные ответы на основе базовой модели.
  • Налаживать взаимодействие задач с оператором в контуре управления (HITL) с помощью генеративного искусственного интеллекта, чтобы модерировать ответы во избежание галлюцинаций или использовать логику для обработки ответов, которые не поддерживаются базовой моделью.

Безопасность

Сервис Step Functions также поддерживает использование адресов VPC (VPCE) с помощью AWS PrivateLink. Вы можете обращаться к Step Functions с помощью функций AWS Lambda с поддержкой VPC и других сервисов AWS, минуя общедоступный Интернет.

Подробнее см. в руководстве разработчиков по Step Functions в разделе об адресах VPC Amazon для Step Functions.

Соответствие требованиям

Step Functions соответствует требованиям HIPAA, FedRAMP, SOC, GDPR и другим распространенным стандартам. Подробный список поддерживаемых стандартов соответствия см. на веб-странице с информацией о безопасности Облака AWS.