A leading product engineering company, creating adaptive software solutions to improve operations, providing businesses with expert development services from across domain.
A leading product engineering company, creating adaptive software solutions to improve operations, providing businesses with expert development services from across domain.
The AWS Lambda 90 minute timeout applies only to Managed Instances and async or event source mapping invocations. Synchronous calls still stop at 15 minutes.

AWS has raised Lambda's maximum function timeout from 15 minutes to 90. The AWS Lambda 90 minute timeout is real, but it is not a blanket change, and the conditions attached to it are the part most write-ups skip. It applies only to functions running on Lambda Managed Instances, and only to asynchronous invocations and invocations delivered through an event source mapping. If your function is called synchronously, you still get 15 minutes. As of September 2026, that is the whole rule.
That distinction decides whether this changes anything for you, so it is worth getting straight before you start deleting state machines.
The new ceiling is 5,400 seconds, up from 900. It is a six-fold increase on a limit that has been in place since 2018.
| Invocation type | Maximum timeout | Condition |
|---|---|---|
| Asynchronous (event invokes, S3 notifications, EventBridge) | 90 minutes | Lambda Managed Instances |
| Event source mapping (SQS, Kinesis, DynamoDB Streams, MSK) | 90 minutes | Lambda Managed Instances |
| Synchronous (request/response, Function URLs, HTTP front ends) | 15 minutes | Unchanged |
| Functions not on Managed Instances | 15 minutes | Unchanged |
AWS points at media transcoding, financial calculations, ETL jobs, AI inference and web scraping as the work this is aimed at — jobs with a long single stage rather than many short ones. For work that needs to run longer than 90 minutes, AWS directs you to durable functions, which can run for up to a year.
Lambda started at a five-minute ceiling in 2014 and moved to 15 minutes in 2018. Everything that did not fit got decomposed, and a lot of that decomposition was never an architectural preference. It was arithmetic.
You can usually tell which is which by looking at a state machine and asking what each state is for. If a step exists because it owns a distinct failure mode — it retries differently, it alerts a different team, it can be resumed independently — the decomposition is doing real work. If the step exists only to hand a file to the next step before the clock runs out, it is a workaround with a CloudWatch bill. We have inherited plenty of the second kind, and they are the ones this change frees.
The candidates are jobs that are long because the work is long, not because the work is complicated:
If you have been paying for a Fargate task purely to escape the 15-minute ceiling on work like this, the arithmetic is worth redoing. A long serverless architecture job that runs a few times a day is often cheaper on Lambda than a container that has to be scheduled, warmed and drained.
Four cases where the old decomposition is still the right answer:
A function that runs for an hour and a half is a different animal from one that runs for eight minutes, and three things break quietly.
Asynchronous invocations retry on failure, and event source mappings redeliver. That was always true, but at 90 minutes a duplicate is no longer a rounding error in your bill or your data. Make the work idempotent, checkpoint progress somewhere durable so a retry can resume rather than restart, and set the retry attempts and maximum event age deliberately instead of leaving the defaults in place.
The execution role credentials placed in the function environment are temporary. Code that reads them once at start-up and caches them for the life of the process is fine at eight minutes and can fail at eighty. Use the SDK's default credential provider so it refreshes, rather than pinning the environment variables into your own client at module load.
A database connection opened at minute zero and used again at minute seventy has been idle long enough for the other end, or something in between, to have dropped it. Either pool through a proxy or make reconnection part of the job rather than an exception you discover in production.
Memory is the fourth thing worth watching. A long job that accumulates results in a list will find the ceiling eventually, and the fix is the same as it always was: stream through the data instead of collecting it.
No. Anything behind an HTTP front end is a synchronous invocation, so the 15-minute ceiling stands. In practice an HTTP front end will cut the request off long before that anyway. If a request triggers long work, the answer has not changed: accept the request, return an identifier immediately, run the job asynchronously, and let the client poll or receive a webhook.
The honest summary is that this removes a constraint that forced bad decompositions, and it does not remove the reasons for good ones. Treat it as permission to delete the state machines you built to beat a clock, and as no reason at all to touch the ones you built to handle failure. If you are not sure which is which, the failure modes that catch teams out on serverless platforms are a reasonable place to start reading.
Sources: the AWS Compute Blog announcement and InfoQ's write-up.
Lambda now supports a maximum function timeout of 90 minutes, or 5,400 seconds, up from 15 minutes. The higher ceiling applies only to functions on Lambda Managed Instances, and only to asynchronous invocations and invocations delivered by an event source mapping. Synchronous invocations remain capped at 15 minutes.
No. Requests arriving through API Gateway are synchronous invocations, and synchronous invocations still cap at 15 minutes. In practice an HTTP front end will cut the request off well before that. For long work behind an HTTP endpoint, return a job identifier immediately and run the work asynchronously.
Not as a single function execution. AWS points to durable functions for work that needs longer, which can run for up to a year. For most batch work the better pattern is still to checkpoint progress and split the job so that a failure costs you one stage rather than the whole run.
Yes, for anything with branching, waits, human approval or stages that need different retry behaviour and concurrency. What you no longer need is a state machine built purely to chop a single long job into 15-minute pieces. If each state exists only to pass a file along, that decomposition was a workaround.
Three things commonly break: cached temporary credentials expire mid-run, idle database connections are dropped, and retries of a failed long job become expensive rather than trivial. Make the work idempotent, checkpoint progress durably, refresh credentials through the SDK provider chain, and expect to reconnect.
Ready to take the first step towards unlocking opportunities, realizing goals, and embracing innovation? We're here and eager to connect.
11th Floor, O-Hub, Chandaka Industrial Estate, Infocity, Bhubaneswar, Odisha 751024
Level 4, 11 York Street Sydney Startup Hub Sydney, NSW – 2000
30 N. Đinh Nghệ, Phước Mỹ Sơn Trà, Đà Nẵng / Da Nang City – 550000
Level 25, AIDP Business Tower, Dubai Marina, United Arab Emirates
50 Beauchamp Street, Wellington, WGN 5028, New Zealand