Watching · AWS · Steady Lambda at volume

Lambda Managed Instances

Lambda on EC2 capacity you choose, many requests per environment. The middle ground for a steady function that should stay a Lambda.

Announced at re:Invent 2025 and in Sydney since June 2026: your function runs on EC2 instances you pick, with many requests per environment, while keeping Lambda's programming model, event sources and deploys. I haven't run it in production, so it's on my watch list.

It answers a real gap. A steady, high-volume function pays classic Lambda for every request's full wait; Managed Instances bill the machine instead, at EC2 prices plus 15%. But it gives up what makes Lambda Lambda: there's no scale to zero, three instances by default, and it throttles when traffic more than doubles within five minutes. So it's for a steady function, not a spiky one. The comparison with a container is in Lambda, Fargate or EC2?.

Use it when

  • A steady function, about 30 requests in flight and up, that you want to keep as a Lambda: same events, same deploys.
  • Node.js code that mostly waits: 64 requests per vCPU by default.
  • Asynchronous and event-source work that needs up to 90 minutes.

Don't use it when

  • Spiky traffic: it throttles when traffic more than doubles within five minutes.
  • Small or idle functions: at least three instances by default, and no scale to zero.
  • A plain HTTP service where a container is fine: Fargate is a little cheaper at the same load.

Pricing

The EC2 instances at normal EC2 rates, plus a 15% management fee on their on-demand price, plus $0.20 per million requests. Sydney: the fee on an m7g.large is $0.0153 an hour. Savings Plans and Reserved Instances cut only the EC2 part. At 50 requests in flight all day, about $560 a month on demand (about $382 with a 3-year plan), against about $1,883 on classic Lambda.

Gotchas, with fixes

Gotcha: The function needs at least 2 GB and 1 vCPU, and the instances run in your VPC.

Fix: Use public subnets where you can: a NAT gateway adds a fixed monthly cost.

Gotcha: Many requests share one environment, so module-level state is shared between them.

Fix: Keep handlers free of per-request globals before moving a function onto it.

Provisioning

Official Pulumi package · Official Terraform provider

A capacity provider (aws.lambda.CapacityProvider, Terraform aws_lambda_capacity_provider) attached to the function.

Instead, consider

Worked examples

Sources

Last reviewed by Nicolas Dao

Want this stack in your AWS account?

Cloudless Labs is a Sydney consultancy. We migrate on-premises systems to AWS, build serverless apps on this stack, and coach teams to ship with Claude Code and Codex.

Contact Us

For general inquiries, please contact us at:

For e-learning capabilities, please contact: