Что такое сервис AWS Step Functions?

Постараюсь сделать эту часть краткой, поскольку статей и документации, представляющих это, достаточно.

So…

Как описано, это «бессерверная служба оркестровки».

Он позволяет пользователю определять машины состояний (рабочие процессы), которые соединяют различные задачи (состояния). Чтобы упростить задачу, AWS предоставляет Workflow Studio, которая упрощает этап определения рабочих процессов.

Существует два варианта типов рабочего процесса:

  • Стандарт
  • Выражать

Помимо всех отличий, определенных в документации, важным для гибридных архитектур является поддержка Activity:

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

Описание примера

Мы собираемся реализовать конечный автомат, который объединяет AWS Lambda с локальным проектом.

Код для этой части руководства можно найти здесь:

  • CloudFormation стек
  • getServerlessState — в стеке
  • getLocalState — код извлечения активности (всегда считывается для ожидающих задач)
GetActivityTaskResult getActivityTaskResult =
        client.getActivityTask(new GetActivityTaskRequest().withActivityArn(ACTIVITY_ARN));

if (getActivityTaskResult.getTaskToken() != null) {
    System.out.println("Found result from previous step.");
    try {
        JsonNode json = Jackson.jsonNodeOf(getActivityTaskResult.getInput());
        String result = code.getLocalCode(json.get("value").intValue());
        client.sendTaskSuccess(
                new SendTaskSuccessRequest().withOutput(
                        result).withTaskToken(getActivityTaskResult.getTaskToken()));
    } catch (Exception e) {
        client.sendTaskFailure(new SendTaskFailureRequest().withTaskToken(getActivityTaskResult.getTaskToken()));
    }
} else {
    Thread.sleep(1000);
}
  • DefaultState — в стеке
“DefaultState”: {
 “Type”: “Fail”,
 “Cause”: “Value provided does not cover our cases (private & 0)!”
 }

Результаты красиво отображаются в Инспекторе графиков:

Заключение

Это отличный сервис, который имеет множество функций, а тот факт, что его можно использовать с локальным запущенным кодом (с помощью Activity), делает его даже предпочтительным.

При запуске этого примера не было никаких затрат.

На этапе тестирования были обнаружены некоторые проблемы, например, если два выполнения достигают getLocalState, а извлечение приложения не работает/отключается после того, как приложение (которое выполняет извлечение для действия) возвращается к одному казней остается висящим -› тайм-аут.

Код, используемый для запуска этого руководства, расположен: