Как выполнить AWS лямбда за другой лямбда - PullRequest
0 голосов
/ 24 апреля 2020

Сценарий, который я хочу реализовать с помощью AWS лямбда-функций:

  1. Позвоните в Lambda и получите ответ.
  2. После получения ответа мне нужно выполнить другую лямбда-функцию, которая выполняет свою работу.

Болевая точка для меня заключается в том, как вызвать вторую лямбду без второго вызова. Я пытаюсь сделать это в AWS Step Functions, однако я считаю, что не могу вернуть что-то из первой функции, а затем продолжить выполнение второй, или я могу?

Ответы [ 4 ]

1 голос
/ 27 апреля 2020

Это может быть легко достигнуто с помощью AWS самой функции Step. Вы можете просто создать два состояния задачи, каждое для своей лямбды, и если вы не хотите передавать какие-либо входные данные в любую лямбду, это тоже хорошо, потому что в этом нет необходимости.

Короче говоря, ваша простая пошаговая функция будет выглядеть следующим образом:

enter image description here

Это будет выполняться последовательно.

Вы можете просто определить свое состояние следующим образом:

"States": {
    "FirstLambda": {
      "Type": "Task",
      "Resource": "<first-lambda-arn>",
      "TimeoutSeconds": 9000,
      "Next": "SecondLambda"
    },
    "SecondLambda": {
      "Type": "Task",
      "Resource": "<second-lambda-arn>",
      "TimeoutSeconds": 9000,
      "End": true
    }
  }

Вам не нужно передавать что-либо в качестве полезной нагрузки в lambda, если вы тоже этого не хотите. и при необходимости вы можете передать ввод первой лямбда-функции в другую лямбда-функцию, используя "ResultPath":"$.output" в первом определении состояния выше (определение для первой лямбды) и передавая $.output в полезную нагрузку следующей.

0 голосов
/ 24 апреля 2020

Вы можете достичь этого, используя aws lambda destinations.

Для каждого состояния выполнения, такого как Успех или Неудача, вы можете выбрать одно из четырех назначений: другая лямбда-функция , SNS, SQS или EventBridge. Лямбда также может быть настроена на маршрутизацию разных результатов выполнения в разные места назначения.

Эта запись может дать вам некоторые идеи.

0 голосов
/ 24 апреля 2020

У меня похожая настройка между некоторыми из моих лямбда-функций.

Я бы просто попросил вызывающую службу отправить запрос http на назначенную конечную точку лямбда-функции second , когда она получит ответ от first лямбда-функция.

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

0 голосов
/ 24 апреля 2020

Возможное решение:

  1. Создать очередь SQS
  2. Поместить возвращаемый объект как сообщение в очередь
  3. установить очередь SQS в качестве триггера для второй лямбды и получить сообщение очереди SQS из объекта события

Подробнее об этом можно узнать в документах

...