5 распространенных проблем с ступенчатой функцией
15 апреля 2022 г.Step Functions, бессерверный сервис конечного автомата от AWS. Вместе с DynamoDB, Lambda и API Gateway он формирует ядро бессерверных сервисов AWS. Если у вас есть задачи, состоящие из нескольких шагов, и вы хотите, чтобы они выполнялись в правильном порядке, Step Functions — ваш лучший выбор.
Он предлагает прямую интеграцию со многими сервисами AWS, поэтому вам не нужно использовать функции Lambda в качестве связующего звена. Это может** повысить производительность** конечного автомата и снизить его стоимость.
Но Lambda запускает ваш код, делая отладку гораздо более простой, чем запуск управляемой службы, которая по сути является черным ящиком. Это причина, по которой я пишу эту статью. Здесь вы найдете наиболее распространенные проблемы при работе с пошаговыми функциями, особенно при запуске сервиса.
1. Задача вернула результат, размер которого превышает максимально допустимое количество символов службы
Это довольно громоздкое сообщение об ошибке, но оно означает, что одна из полезных нагрузок, которые вы передаете между состояниями, превышает 256 КБ. Убедитесь, что вы не превышаете это ограничение, которое может быстро произойти при слиянии нескольких параллельных состояний.
Многие сервисы в AWS имеют строгие ограничения на данные, которые они могут обрабатывать. Это позволяет инженерам AWS оптимизировать эти сервисы и предлагать оплату по требованию за бессерверные сервисы. Но недостатком для вас, пользователя, является то, что эти ограничения делают сервисы непригодными для многих вариантов использования.
В лучшем случае вы ладите, планируя прямо в пределах этих ограничений. Таким образом, при реализации рабочего процесса в качестве конечного автомата убедитесь, что вы не выходите за пределы 256 КБ при передаче полезных данных.
2. Конечный автомат отменен без ошибки
Существуют различные причины, по которым конечный автомат может быть отменен, и иногда вы не получите сообщение об ошибке напрямую. Проверьте история выполнения конечного автомата, где вы можете найти все выходные данные.
Ошибки — непостоянная тема, и иногда что-то может пойти не так, что вся машина, выполняющая ваш код, выйдет из строя. Логирование работает, но нет времени отвечать ошибкой. Но будьте уверены, что AWS знает об этом и продолжает регистрировать все, что может.
История выполнения обычно является отличным местом для исследования проблем ступенчатых функций. Типичными событиями, которые могут привести к отмене, являются более 25 000 записей в истории выполнения, недопустимые типы данных в ваших выходных данных (например, числа вместо строк) или отсутствующие переменные в состояниях выбора.
3. Путь условия состояния выбора ссылается на недопустимое значение
Вы помещаете неразрешимый путь в поле «Переменная» выбранного вами состояния. В простейшем случае это была просто опечатка, но это также может означать, что объект неполный или вы пытаетесь вызвать функции.
Определения конечного автомата не имеют статического типа; особенно неправильные определения пути могут привести к головной боли, когда у вас есть опечатка. Убедитесь, что выходные данные вашего состояния всегда совпадают с входными, а конечные автоматы Step Function — это простые системы, они могут выполнять базовую логику для ветвления или параллелизации состояний, но они не являются вычислительными механизмами.
Пути, которые вы пишете внутри определений конечного автомата, не являются JavaScript; это шаблоны VTL, поэтому ни один из ваших обычных методов JavaScript для объектов или массивов здесь недоступен. Вы должны вычислить значение цели вашего пути внутри лямбда-функции, прежде чем проверять его в состоянии выбора. Он также должен быть логическим, числовым, строковым или отметкой времени.
Попробуйте определить конечные автоматы с помощью таких инструментов, как AWS Step Functions Workflow Studio, чтобы свести к минимуму проблемы во время определения. .
4. Конечный автомат останавливается после 25 000 выполнений
Вы превысили историю выполнения конечных автоматов со стандартным рабочим процессом. Если можете, переключитесь на ускоренный рабочий процесс; если это невозможно, вам нужно разделить конечный автомат и начать как новое выполнение .
Служба Step Functions будет регистрировать все выполнения ваших конечных автоматов в истории выполнения; это хорошо для отладки. Но эта история ограничена 25 000 записей, поэтому в тот момент, когда ваш конечный автомат будет иметь 25 001-е изменение состояния, служба пошаговой функции выключит его.
Вы можете настроить конечные автоматы как стандартные и экспресс-рабочие процессы. Экспресс-процесс имеет ограничения по времени выполнения, но позволяет хранить более 25 000 записей в истории выполнения. Вы можете использовать ускоренный рабочий процесс, чтобы обойти это ограничение, если у вас много кратковременных исполнений.
Если ваш конечный автомат имеет долгоживущие шаги выполнения и более 25 000 шагов выполнения, вам придется разбить его на несколько конечных автоматов. Таким образом, каждый из этих конечных автоматов может работать как новое выполнение и, в свою очередь, получает новую историю выполнения.
5. Неверный формат строки в параметрах
Одно из ваших состояний отправляет результат в неправильном формате, и альтернативы для выбора нет. Вы должны использовать функцию `States.Format()
для построения строки, чтобы обойти это.
Часто можно просто выбрать нужный фрагмент данных из своих результатов, чтобы передать его в параметры следующего состояния. А если нет, вы, по крайней мере, сможете изменить целевое состояние, чтобы оно принимало имеющуюся у вас структуру. Но так может быть не всегда.
Функция States.Format()
доступна глобально в вашем определении конечного автомата. С помощью этой функции вы можете объединять и переформатировать имеющиеся у вас данные, чтобы они соответствовали параметрам целевого состояния.
Вот простой пример, который строит полное имя для параметра:
"Параметры": {
"фу.$":
"States.Format('{} {}', $.firstName, $.lastName)"
Если вам это не сойдет с рук, вам придется подключить функцию Lambda, которая переформатирует данные более сложным образом. Этот вызов функции потребует дополнительных затрат и замедлит выполнение, но иногда это крайняя мера.
Вывод
AWS Step Functions — это мощный сервис, который помогает координировать более сложные задачи вашей бессерверной архитектуры. Но, как и все бессерверные сервисы, он имеет серьезные ограничения, которые вы должны учитывать при создании.
Как и в случае со всеми технологиями, убедитесь, что ваш стек модульный. Небольшие конечные автоматы более управляемы, чем один монолитный, который может выходить за пределы ограничений здесь и там.
Кроме того, как и все бессерверные системы, созданные в облаке AWS, Lambda всегда готова помочь. Если что-то не подходит на 100%, вы всегда можете добавить функцию здесь и там, чтобы сгладить ситуацию. Но имейте в виду, что они не бесплатны.
Как Dashbird может помочь
Как и в предыдущей статье о распространенных проблемах с DynamoDB, Dashbird также может дать вам понимание конечных автоматов и их выполнения. Он будет** автоматически отслеживать все конечные автоматы** в вашем аккаунте AWS; никаких дополнительных настроек не требуется.
Все ваши конечные автоматы будут оцениваться в соответствии с Well-Architected Framework, поэтому вы сразу увидите, все ли соответствует лучшим практикам.
Вы можете попробовать Dashbird прямо сейчас; кредитная карта не требуется. Первый миллион вызовов Lambda готов! Посмотрите наш обзор продукта здесь.
Оригинал