Reputation: 501
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
Upvotes: 8
Views: 12442
Reputation: 19
You can invoke a Lambda asynchronously with additional header Integration Request
in API Gateway configuration:
Integration Request header in API Gateway
X-Amz-Invocation-Type : Event
Client's request header
InvocationType: Event
or
InvocationType: RequestResponse
Integration Request header in API Gateway
X-Amz-Invocation-Type
header with a mapping expression of method.request.header.InvocationType
.
AWS Documentation: Set up asynchronous invocation of the backend Lambda function
Upvotes: 0
Reputation: 1323
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
Upvotes: 14