Скажем, у меня есть лямбда-функция под названием «TestExecutor», которая принимает аргумент, содержащий ARN для N «тестов», которые также реализованы как лямбда-функции.
Рабочий процесс:
- TestExecutor вызывается со списком ARN различных тестов.
- TestExecutor вызывает каждый тест одновременно; ожидается, что каждая лямбда вернет JSON
- TestExecutor ожидает завершения каждого теста. Он объединяет все полученные JSON
- Консолидированный JSON хранится в DynamoDB / S3
Постановка проблемы. Как лучше всего создать такой рабочий процесс без сервера?
Я рассмотрел два сервиса AWS, чтобы справиться с этим:
- AWS Step Functions - моей пошаговой функции потребуются состояния для каждой возможной тестовой лямбды, которая может быть выполнена. Я хочу предоставить пользователю гибкость для вызова любой лямбды без необходимости «регистрировать» ее в моей функции Step.
- AWS SWF - Кажется, это немного излишне. Страдает той же проблемой, что и выше.
Итак, сейчас лучшее, что я могу придумать, - это сделать это простым способом:
В моем TestExecutor Lambda я мог бы создать N потоков для N тестов, каждый поток вызывает определенную функцию Test Lambda. Каждый поток ожидает, пока его Test вернет JSON. Поскольку все исполнения успешны, все JSON объединяются. Консолидированный JSON хранится в DynamoDB.
Я не доволен этим решением - будет немного сложно вручную управлять ошибками и повторными попытками тестовых лямбда-выражений из внутри лямбда-выражения TestExecutor. Я впервые пробую что-то бессерверное, но это кажется неправильным шаблоном. Я хотел бы получить хорошее представление о моем рабочем процессе сверху вниз - похоже, что мониторинг этого процесса будет немного беспорядочным и разбросанным, поскольку нет формальной связи между TestExecutor и Test Lambdas
Возможно, я мог бы создать очередь SQS вместе с каждой тестовой лямбдой. Для каждого ARN, предоставленного TestExecutor, я мог отправить сообщение в соответствующую очередь. Но что теперь? Мне пришлось бы создать лямбда-выражения «Listener» для каждого теста, который опрашивает каждую очередь каждые T секунд. Затем он вызовет фактическую тестовую лямбду. Это тоже звучит излишне сложно.
Хотел бы услышать совет! Ваше здоровье.