Reputation: 465
I have been experimenting with AWS API Gateway and AWS Lambda to try out a serverless architecture. Have been going through blogs and AWS documentation. Have tried out sample GET/POST. But, I have the following requirement w.r.t tracking user events from my custom application
As per the documentation, I understand, a) I can post events to API end point b) On GET/POST trigger an AWS Lambda Function - Respond back from AWS Lambda function to API request
I wanted to change the above and modify it to a) Post events to API end point a.0) Respond back acknowledging that request is received [Say {'fine'} ] b) Trigger AWS Lambda function to process the event payload
Please share across suggestions on how to achieve the same.
Upvotes: 3
Views: 1752
Reputation: 572
You should first run some tests to see what type of real world response times you are getting from having your lambda function complete all the logic. If the times are above what you feel are acceptable for your use case, here is another asynchronous solution utilizing an SNS Topic to trigger a secondary Lambda function.
{fine}
success message -> API Gateway -> clientUpvotes: 0
Reputation: 9020
Another asynchronous model many customers have used:
This setup has some advantages for high workload APIs as fetches from the Kinesis stream can be batched and don't require a 1-to-1 scaling of both your API Gateway limits and Lambda limits.
Update
To answer your questions about scalability:
Kinesis
Kinesis scales by adding what it calls "shards" to the stream. Each shard handles a portion of your traffic, based on a partition key. Each shard scales up to 1000 rps or 1MBps (see limits). Even with the lower default 25 shards, this would support up to 25,000 rps or 25MBps with an evenly distributed partition key.
API Gateway
API Gateway has a default account level limit of 500 rps, but this can easily be extended by requesting a limit increase. We have customers in production that are using the service at limits above your current suggested scale.
Upvotes: 0
Reputation: 3993
If you want a fast response from the API and not have to wait for the processing of data, you could:
context.succeed()
or context.done()
or the callback function in the Lambda Function A so it respond back to API Gateway Upvotes: 0