Lambda SQS Provisioned Mode Now Scales to 10,000 Pollers: The Throughput Math That Decides If You Need It

Cleber Rodrigues
Written by Cleber Rodrigues
Lambda SQS Provisioned Mode Now Scales to 10,000 Pollers: The Throughput Math That Decides If You Need It

AWS raised the poller ceiling on August 3, 2026. Provisioned Mode for Amazon SQS event source mappings went from a maximum of 2,000 event pollers to 10,000, which puts the concurrency ceiling for a single event source mapping at 100,000 concurrent Lambda invocations (AWS What’s New, August 3, 2026). Five times the headroom. Teams that needed to clear 20,000 concurrent invocations used to shard one logical queue across several mappings, then stitch the metrics, alarms, and dead letter routing back together by hand. That workaround is dead.

Here’s the part the announcement doesn’t spell out. Turning provisioned mode on costs money every second it’s enabled, whether messages arrive or not, and the always-on ceiling has not moved at all. The maximum is now 10,000 pollers. The minimum is still capped at 200. So the amount of capacity you can genuinely pre-warm is unchanged, and the new headroom is entirely autoscale headroom.

This article works through the throughput arithmetic behind that distinction. What an event poller actually is, how default event source mapping scaling behaves, the exact point where default scaling silently falls behind, what 10,000 pollers converts into in messages per second, and what the bill looks like. My conclusion up front, so you can stop reading if you disagree: the overwhelming majority of SQS-to-Lambda workloads should leave provisioned mode off.

What an event poller actually is

Start with the resource, because the vocabulary trips people up. An event source mapping is Lambda-managed plumbing that reads from a source and invokes your function. It isn’t in your VPC. You don’t run it, and in default mode you don’t pay for it as a line item. Against SQS it calls ReceiveMessage, groups what comes back into a batch, invokes your function synchronously with that batch, then calls DeleteMessage once the invocation succeeds (Using Lambda with Amazon SQS).

An event poller is the unit of that polling machinery that provisioned mode lets you allocate explicitly. AWS publishes three hard per-poller limits, and every capacity calculation in this article comes back to them:

  • Up to 1 MB/s of throughput
  • Up to 10 concurrent invocations
  • Up to 10 SQS polling API calls per second

Those are ceilings on a single poller, and the binding one changes with your workload. A function processing 200 KB payloads hits the bandwidth wall long before the concurrency wall. A function that runs for eight seconds hits the concurrency wall while barely using any bandwidth. That’s the whole game, and it’s why a single “how many pollers do I need” answer doesn’t exist.

Worth sitting with that for a second, because it explains most of the confusion around this feature. A poller isn’t a fixed quantity of throughput. It’s three separate allowances that happen to be bundled together, and you only ever get to spend the smallest one.

The three ceilings also give you the headline number for free. Ten thousand pollers times ten concurrent invocations each equals 100,000 concurrent invocations, which is exactly the figure in the launch post. Multiply differently and you get 10 GB/s of aggregate polling bandwidth, or 100,000 ReceiveMessage calls per second. Hold on to that last one. It shows up on your bill later.

Diagram showing the SQS event poller scaling path from a standard queue through provisioned-mode event pollers to concurrent Lambda invocations

Default scaling is better than most people assume

Before reaching for provisioned mode, know what you already have. Default mode (AWS calls it standard mode in some places and on-demand in others) is not a toy.

Lambda long-polls a quiet standard queue. When messages appear, it starts with five batches and five concurrent invocations. If the backlog persists, it adds up to 300 more concurrent invocations per minute, and a single event source mapping tops out at 1,250 concurrent invocations (Configuring scaling behavior for SQS event source mappings). When traffic dies down it retreats to five concurrent invocations, and it can optimize as low as two to cut your SQS API calls. That last optimization disappears the moment you set the maximum concurrency parameter, which is a small detail with a real cost attached.

