Синхронный вызов пошаговой функции из лямбда-функции

У меня есть лямбда-функция, которая запускается FIFO SQS. Мне нужен только один экземпляр функции. Функция вызывает конечный автомат, и для завершения конечного автомата требуется больше времени, чем для лямбда-функции. Я хочу, чтобы лямбда-функция завершалась только после того, как пошаговая функция завершила свое выполнение.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
3 234
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

Activities are an AWS Step Functions feature that enables you to have a task in your state machine where the work is performed by a worker that can be hosted on Amazon Elastic Compute Cloud (Amazon EC2), Amazon Elastic Container Service (Amazon ECS), mobile devices—basically anywhere.

stackoverflow.com/a/65137575/8553816, опубликованный внизу, теперь пошаговые функции поддерживают синхронные транзакции.
Khwaja Sanjari 19.03.2021 18:56

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

Это общепринятый шаблон, но он имеет довольно много движущихся частей:

  • Настройте тему SNS; результаты конечного автомата будут опубликованы на нем
  • Во время инициализации вашей лямбды:
    • генерировать случайный "идентификатор шлюза"
    • создать очередь SQS
    • подписаться на очередь SQS, фильтрация по идентификатору шлюза
  • Когда ваша Lambda вызывает конечный автомат:
    • генерировать случайный «идентификатор корреляции»
    • включать идентификаторы шлюза и корреляции во входные данные конечного автомата
  • В качестве последнего шага конечного автомата опубликуйте результат в теме SNS. Включите в ответ идентификаторы шлюза и корреляции.
  • В лямбде после отправки выполнения конечного автомата:
    • ждать сообщения в очереди SQS.
    • подумайте о тайм-аутах по этому поводу. Вы должны установить тайм-аут для ответа. Поэтому вы можете установить время жизни конечного автомата — если его результат будет бесполезен после того, как эта лямбда умрет.
    • Когда оно прибудет, убедитесь, что его идентификатор корреляции совпадает с вашим, а затем используйте данные в этом сообщении в качестве ответа.

AWS Express Step Functions теперь поддерживает синхронные вызовы.

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

Другие вопросы по теме