Как атрибут MaxConcurrency работает для задачи карты в AWS Step Functions?

Обновление: создание функции шага из шаблона шага Map State и выполнение, которое также вызывает ошибку. Это убедительное свидетельство того, что атрибут MaxConcurrency вместе со значением Parameters не работает.

Я не могу успешно использовать атрибут MaxConcurrency в определении ступенчатой ​​функции.

Это можно продемонстрировать на примере, приведенном в документация для задачи карты (новая с 18 сентября 2019 г.):

{
  "StartAt": "ExampleMapState",
  "States": {
    "ExampleMapState": {
      "Type": "Map",
      "MaxConcurrency": 2,
      "Parameters": {
        "ContextIndex.$": "$$.Map.Item.Index",
        "ContextValue.$": "$$.Map.Item.Value"
      },
      "Iterator": {
         "StartAt": "TestPass",
         "States": {
           "TestPass": {
             "Type": "Pass",    
             "End": true
           }
         }
      },
      "End": true
    }
  }
}

Выполняя пошаговую функцию со следующим вводом:

[
  {
    "who": "bob"
  },
  {
    "who": "meg"
  },
  {
    "who": "joe"
  }
]

Мы можем наблюдать в истории событий выполнения, что получаем:

  • ExecutionStarted
  • MapStateEntered
  • MapStateStarted
  • MapIterationStarted (индекс 0)
  • MapIterationStarted (индекс 1)
  • PassStateEntered (индекс 0)
  • PassStateExited (индекс 0)
  • MapIterationSucceeded (индекс 0)
  • ExecutionFailed

Пошаговая функция не работает. Шаг ExecutionFailed имеет следующий результат (идентификатор выполнения опущен):

{
  "error": "States.Runtime",
  "cause": "Internal Error (omitted)"
}

Попытка отловить ошибку с помощью шага Catch не дает никакого эффекта.

Что я здесь делаю не так? Это ошибка?


person Daniel Olsson    schedule 24.09.2019    source источник
comment
Я умею воспроизводить. Точнее, если для MaxConcurrency установлено значение выше, чем общее количество итераций (или установлено равным нулю), кажется, что это успешно. Когда для MaxConcurrency установлено значение ниже, чем общее количество итераций, я вижу эту ошибку.   -  person WXMan    schedule 25.09.2019
comment
Также - если я не получаю доступ к значению или индексу (например, полностью удаляю раздел параметров), я не получал сбоя. Не очень полезно, но наблюдение. Только что отправил заявку в AWS по этому поводу.   -  person WXMan    schedule 25.09.2019
comment
@WXMan Можете ли вы привязать свой билет? (Если это общедоступно)   -  person Daniel Olsson    schedule 25.09.2019
comment
Не публичный - он был отправлен вчера вечером и подтвержден техническим специалистом как неожиданное поведение около 10 часов назад. Они передали его своей внутренней команде и сказали, что будут держать меня в курсе. Я обновлю здесь, когда получу ответ.   -  person WXMan    schedule 25.09.2019


Ответы (1)


Ответ на частный запрос, отправленный в AWS сегодня утром;

Благодарим вас за обращение в службу поддержки AWS Premium. Меня зовут Аканкша, и я буду помогать вам в этом деле.

Я понимаю, что вы работали с новой функцией состояния карты для пошаговых функций и заметили, что, когда мы используем Parameters вместе с MaxConcurrency, установленным на меньшее значение, чем количество итераций (только первая успешная итерация), происходит сбой с 'States.Runtime' 'и выглядит как ошибка с функциональностью.

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

{"StartAt": "Состояние карты", "TimeoutSeconds": 3600, "States": {"Состояние карты": {"Тип": "Карта", "Параметры": {"ContextValue. $": "$$. Map.Item.Value "}," MaxConcurrency ": 1," Iterator ": {" StartAt ":" Run Task "," States ": {" Run Task ": {" Type ":" Pass "," End " : true}}}, "Next": "Final State"}, "Final State": {"Type": "Pass", "End": true}}}

Я тестировал несколько входных списков и значений MaxConcurrency, и ниже приведены мои наблюдения:

  1. Список входных размеров: 4 MaxConcurrency: 1/2/3 - Ошибки и MaxConcurrency: 0/4/5 или выше - Работает
  2. Список входных размеров: 3 MaxConcurrency: 1/2 - Ошибки и MaxConcurrency: 0/3/4 или выше - Работает
  3. Точно так же я выполнил тесты, удалив параметры из конечного автомата, и увидел, что он работает, как ожидалось, с разными значениями MaxConcurrency.
  4. Я также протестировал то же самое, изменив тип задачи «Пройти» на «Лямбда» и наблюдал такое же поведение.

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

Проведя некоторое исследование этого поведения, чтобы проверить, предназначено ли оно, я не смог найти много информации о том же, поскольку это новая функция. Итак, я обращусь к внутренней команде со всеми деталями и примером конечного автомата, который вы предоставили. Спасибо, что обратили на это наше внимание. Я свяжусь с вами, как только у меня будет информация от внутренней команды. Будьте уверены, что я буду регулярно связываться с командой и работать с ними над дальнейшим расследованием.

Между тем, если у вас есть другие вопросы или проблемы, дайте мне знать.

Удачного дня!

Я обновлю здесь, когда получу дополнительную информацию.

person WXMan    schedule 25.09.2019
comment
Теперь это решено в us-east-1, и они работают над внедрением исправления в другом месте. - person WXMan; 30.09.2019
comment
Я только что столкнулся с той же проблемой, спасибо, что поделились этим мнением здесь - person janfabian; 02.10.2019