Now convert 1,250 concurrent invocations into messages per second. The formula is boring and it’s the only one you need:

messages per second = (concurrency / average function duration in seconds) x batch size

With a batch size of 10 and a 100 ms function, 1,250 concurrent invocations drains 125,000 messages per second. That is an enormous amount of work for a mode that charges you nothing extra. Default scaling doesn’t fall behind because the concurrency number is small. It falls behind when your functions are slow, because slow functions convert concurrency into throughput at a terrible exchange rate.

Avg function duration Batch size Max sustained msg/sec at 1,250 concurrency Verdict
50 ms 10 250,000 Default mode is not your bottleneck
100 ms 10 125,000 Default mode is not your bottleneck
250 ms 10 50,000 Comfortable
1 s 10 12,500 Comfortable for most queues
2 s 10 6,250 Watch this
5 s 10 2,500 Default mode is now the ceiling
10 s 10 1,250 Default mode is badly outmatched
1 s 1 1,250 Fix your batch size before anything else

All of it derived from that same 1,250 ceiling in the SQS scaling behavior docs. Nothing exotic. Just division.

Look at the last row. A workload with batch size 1 and a one-second function gets the same throughput as a ten-second function with batching. Before you spend a dollar on pollers, raise your batch size. AWS says the same thing in the provisioned mode docs, recommending a batch size of 10 or higher specifically to make pollers efficient. Batching is free. Pollers are not.

The two failure modes of default scaling

Default scaling breaks in exactly two ways, and they need different fixes.

Failure one: the ceiling. Required concurrency exceeds 1,250. Compute it directly with (peak msg/sec / batch size) x duration and compare. If the answer is above 1,250, no amount of patience helps. The queue grows for as long as the peak lasts.

Peak msg/sec Batch Duration Required concurrency Fits in default (1,250)?
1,000 10 100 ms 10 Yes, trivially
5,000 10 200 ms 100 Yes
10,000 10 250 ms 250 Yes
10,000 10 1 s 1,000 Yes, with 20% headroom
10,000 10 2 s 2,000 No
25,000 10 1 s 2,500 No
50,000 10 2 s 10,000 No
100,000 10 5 s 50,000 No

Required concurrency calculated from the throughput formula above; the 1,250 ceiling is per event source mapping and can be raised by AWS Support on request.

Note the escape hatch in that table’s footnote. AWS will raise the 1,250 per-mapping concurrency for an SQS event source mapping if you ask. The docs say so plainly: “If this is insufficient for your use case, contact AWS support to discuss an increase to your account’s Amazon SQS event source mapping concurrency.” A support ticket costs nothing and does not commit you to a recurring charge. Try that before provisioned mode.

Failure two: the ramp. This is the one that hurts, and it’s the reason provisioned mode exists.

Default mode adds 300 concurrent invocations per minute from a standing start of five. Getting to 1,250 takes about 4 minutes and 9 seconds. During that ramp, messages pile up. Provisioned mode adds up to 1,000 concurrency per minute, which AWS describes as 3x faster scaling, and it starts from whatever floor your MinimumPollers value buys you rather than from five.

Let me put real numbers on that gap. Take a queue that jumps from idle to 10,000 messages per second instantly, with one-second functions and a batch size of 10. Steady state needs 1,000 concurrent invocations, which default mode can reach. The question is what happens on the way there.

Configuration Drain rate at t=0 Time to match 10,000 msg/sec Peak backlog accumulated Worst-case message age Monthly poller charge
Default (on-demand) 50 msg/sec ~199 s ~990,000 messages ~3 min 19 s $0
Provisioned, min 10 pollers 1,000 msg/sec ~54 s ~243,000 messages ~54 s $67.53
Provisioned, min 100 pollers 10,000 msg/sec 0 s ~0 near zero $675.25
Provisioned, min 200 pollers 20,000 msg/sec 0 s 0 near zero $1,350.50

