Как запустить несколько программных модулей AWS по порядку?

#amazon-web-services #aws-lambda #aws-codepipeline

Вопрос:

У меня есть среда AWS с 3-мя кодовыми линиями. Давайте назовем их — P1, P2 и P3. Я бы хотел запустить их в «определенной» последовательности. Эта последовательность будет определяться лямбда-функцией.

Эта лямбда-функция выполняет некоторые вычисления и определяет, в какой последовательности должны выполняться конвейеры. Итак, это может быть-

 P1 > P2 > P3

P3 > P2 > P1

P2 > P3 > P1
 

Каждая кодовая линия должна успешно завершиться до запуска следующей. Как я могу этого достичь?

Сначала я попытался сделать это с помощью той же самой лямбда-функции, но у нее тайм-аут 15 минут. Мы не знаем, сколько времени займет каждый трубопровод. Все вместе они могли бы занять даже ~30 минут.

Кроме того, поскольку последовательность динамична, я не мог просто заставить один конвейер экспортировать файл в S3 и использовать его в качестве источника для другого!

Есть какие-нибудь предложения?

Ответ №1:

CP генерирует события с помощью EventBridge. Таким образом, вам придется это использовать.

В принципе, вы бы настроили правила событий, которые запускали бы выполнение последующего конвейера на основе успешного завершения предыдущего конвейера.

Комментарии:

1. Спасибо вам за ваш ответ. Как EventBridge узнает, какой из них является следующим трубопроводом? Допустим, когда P1 успешно завершен, запускается правило EB. Как он узнает, запускать ли P2 или P3? На данном этапе только лямбда-функция, о которой я упоминал, вычисляет это. Я чувствую, что все это сложно, потому что порядок CP динамичен!

2. @AladdinKnight Если вам требуется сложная логика, правило моста событий вызовет лямбда-функцию. Затем функция решит, что запускать дальше.

3. @AladdinKnight Как все прошло? Все еще неясно, что вы можете сделать?

Ответ №2:

Как правило, EventBridge выполнял бы трюк (как упоминал @Marcin), однако это не сработало с моим конкретным сценарием.

Я решил проблему, введя «Пошаговую функцию» между лямбда-функцией и конвейерами.

Лямбда-функция передает некоторый параметр в функцию шага. Исходя из этого, он использует другой путь (другой порядок выполнения конвейера).

Кроме того, у него есть механизм «ожидания», а также функция GetPipelineExecution для проверки статуса. Вместе они гарантируют, что один конвейер должен успешно завершиться до запуска следующего.

Надеюсь, это поможет кому-то в будущем 🙂