- By default there's a limit of 1000 concurrent lambda executions, this can be raised with a support ticket. There are companies that have this limit raised up to tens of thousands concurrent lambda executions.
- There's a default limit of 75GB of code storage (so up to 10 React apps, lol) which can also be raised.
- It's possible to run Lambda functions on a custom VPC, which is useful when you need to work with RDS, EC2, containers etc. When using a custom VPC you should create a custom subnet for lambda functions to prevent issues when the function will scale massively
- You get charged for the lambda execution time in 100ms blocks (so if your function takes 10ms to execute, you'll pay for 100ms)
- With aliases you can run different versions of Lambda function with a different probability (for instance run version A 90% of the time and version B 10% of the time)
- You can push failed async lambda function invocations to dead letter queue (for instance - SQS)
- Pricing:
- First 1 million requests per month are free, afterwards you pay $0.20 per additional 1 million requests
- 400,000 GB seconds free per month, afterwards you pay $0.0000166667 for every GB second
- Example: 128MB of Memory x 30M executed per month x 200ms run time per invocation = $5.83
- Cold starts affect less than 1% of production workloads (they are much more common in development environments, since there is way less traffic). A duration of a cold start varies from less than 100ms to more than 1s. It's not possible to 'target' warm environments.
- In order to reuse existing connections (and improve the performance of functions using http(s) request) use keep-alive property in order to reuse TCP connections on warm execution environments.
More details: https://bit.ly/reuse-connection
It's possible to use custom runtimes for Lambda (apart from Node, .NET, Python etc.) so if you really want to use Haskell you can do that