Filter concepts by levelShowing all levels.

AWS · Quotas and Limits

AWS Service Quotas and Limits

Which limits are a request, which are a redesign, and how to find out before production does

  • Applied, not defaultthe enforced value is account-specific
  • Alarm at ~70%a review needs weeks, not minutes
  • Fixed limits write designs900 s and 6 MB are not negotiable
  • Some limits are yourstotal DB connections is arithmetic

1.Every Service Has Quotas

AWS looks unlimited and is not. Every service defines maximum values for its resources, actions and items, and your account starts at a default for each one. Some of those defaults can be raised on request; others cannot be changed at all. Knowing which is which for the services you use is the difference between a capacity problem you planned for and an outage.

Key features

  • AWS defines a service quota as the maximum value for the resources, actions and items in an account; each service sets its own defaults
  • Quotas may apply per account or per Region, and the quota description says which — VPCs per Region is Region-based, IAM roles per account is account-based
  • Some quotas are adjustable and some are not; the Service Quotas console shows an "Adjustable" column per quota
  • An applied quota is an override or increase above the AWS default value for a specific quota
  • A global quota is applied at account level and can only be increased from US East (N. Virginia) in the standard AWS partition
  • A quota increase request is reviewed and may be approved, denied, or partially approved — it is not guaranteed and not instant

The vocabulary, and why each term matters

The vocabulary, and why each term matters
TermMeaningWhy you care
Service quotaThe maximum resources or operations for an account or RegionIt is the real ceiling, whatever the marketing says
Default valueThe initial quota value AWS establishesWhere a brand new account starts — often far below production need
Adjustable valueA quota value that can be increasedDetermines whether the fix is a request or a redesign
Applied quotaThe updated value after an increaseWhat is actually enforced today — check it, do not assume the default
UsageResources or operations currently in useThe numerator
UtilizationUsage as a percentage of the quotaThe number worth alarming on
Global quotaApplied at account level, present in all RegionsIncreases are requested only from us-east-1 in the standard partition
Default, applied, and the ceiling you cannot move

Usage is what you consume; utilization is that as a percentage of the quota. The default is a starting point, the applied quota is where you have raised it to, and a hard quota cannot be moved at all.

  • A horizontal bar chart showing quota vocabulary.
  • The first bar shows usage, the number of resources or operations currently in use, filling part of the quota.
  • A marker at 75 percent of the bar is labelled utilization, defined as usage divided by the quota value; the example given is 150 resources in use against a quota of 200.
  • The end of the first bar is labelled default value, the initial quota established by AWS.
  • A second, longer bar shows the applied quota — the updated value after an approved increase — which extends beyond the default.
  • A third mark shows a hard quota, which cannot be increased at all and must be designed around.

Signature

default → (adjustable?) → applied quota · usage ÷ quota = utilization · global quotas raised from us-east-1

Every service sets quotas, per account or per Region, and your account starts at a default that may already have been overridden. Split every quota you depend on into adjustable and not: adjustable ones are a request to file early, and non-adjustable ones are design inputs that no request will move.

2.Monitoring Utilization and Requesting Increases Early

A quota you are not watching is a quota you will discover by hitting it. Service Quotas shows utilization — usage as a percentage of the quota — and supports CloudWatch alarms on quotas that report it. An alarm at seventy percent gives you the weeks a review needs; no alarm gives you an incident.

Key features

  • Service Quotas can create a CloudWatch alarm on a quota, with a threshold you choose, to notify you when you approach the quota value
  • Utilization only appears for a quota you are actively using, and CloudWatch alarms are offered only for quotas that support them
  • The console shows current resource utilization as a graph once the account has been active for a period
  • Service Quotas Automatic Management can monitor quota usage and notify you before you run out of your allocated quota
  • An increase is requested per quota, per Region — except global quotas, which are requested from us-east-1 in the standard partition
  • Increases take time to review, process and approve, so the request has to be made before the capacity is needed

What to watch, and where each signal comes from

What to watch, and where each signal comes from
SignalSourceWhat it tells you
Quota utilizationService Quotas console and CloudWatch alarmsHow close you are, as a percentage that survives increases
Throttling metricsThe service's own metrics — for example Lambda `Throttles`You already crossed a limit; this is a symptom, not a warning
Error codes in logsApplication logs and CloudTrail`ThrottlingException`, `LimitExceededException`, `TooManyRequestsException`
Applied quota values`get-service-quota` per quota codeThe value actually enforced for this account today
Increase history`list-requested-service-quota-change-history`What has been raised before, and how long approvals took
Automatic managementService Quotas Automatic ManagementAWS monitoring usage and notifying you before you run out
Where the alarm goes, and how much runway it buys

Alarm on utilization rather than on an absolute count, and set the threshold so the remaining runway is longer than a quota review takes.

  • A line chart of quota utilization over eight weeks, rising steadily.
  • A horizontal line at 100 percent marks the quota — where requests begin to be throttled.
  • A dashed line at 70 percent marks the alarm threshold.
  • The rising usage line crosses 70 percent in week five and would reach 100 percent in week eight.
  • The gap between the two crossings is labelled "runway: three weeks to request, review and receive an increase".
  • A note reads: an alarm on an absolute count stops being meaningful the moment the quota is raised, which is why the threshold is a percentage.

Signature

Service Quotas utilization alarm @ ~70% (warning) + service throttling alarm @ >0 (backstop)