Modeled from AWS published ramp rates (300 concurrency/min default, 1,000 concurrency/min provisioned) and $0.00925 per EPU-hour over a 730-hour month. These are calculated projections from documented rates, not measurements from a load test. Your numbers will differ.

Nearly a million messages of backlog on a single spike, with the oldest message waiting more than three minutes. If your SLO reads “p99 end-to-end under five seconds,” default mode fails that spike and no dashboard will tell you why unless you’re watching ApproximateAgeOfOldestMessage. This is the “silently falls behind” case. Throughput recovers, the graph looks fine in aggregate, and a slice of your traffic missed its deadline.

That table is also the whole cost conversation in miniature. Going from 10 minimum pollers to 100 buys you 54 seconds of latency and costs roughly $600 a month. Whether that’s a bargain or a waste depends entirely on what those 54 seconds are worth, and most teams have never quantified it.

Sizing pollers from real numbers

AWS publishes a formula for events per second per poller, and it encodes the three per-poller ceilings:

EPS per event poller =
    minimum(
        ceiling(1024 / average event size in KB),
        ceiling(10 / average function duration in seconds) * batch size,
        min(100, 10 * batch size)
    )

Required event pollers = peak events per second / EPS per event poller

The three terms are bandwidth, concurrency, and API call rate, in that order. Whichever is smallest wins. Run it across realistic workload shapes and the spread is dramatic:

Avg event size Duration Batch Binding constraint EPS per poller Pollers for 10,000 msg/sec
1 KB 50 ms 10 API rate cap 100 100
3 KB 250 ms 10 API rate cap 100 100
3 KB 1 s 10 API rate cap 100 100
3 KB 2 s 10 Concurrency 50 200
3 KB 5 s 10 Concurrency 20 500
64 KB 200 ms 10 Bandwidth 16 625
256 KB 500 ms 10 Bandwidth 4 2,500
1 KB 100 ms 1 API rate cap 10 1,000

Calculated with the formula published in the AWS provisioned mode documentation.

A 25x difference in poller count for the same 10,000 messages per second, driven entirely by payload size and function duration. Two rows deserve attention.

The 256 KB row is the expensive trap. Bandwidth pins you at 4 events per second per poller, so you need 2,500 pollers. Those 2,500 pollers hand you 25,000 concurrent invocations, but the workload only needs 500 concurrent invocations to keep up. You’re buying fifty times more concurrency than you’ll use because you’re really buying bandwidth. If your messages are large, move the payload to S3 and put a pointer in the queue before you touch provisioned mode. The tradeoffs of fat versus thin messages, including what changed when SQS and Lambda raised the payload ceiling to 1 MB, matter more here than any poller setting.

The batch-size-1 row is the self-inflicted one. Dropping from batch 10 to batch 1 costs you a factor of ten in poller efficiency, because the third term collapses to min(100, 10). If you can’t batch because your handler isn’t idempotent or your error handling can’t isolate a single bad message, fix that first. Partial batch responses and the failure paths around them are covered in depth in this walkthrough of SQS and Lambda event source mapping error handling.

There’s a clean shortcut hiding in the table. When function duration is the binding constraint, the poller count is always your required concurrency divided by ten. Check the 2-second row: 200 pollers, 2,000 concurrency, and required concurrency of (10000/10) x 2 = 2,000. The algebra cancels exactly. So for slow functions you can skip the formula and just size concurrency, then divide by 10.

A discrepancy in the AWS docs worth knowing about

The formula and AWS’s own worked example disagree. The docs describe a workload with 3 KB events, batch size 10, and a 100 ms duration, and correctly report 100 EPS per poller. Then the next sentence says that with the same characteristics but a one-second duration, “each poller supports only 10 EPS, requiring you to configure 100 minimum pollers.”

