Как я могу настроить AWS Lambda для асинхронного вызова через HTTP / API Gateway? - PullRequest
0 голосов
/ 10 мая 2018

Я пишу AWS Lambda, который вызывается через HTTP (т. Е. Интеграция с API-шлюзом).

Я хочу использовать этот API в качестве веб-крючка GitHub.Когда вызывается webhook / lambda, я хочу, чтобы ответ HTTP отправлялся сразу, а лямбда продолжала выполняться (потому что это может занять некоторое время).

Это похоже на вызов Eventвведите при вызове лямбды:

  • Событие: запустить и забыть
  • RequestResponse: дождаться ответа

Возможно ли использовать этотип вызова с интеграцией HTTP?

Примечание. Я использую serverless.com framework.

1 Ответ

0 голосов
/ 10 мая 2018

Как указал @ michael-sqlbot , вы можете получить это поведение, используя X-Amz-Invocation-Type: Event Header.Получение этой настройки немного странно, и связанная документация точна, но немного устарела (по моему мнению).

  1. Переопределение пути должно быть: /2015-03-31/functions/<ARN TO YOUR LAMBDA>/invocations
  2. Роль выполнения должна быть в состоянии вызвать вашу лямбду.
  3. При первоначальной настройке запроса на интеграциюВы не можете добавить заголовки, поэтому вы должны сохранить его, а затем вернуться и добавить заголовки.Оттуда вы можете жестко закодировать X-Amz-Invocation-Type в Event, поместив строку 'Event' в поле Mapped from (как показано ниже)

Api Gateway Integration Request

Или ... вы также можете достичь этого, если ваша лямбда, подключенная к шлюзу API (мы будем называть ее лямбда A), вызывает другую лямбду (лямбду B), используя вызов Eventтип.Таким образом, A не заботится об ответе B и может вернуть успешный ответ на шлюз API в течение нескольких сотен миллисекунд (при условии, что вы больше ничего не делаете).Затем Lambda B может продолжить работу, пока это необходимо (если она находится под 5-минутным ограничением лямбды или вашим настроенным таймаутом).

...