AWS говорит, что возможно, если вы установите заголовок X-Amz-Invocation-Type
на Event
, но я столкнулся с той же необходимостью несколько месяцев назад, и это не сработало для меня, поэтому я не уверен, что это по-прежнему так илиесли бы это был только я, кто неправильно настроил это.Может быть, вы упускаете то же самое, что и я тогда: я не добавил заголовок InvocationType в запрос на интеграцию, как предполагает документация, так что это очень вероятно для вас, но, тем не менее, я не могу гарантировать, что он работает)
Документация гласит:
Настройка асинхронного вызова Lambda в консоли шлюза API
В запрос на интеграцию добавьте вызов X-Amz-Invocation-Type header.
В запросе метода добавьте заголовок InvocationType и сопоставьте его с заголовком X-Amz-Invocation-Type в запросе интеграции со статическим значением «Event» или выражением отображения заголовкаmethod.request.header.InvocationType.В последнем случае клиент должен включать заголовок InvocationType: Event при отправке запроса к методу API.
Если это работает, тогда вы можете идти.
Однако тогда я создал промежуточную лямбду, которая буквально действовала как посредник для настоящей лямбды.
Существует широкий диапазон параметров для асинхронного выполнения вашей функции, но вам понадобятся две лямбда-функции, независимо от того.
Один из вариантов - вызвать другую функцию (которая фактически выполнит нужную вам задачу).) асинхронно с помощью функции, вызываемой API-шлюзом.
const params = {
FunctionName: 'YOUR_FUNCTIONS_NAME',
InvocationType: 'Event',
Payload: JSON.parse(event.body) // this is the event coming from API Gateway
};
await lambda.invoke(params).promise(); // await here is only going to wait for the HTTP request to be successful. Once the 2nd Lambda is invoked, it will return immediately
Другой вариант - поместить сообщение в SQS и настроить триггер для запуска Lambda при появлении нового сообщения в очереди SQS.То же самое относится и к уведомлению SNS.
Другие варианты включают Kinesis, DynamoDB Streams и т. Д., Но идея та же: функция, вызываемая через API Gateway, должна быть не чем иным, как прокси для другой Lambda.Как этот прокси будет работать (будь то отправка сообщения в SQS, SNS, прямой вызов другой функции асинхронно и т. Д.), Не имеет значения, какова концепция, позволяющая обойти ограничение в 30 секунд для API-шлюза.