Push one-second duration through the published formula and you get min(342, ceiling(10/1) * 10, min(100, 100)), which is min(342, 100, 100), which is 100 EPS. Not 10. The middle term drops the batch multiplier somewhere in the prose. Ten times is not a rounding error, and it’s the difference between 100 pollers and 1,000 pollers on a 10,000 EPS queue, or roughly $675 versus $6,753 per month if you pin them as your minimum.

I can’t tell you which figure reflects the real implementation, and I’d be guessing if I claimed to. What I can tell you is that AWS closes that same doc section with “we recommend testing your specific workload to determine the actual EPS each event poller can drive.” Take that literally. Load test before you commit to a minimum poller count, because the published guidance contradicts itself by an order of magnitude on one of the most common workload shapes there is.

While you’re checking documentation against itself: the scaling behavior page still advertises provisioned mode as “up to 16 times higher processing capacity,” while the SQS page claims 80x and 100,000 concurrent invocations. Sixteen times 1,250 is 20,000, which is exactly the old 2,000-poller ceiling. That page simply hasn’t been updated for this launch.

What provisioned mode actually costs

Provisioned mode bills through a unit called the Event Poller Unit. For SQS the mapping is refreshingly simple: one EPU equals one event poller, priced at $0.00925 per EPU-hour in US East (N. Virginia), billed per second with a one-minute minimum (AWS Lambda pricing).

Kafka event source mappings work differently, with one EPU covering up to 20 MB/s and a default of 10 pollers per EPU at $0.185 per EPU-hour. Don’t carry Kafka intuition into SQS sizing. The SQS unit is a single poller.

One poller left running through a 730-hour month costs $6.75. Harmless. Nobody escalates a $6.75 line item. But MinimumPollers is a floor you pay for around the clock, and the floor multiplies, so here’s the whole ladder:

MinimumPollers Pre-warmed concurrency Pre-warmed bandwidth EPU-hours / month Monthly EPU charge
2 (default) 20 2 MB/s 1,460 $13.51
10 100 10 MB/s 7,300 $67.53
25 250 25 MB/s 18,250 $168.81
50 500 50 MB/s 36,500 $337.63
100 1,000 100 MB/s 73,000 $675.25
200 (maximum) 2,000 200 MB/s 146,000 $1,350.50

Calculated at $0.00925 per EPU-hour over a 730-hour month, US East (N. Virginia), from the Lambda pricing page. Autoscaled pollers above your minimum bill at the same rate for the seconds they exist.

Two things stand out. The floor for simply enabling provisioned mode is $13.51 a month, since MinimumPollers cannot go below 2. And the top of that table, 200 pollers, is the most you can pre-warm no matter what you set as your maximum.

Now the ceiling. If an event source mapping sat pinned at 10,000 pollers for a full month, the EPU charge alone would be 7,300,000 EPU-hours at $0.00925, or $67,525. That is before a single millisecond of Lambda compute, before request charges, and before SQS.

The SQS bill nobody budgets for

Each poller makes up to 10 SQS polling API calls per second. The docs mention this in one sentence and move on: “Each event poller uses long polling to your SQS queue with up to 10 polls per second, which incur SQS API requests cost.”

I went to the AWS Price List API for these numbers instead of a pricing page, because the tier boundaries are where the surprises live. Standard requests in us-east-1 bill at $0.40 per million up to 100 billion a month. The next 100 billion drop to $0.30 per million. Everything past 200 billion costs $0.24 per million. Effective date on that record is 2025-08-01, and it agrees with Amazon SQS pricing. Multiply by busy pollers and it gets uncomfortable fast.

Pollers polling at 10 calls/sec Requests per second Requests per month SQS request charge EPU charge SQS as % of poller cost
10 100 262.8 M $105.12 $67.53 156%
100 1,000 2.63 B $1,051.20 $675.25 156%
200 2,000 5.26 B $2,102.40 $1,350.50 156%
10,000 100,000 262.8 B $85,072.00 $67,525.00 126%

