
AWS Lambda
AWS’s functions service: upload a handler, connect a trigger, and pay per request and per millisecond.
- What it is
- Serverless functions (FaaS)
- Type
- Managed service on AWS
- Made by
- Amazon Web Services
- License
- Proprietary
- Facts checked
- 5 October 2026
What it is
A Lambda function is a handler plus settings: a runtime (or a container image), a memory size from 128 MB to 10,240 MB, and a timeout of up to 15 minutes. CPU scales with memory; at 1,769 MB a function gets the equivalent of one vCPU. Each request runs in an execution environment, a Firecracker microVM that handles one request at a time. The first request to a new environment pays a cold start (downloading code, starting the runtime and running your initialisation code); later requests reuse the warm environment, so connections and clients created outside the handler carry over.
Lambda’s strength is how it plugs into the rest of AWS. Some services push events to it (API Gateway, S3 notifications, SNS, EventBridge). For queues and streams such as SQS, Kinesis and DynamoDB Streams, Lambda runs an event source mapping that polls for you, hands your function batches of records and scales the number of pollers with the backlog. Billing is per request plus GB-seconds, metered to the millisecond, with a monthly free tier of one million requests and 400,000 GB-seconds.
Why teams pick it
- No servers or idle cost: quiet functions cost nothing, and scaling to thousands of parallel copies is automatic
- Built-in triggers from most AWS services, including managed polling of SQS and Kinesis
- Fine-grained IAM: each function gets its own execution role
- Provisioned concurrency and SnapStart cut cold starts when latency matters
Watch out for
- 15-minute maximum per invocation (90 minutes only for async and queue-driven calls on Lambda Managed Instances); longer jobs need durable functions, Step Functions or ECS
- Payloads are capped at 6 MB for synchronous calls (200 MB when streaming the response) and 1 MB for asynchronous ones
- Default account limit of 1,000 concurrent executions per Region, shared by all functions; a spike in one can throttle the others
- Cold starts range from under 100 ms to over a second, and one request per environment means many connections to your database
Alternatives
What all serverless functions (faas) have in common →How it fits with other technologies
What AWS Lambda uses
What uses AWS Lambda
- AWS Application Load Balancercan invoke functions inAWS Lambda
- Amazon CloudFrontruns Lambda@Edge functions fromAWS Lambda
- Amazon API GatewayinvokesAWS Lambda
- Amazon SNSinvokes functions inAWS Lambda
- Amazon EventBridgeinvokes functions inAWS Lambda
- Amazon EventBridge Schedulerinvokes functions inAWS Lambda
- AWS Step Functionsinvokes functions inAWS Lambda
- AWS IoT Coreinvokes functions from rules inAWS Lambda
- Amazon ElastiCachecaches data for functions inAWS Lambda
- SSTdeploys functions toAWS Lambda
- Flociruns functions in AWS runtime images, likeAWS Lambda
- LocalStackruns functions in containers, likeAWS Lambda
- Amazon CloudWatchreceives logs and metrics by default fromAWS Lambda
A handler that writes SQS messages to DynamoDB · python
import json
import boto3
# created once per execution environment and reused on warm invocations
table = boto3.resource("dynamodb").Table("orders")
def handler(event, context):
for record in event["Records"]: # a batch of up to 10 SQS messages by default
order = json.loads(record["body"])
table.put_item(Item=order)
return {"processed": len(event["Records"])}See it in a real stack
Serverless web app on AWS →Worth exploring
kubectl on start) that runs kubectl commands against a cluster, used here to launch a Kubernetes Job in response to an event. It is written for Cloudfleet’s own managed Kubernetes and its CLI, so the authentication steps need changing for other clusters, and passing raw kubectl arguments in an event is fine for a demo but too permissive for production.kubectl apply a Function manifest that points at code in S3. It explains why you might (one GitOps and RBAC model for pods and functions) but, being AWS’s own post, not the drawbacks.aws-auth ConfigMap, and it routes application traffic through the cluster’s control plane.lambci/docker-lambda images (since deprecated in favour of AWS’s official Lambda base images) and to Knative; read it mainly for the question, which is a common one, rather than for current tooling.Where it came from2013–2025
Even on EC2, reacting to something small, like a file landing in S3 or a row changing in DynamoDB, meant running a server that sat waiting for it, sized, patched and paid for around the clock. In 2013 AWS’s Tim Wagner and Jeff Barr talked about a service where developers could hand over just their code and let the cloud store and run it. Wagner wrote the PRFAQ (Amazon’s mock press release and FAQ) that proposed it.
AWS announced Lambda at re:Invent on November 13, 2014, as a preview. It ran only Node.js, could be triggered by S3, DynamoDB and Kinesis, let a function use 128 MB to 1 GB of memory for up to 60 seconds, and charged per request plus compute time in units of 100 milliseconds. It was declared ready for production on April 9, 2015, adding synchronous request/response calls and SNS as a trigger. To keep customers apart, AWS first ran functions on traditional VMs, then built Firecracker so it could scale faster without giving up that isolation.
Lambda became the reference point for what people now call “serverless”. Its limits have grown steadily (15-minute timeouts, 10 GB of memory, container images, 1 ms billing), and in 2025 durable functions let one function pause and resume across steps for up to a year.
Why it’s built this way
- Triggered by events from other AWS services
- Lambda launched as the code that runs when something changes in S3, DynamoDB or Kinesis, so nobody had to keep a server polling for it. Those integrations are still its main reason to exist.
- Billing per request and per slice of runtime
- Charging in 100 ms units (1 ms since 2020) instead of per hour means idle code costs nothing, which is what makes small, spiky workloads cheap.
- Virtual machines rather than shared containers
- Containers were faster and denser, but AWS chose VM-level isolation between customers from the start. When plain VMs proved too slow to scale, it built Firecracker microVMs instead of relaxing the boundary.
Timeline
- 2013
Tim Wagner writes the PRFAQ proposing Lambda
- 2014
Preview announced at re:Invent on November 13, Node.js only
- 2015
Ready for production on April 9, with synchronous calls
- 2018
AWS open-sources Firecracker, the microVM monitor under Lambda
- 2020
1 ms billing, 10 GB memory and container image support
- 2022
SnapStart restores functions from snapshots to cut cold starts
- 2025
Durable functions add checkpointed, multi-step workflows in December
- AWS News Blog: AWS Lambda, run code in the cloud (Nov 2014)
- AWS News Blog: AWS Lambda in full production (Apr 2015)
- AWS News Blog: AWS Lambda turns ten (Nov 2024)
- Firecracker FAQ: why AWS built Firecracker for Lambda
- AWS News Blog: Lambda SnapStart (Nov 2022)
- AWS What’s New: Lambda durable functions (Dec 2025)
Sources10 · facts checked 5 October 2026
- Lambda docs: Quotas (memory, timeout, payloads, concurrency)
- Lambda docs: Execution environment lifecycle (cold starts, reuse)
- Lambda docs: Understanding concurrency (one request per environment)
- Lambda docs: Tenant isolation (execution environments use Firecracker)
- Lambda docs: Event source mappings
- Lambda docs: Using Lambda with Amazon SQS
- Lambda docs: Execution role
- Lambda docs: Provisioned concurrency
- Lambda docs: SnapStart
- AWS Lambda pricing (free tier, 1 ms billing)