Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to invoke lambda async with AWS ApiGateway HttpApi

I'm using the new HTTP Api (The one introduced in December 2019) of AWS Api Gateway.

I used to work with REST Api, which lets you trigger lambda functions async by adding X-Amz-Invocation-Type:Event header.

The new HTTP Api does not let you specify that header, how can I call lambda functions asynchronously?

thanks in advance

like image 443
AliAx Avatar asked Jan 25 '23 04:01

AliAx


1 Answers

You can invoke a Lambda function asynchronously via API Gateway only if the integration is non-proxy. By default, HTTP APIs are designed to support only proxy integrations for Lambda and HTTP endpoints so it is not possible to set the X-Amz-Invocation-Type header in the API Gateway integration config.

In order to invoke a Lambda asynchronously via HTTP API, you can use two Lambda functions with one acting as proxy to your actual function.

HTTP API --> Invoke Lambda1 synchronously --> Invoke Lambda2 asynchronously

Below is a sample NodeJS code snippet for Lambda1 to invoke Lambda2 asynchronously -

const params = {
        FunctionName: 'FUNCTION_NAME',
        InvocationType: 'Event',
        Payload: JSON.parse(event.body) // this is the event coming from API Gateway to Lambda1
    };
await lambda.invoke(params).promise(); // await here is only going to wait for the HTTP request to be successful. Once Lambda2 is invoked, it will return immediately
like image 74
Suraj Bhatia Avatar answered Jan 29 '23 06:01

Suraj Bhatia