Modeled at the full 10 polls/sec per poller over a 730-hour month using tiered standard-queue request pricing. Real workloads poll less than the maximum, and each successful batch adds a DeleteMessage call on top. Treat these as upper bounds on the polling component, not forecasts.

The SQS API bill exceeds the poller bill in every row. A fully saturated 10,000-poller mapping would run about $152,597 a month in pollers plus polling requests, still excluding all Lambda compute and duration charges. Nobody will actually run that configuration flat out for a month, and that’s the point of showing it. The published ceiling is a burst ceiling, not a shape you should design toward.

Two more billing details worth internalizing. SQS bills each 64 KB chunk of payload as a separate request, so a ReceiveMessage returning a full 1 MiB batch counts as 16 requests rather than one. And every successfully processed batch adds a delete call, so the steady-state cost per batch of 10 messages is at least three requests end to end: one send, one receive, one delete. If you’re tracking serverless spend against a budget, this belongs in the same review as the patterns in this guide to AWS FinOps under the Well-Architected Framework.

Configuring it

Provisioned mode is a property of the event source mapping, not the function. Turn it on with ProvisionedPollerConfig:

aws lambda update-event-source-mapping \
  --uuid a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \
  --provisioned-poller-config '{"MinimumPollers": 10, "MaximumPollers": 2000}'

Turn it off by passing an empty object, which returns the mapping to default on-demand scaling:

aws lambda update-event-source-mapping \
  --uuid a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \
  --provisioned-poller-config '{}'

In CloudFormation or SAM, the same settings live on the event source mapping resource:

OrderProcessorMapping:
  Type: AWS::Lambda::EventSourceMapping
  Properties:
    EventSourceArn: !GetAtt OrderQueue.Arn
    FunctionName: !Ref OrderProcessor
    BatchSize: 10
    MaximumBatchingWindowInSeconds: 0
    FunctionResponseTypes:
      - ReportBatchItemFailures
    ProvisionedPollerConfig:
      MinimumPollers: 10
      MaximumPollers: 2000

Enable event source mapping metrics too, because they’re opt-in and silently absent until you ask for them:

aws lambda update-event-source-mapping \
  --uuid a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \
  --metrics-config Metrics=EventCount

That gives you PolledEventCount, FilteredOutEventCount, InvokedEventCount, FailedInvokeEventCount, and DeletedEventCount for SQS sources. Provisioned mode adds ProvisionedPollers, which you should graph with the MAX statistic (Lambda metric types).

Here’s an observability gap to plan around. The EventPollerUnit metric, which reports actual EPU consumption, is documented as available for Amazon MSK and self-managed Kafka sources only. For SQS there’s no direct metric for your billing unit. You infer spend from MAX(ProvisionedPollers), which means your cost signal and your billing signal are different measurements. Build the alarm anyway:

aws cloudwatch put-metric-alarm \
  --alarm-name sqs-esm-pollers-near-max \
  --namespace AWS/Lambda \
  --metric-name ProvisionedPollers \
  --statistic Maximum \
  --period 300 \
  --evaluation-periods 2 \
  --threshold 1600 \
  --comparison-operator GreaterThanThreshold \
  --dimensions Name=EventSourceMappingArn,Value=<your-esm-arn>

Pair it with an alarm on the queue’s ApproximateAgeOfOldestMessage. That metric, not poller count, is the one that tells you whether you’re actually meeting your latency SLO. Wiring both into a single view is straightforward with the techniques in this CloudWatch metrics and alarms deep dive.

Gotchas that will bite you

The minimum is still 200. MinimumPollers accepts 2 through 200. MaximumPollers accepts 2 through 10,000. This launch moved only the maximum. Your genuinely pre-warmed capacity is capped at 2,000 concurrent invocations and 200 MB/s, exactly where it was before. Everything above that arrives at 1,000 concurrency per minute, which means climbing from 2,000 to the full 100,000 takes roughly 98 minutes. If someone on your team believes provisioned mode delivers 100,000 concurrent invocations on demand, correct that today.

