Some people go monolithic app but best practice is usually one function per route.
Traditional servers come with management overhead (e.g. defining/managing/monitoring scaling) and by using Serverless servers you avoid that overhead and optimize for good engineers which are almost always your bigger cost center.
You can still spawn more instances/containers on demand and autoscale but you need to think about provisioning and how that affects your cost.
With serverless the costing maps directly to usage and scaling is (ostensibly) taken care of for you.
If you have long running workloads that anyways need preallocated infrastructure and forward planning, you likely don't gain much from serverless. If your work can be split into smaller units of executions that can be invoked on-the-fly independently, you will likely benefit from serverless pricing.
We deploy our full monolithic app to lambda (as a docker image) and then just have a wrapper entrypoint script that dispatches the request to the appropriate module and function.
There are benefits to keeping each lambda function small but we like the benefit of deploying one lambda and being able to call any function within the monolith.
2. It locks you in to a certain vendor
3. It costs more
For AWS lambda I believe it was initially true, but now I believe they also support running arbitrary containers.
The costs more part is very much subject to nature of use case. If you have a lot of small services that are invoked once in a while you can benefit from serverless pricing.
[0] by usage I mean, I still deploy my monolithic app, or just one function per route?