If I have an API that has the following routes
POST /slack
POST /slack/hook
POST /slack/another-hook
POST /slack/hook/nested
Is it better to have 4 separate Lambda functions and 4 routes in the API Gateway? Or to have 1 Lambda for the root route and have the Lambda handle the routing from there?
example 1
POST /slack --> lambda1
POST /slack/hook --> lambda2
POST /slack/another-hook --> lambda3
POST /slack/hook/nested --> lambda4
example 2
POST /slack --> lambda1
POST /slack/hook --> lambda1
POST /slack/another-hook --> lambda1
POST /slack/hook/nested --> lambda1
Is there a best practice for this? If so why?
This blog post here explains the pros and cons of various serverless patterns. Following are some things to keep in mind:
One Lambda per route aka microservice pattern:
Pros
Cons
Possibly more cold starts for lambdas since some of them might not be frequently accessed.
You might end up with a lot of lambda functions to manage.
One Lambda with multiple routes aka service/monolith pattern depending how routes are grouped:
Pros
Cons
As you can see, there are pros and cons to each approach and there is no single right way to do things. Also as the other answer suggests, you need to consider things like CICD, project and time constraints as well.