Provisioned mode and maximum concurrency are mutually exclusive. You cannot set both. If you currently use MaximumConcurrency to protect a downstream RDS instance from connection exhaustion, switching to provisioned mode means re-expressing that ceiling as MaximumPollers, and pollers come in units of ten concurrent invocations. “Cap at 55” is not expressible. You get 50 or 60. For a lot of teams that single constraint disqualifies provisioned mode, because the maximum concurrency setting was doing safety work, not performance work.

Your account concurrency quota is the real ceiling. Default concurrent executions per Region sits at 1,000. The Lambda quotas page says it goes up to “tens of thousands.” Set MaximumPollers to 10,000 while your account is still at 1,000 and all you’ve bought is throttles. And “tens of thousands” doesn’t obviously stretch to the 100,000 concurrency that 10,000 pollers imply. I couldn’t confirm from public documentation that a 100,000 concurrency increase is generally available, so treat it as a question for your account team rather than a settled fact.

FIFO queues barely benefit. For FIFO sources, concurrent invocations are capped by the number of distinct MessageGroupId values or the concurrency setting, whichever is lower. Six message groups means six concurrent invocations, no matter how many pollers you provision. Non-high-throughput FIFO partitions also cap at 300 transactions per second per API action (SQS message quotas). Count your message group cardinality before enabling provisioned mode on anything covered by the FIFO queue ordering guarantees.

Pollers don’t fix a broken consumer. Provisioned mode increases the rate at which messages reach your function. If your function fails, faster delivery means faster retries, faster visibility timeout churn, and a dead letter queue filling at ten times the previous rate. Getting your SQS dead letter queue configuration right is a prerequisite, not a follow-up task.

Function-level cold starts are a separate problem. Pollers ramp polling capacity. They do not pre-initialize execution environments. Scaling from 100 to 2,000 concurrent invocations still means about 1,900 cold starts, and for a heavy runtime that’s seconds of added latency per environment. Provisioned mode and provisioned concurrency solve different halves of the same spike, and if initialization is your real cost you want the techniques in this guide to reducing Lambda cold start latency before you buy pollers.

One-minute minimum billing. Charges are per second with a one-minute floor per poller. Toggling provisioned mode around a nightly batch window is viable, but a 20-second burst still bills a full minute.

When to turn it on, and when not to

Be honest about which problem you have. There are only three.

You have a ceiling problem if required concurrency exceeds 1,250 during peaks that last long enough to matter. Confirm with (peak msg/sec / batch) x duration. First ask AWS Support to raise the per-mapping concurrency, since that’s free. If the number is far above 1,250, provisioned mode with a modest minimum and a generous maximum is the right tool, and this launch genuinely helps by removing the need to shard across mappings.

You have a ramp problem if you can drain peak traffic once you’re warm, but the four-minute climb blows your latency SLO. Quantify the miss before spending: multiply the ramp deficit by its duration to get backlog, then divide by drain rate to get worst-case message age. If that age exceeds your SLO on a spike pattern that recurs, a small MinimumPollers value is money well spent. Ten to twenty-five pollers, which is $68 to $169 a month, covers a surprising number of these cases.

You have neither, which is where most teams actually sit. Traffic is bursty but the bursts are small, p99 latency has slack, and nobody has an SLO tight enough for a 54-second ramp to violate. Leave provisioned mode off. You’ll save the money and the configuration surface.

One more thing about that third case. The temptation is to enable provisioned mode anyway, set a tiny minimum, and treat it as cheap insurance. I’d push back on that. A minimum of 2 pollers costs $13.51 a month, which is genuinely nothing, but it also buys you almost nothing: 20 concurrent invocations versus the 5 you already get. What you have actually bought is an incompatibility with MaximumConcurrency, the loss of the automatic scale-down to 2 concurrent invokes, and one more parameter that has to be right during an incident. Insurance that changes your failure modes isn’t insurance.