Alarm on utilization at around seventy percent so there is runway for a review, and keep a throttling alarm as the backstop for spikes. Record the applied quota rather than the documented default, request increases weeks early, and re-check after every growth event — a quota is never a mitigation during an incident.

3.Limits Are Architecture Inputs

Some limits are numbers to raise; others are constraints that decide the shape of the design. A 15-minute function ceiling is not a capacity problem — it is a statement about what kind of work belongs in a function. Reading those constraints before drawing the architecture is cheaper than discovering them after.

Key features

  • Lambda functions run for at most 900 seconds and take 128 MB to 10,240 MB of memory; both are ceilings, and the timeout cannot be increased
  • Lambda synchronous payloads are capped at 6 MB each way and asynchronous ones at 1 MB, so large data travels as an S3 reference
  • A NAT gateway supports 55,000 simultaneous connections per destination per IPv4 address, and each additional IP adds another 55,000
  • API Gateway defaults to 10,000 requests per second while Lambda defaults to 1,000 concurrent executions — a mismatch worth resolving deliberately
  • A subnet's usable addresses bound how many ENIs, tasks and pods can exist in it, which is a planning decision made once and hard to change
  • Database connections are bounded by instance class, and every process and every Lambda execution environment holds its own

The limits that shape designs, and what each one forces

The limits that shape designs, and what each one forces
LimitValueWhat it forces
Lambda timeout900 seconds (15 minutes), not adjustableLong jobs go to ECS, Batch or Step Functions — not a bigger function
Lambda payload6 MB synchronous each way, 1 MB asynchronousPass an S3 key, never the object
Lambda concurrency1,000 per Region by default, adjustableA queue between the front door and the function, or a matching increase
API Gateway throughput10,000 rps by default, adjustableCheck it against downstream concurrency — the two defaults do not match
NAT connections55,000 per destination per IP addressConnection reuse, extra IPs, or a VPC endpoint that avoids NAT entirely
Subnet addressesFixed by the CIDR you chose at creationSize subnets for the fleet you will have, not the one you start with
Database connectionsBounded by instance classA bounded pool, and RDS Proxy when many short-lived processes connect
SQS message size256 KB per messageLarge payloads by reference — the message points at S3
S3 object size5 TB maximum object, 5 GB maximum single PUTMultipart upload above 5 GB — a client feature, not a request
Raise it, or design around it

Adjustable — file a request

Lambda concurrency, API Gateway throughput, Elastic IPs, NAT gateways per AZ, VPCs per Region. Plan weeks ahead, not hours.

Fixed — a design input

Lambda 15-minute timeout, 6 MB synchronous payload, SQS 256 KB message. No request moves these; the architecture accommodates them.

Structural — chosen once, changed painfully

Subnet CIDR sizing, partition key design, Region selection. Technically changeable, practically a migration.

Derived — a consequence of your own choices

Connections per database = pool size × processes. Nobody grants this; you compute it and stay under it.

  1. Adjustable — file a request — Lambda concurrency, API Gateway throughput, Elastic IPs, NAT gateways per AZ, VPCs per Region. Plan weeks ahead, not hours.
  2. Fixed — a design input — Lambda 15-minute timeout, 6 MB synchronous payload, SQS 256 KB message. No request moves these; the architecture accommodates them.
  3. Structural — chosen once, changed painfully — Subnet CIDR sizing, partition key design, Region selection. Technically changeable, practically a migration.
  4. Derived — a consequence of your own choices — Connections per database = pool size × processes. Nobody grants this; you compute it and stay under it.

Signature

Lambda 900 s / 6 MB · NAT 55,000 per destination per IP · API GW 10,000 rps vs Lambda 1,000 concurrent · SQS 256 KB

Sort every limit into adjustable, fixed, structural, or derived. Adjustable ones are a request filed early; fixed ones such as the 15-minute Lambda timeout and the 6 MB payload write the architecture for you; structural ones like subnet sizing are chosen once; and derived ones like total database connections are yours to compute and stay under.

Remember

  • An increase request may be approved, denied, or partially approved, and takes time to review — so it is never a mitigation during an incident.
  • New accounts start with reduced Lambda concurrency and memory quotas that AWS raises based on usage, which makes a load test on a fresh account misleading.
  • Global quotas are increased only from US East (N. Virginia) in the standard AWS partition.
  • API Gateway defaults to 10,000 rps in front of a Lambda default of 1,000 concurrent executions — check that mismatch before it finds you.

Pro tip

  • Alarm on utilization rather than on an absolute count: a threshold of "800 concurrent executions" becomes meaningless the day the quota moves to 5,000, and percentages re-baseline themselves.
  • Check the "Adjustable" column before opening a support case. It tells you in one look whether the next step is a request or a redesign, and only one of them can work.

Next up

  • AWS Governance and Tagging
  • High Availability and Reliability
  • Performance and Scalability

Sources

  • What is Service Quotas? — docs.aws.amazon.com/servicequotas/latest/userguide/intro.html
  • Service Quotas and Amazon CloudWatch alarms — docs.aws.amazon.com/servicequotas/latest/userguide/configure-cloudwatch.html
  • Lambda quotas — docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html
  • Troubleshoot NAT gateways — docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-troubleshooting.html
  • Checked against official AWS documentation 2026-09-04

Spotted a mistake on this page? Tell us.