Situation Recommendation
Required concurrency under 1,250, no sub-minute latency SLO Default mode. Do nothing.
Batch size is 1 or 2 Raise batch size and re-measure before considering pollers
Average message over 64 KB Move payloads to S3, keep pointers in the queue
Need 1,250 to ~5,000 concurrency, relaxed latency Ask AWS Support for a concurrency increase first
Spiky traffic, latency SLO in the seconds Provisioned mode, MinimumPollers 10 to 50
Sustained above 12,500 msg/sec with 1 s functions Provisioned mode, size from the poller formula
Above 20,000 concurrency needed per mapping Provisioned mode, and this launch removes your sharding workaround
Using MaximumConcurrency as a downstream safety valve Stay on default mode. The two settings are incompatible.
FIFO queue with few message groups Default mode. Pollers cannot exceed group parallelism.

A worked sizing example

Concrete beats abstract. An order-processing queue, 3 KB messages, a 250 ms function at 1,024 MB, batch size 10. Baseline is 500 messages per second. Twice a day a flash sale drives 10,000 messages per second for about 20 minutes. The SLO says 99% of orders acknowledge within 10 seconds.

Peak concurrency required: (10,000 / 10) x 0.25 = 250. That fits inside 1,250 with room to spare, so there’s no ceiling problem at all.

Ramp check for default mode. Drain rate climbs at 300 concurrency per minute from a floor of five, so (250 - 5) / 300 is about 49 seconds to full capacity. Backlog accumulated during that climb is roughly 245,000 messages, and worst-case message age is about 49 seconds.

That breaks a 10-second SLO. So this workload has a ramp problem, not a ceiling problem, and it needs the smallest fix that closes a 49-second gap.

Poller math from the formula: min(ceiling(1024/3), ceiling(10/0.25) x 10, min(100, 100)) equals min(342, 400, 100), so 100 EPS per poller. Baseline needs 5 pollers. Peak needs 100.

Three options, three prices. A minimum of 100 pollers covers peak instantly for $675.25 a month. A minimum of 10 delivers 1,000 messages per second right away and needs about 54 seconds to reach 10,000, which still blows the SLO during the first minute of the sale. A minimum of 50 handles 5,000 messages per second at t=0 and closes what’s left in roughly 30 seconds, for $337.63.

My call: MinimumPollers: 50, MaximumPollers: 400. Then measure ApproximateAgeOfOldestMessage through two real sales and adjust. The 400 maximum gives 4x headroom over measured peak without inviting a runaway bill, and it’s nowhere near 10,000. For this workload the new ceiling is completely irrelevant, which is true for the large majority of queues in production today.

Notice what this example did not need: it never approached the old 2,000-poller limit, let alone the new 10,000. The launch matters for a genuinely small population of workloads, mostly high-volume pipelines with slow functions or large payloads. If your architecture also fans messages out to multiple consumers, the topology choices in this comparison of SNS and SQS for real project fan-out will shape your poller math more than any single parameter, since splitting one hot queue into several changes both the concurrency requirement and the per-mapping ceiling you’re fighting.

The takeaway

Ten thousand pollers is a real increase for a narrow set of workloads, and it removes a legitimate architectural annoyance for teams that were sharding queues to get past 20,000 concurrent invocations. For everyone else the important number in this launch isn’t 10,000. It’s 200, the unchanged maximum for MinimumPollers, which means the capacity you can actually pre-warm is exactly what it was last week. Measure your required concurrency, fix your batch size, ask Support for a free quota increase, and only then decide whether a latency gap you’ve actually quantified is worth $6.75 per poller per month.

Sources

Cleber Rodrigues

Cleber Rodrigues

AWS Enthusiast | Cloud Architect | AWS Certified Solutions Architect – Professional

Comments

comments powered by Disqus