Learning/AWS SQS/Verified AWS facts

Verified AWS Facts — Single Source of Truth

Verified on: 2026-09-21 against official AWS documentation.

Every number in this course comes from this file. Chapters must link here rather than restate values inline, so that one re-verification pass updates the whole course.

Why this file exists. Most SQS tutorials on the internet are 5+ years stale. Several of the values below changed recently and are commonly taught wrong. Those are flagged ⚠️.

1. Message quotas

ItemValueNotes
Maximum message size1,048,576 bytes (1 MiB)⚠️ Widely taught as 256 KB. AWS raised it. Payloads beyond 1 MiB need the Extended Client Library (S3-backed, up to 2 GB, sync clients only).
Minimum message size1 byte
Messages per batch request10Applies to SendMessageBatch, DeleteMessageBatch, ChangeMessageVisibilityBatch.
MaxNumberOfMessages (ReceiveMessage)1–10, default 1⚠️ The SDK default is 1, not 10. Always set it explicitly.
Message metadata attributes10 per messageSeparate from the body.
Batched message ID≤ 80 chars, [A-Za-z0-9_-]Per-entry ID inside a batch request; not the MessageId.
Message body contentXML, JSON, unformatted text; restricted Unicode ranges#x9 | #xA | #xD | #x20–#xD7FF | #xE000–#xFFFD | #x10000–#x10FFFF. Raw binary must be Base64-encoded.

Source: SQS message quotas

2. Time-based configuration

SettingMinDefaultMax
Visibility timeout0 s30 s12 hours
Message retention period60 s (1 min)4 days14 days (1,209,600 s)
Delivery delay (queue-level DelaySeconds / per-message message timer)0 s0 s15 minutes
WaitTimeSeconds (long polling)0 s0 s20 seconds
FIFO deduplication interval5 minutes (not configurable)

Sources: message quotas, standard queue quotas, exactly-once processing

⚠️ Teaching note. WaitTimeSeconds defaults to 0 (short polling) on a freshly created queue via the API. The console defaults differ. Never assume long polling is on.

3. Queue quotas

ItemStandardFIFO
In-flight messages (received, not yet deleted)~120,000 (approximate; depends on traffic and backlog)120,000 ⚠️ (older docs and most blogs say 20,000)
Behaviour at the in-flight limitShort polling → OverLimit error. Long polling → no error, just no messages.No error returned; processing degrades.
Messages stored (backlog)UnlimitedUnlimited
Queue name≤ 80 chars, [A-Za-z0-9_-], case-sensitiveSame, and must end in .fifo (suffix counts toward the 80)
ListQueues page size1,0001,000
Message groups per FIFO queuen/aNo quota
Queue policy8,192 bytes / 20 statements / 50 principals / 10 conditionssame
Tags≤ 50 recommended; tagging API limited to 30 TPS per accountsame

Sources: standard queue quotas, FIFO queue quotas

4. Throughput

Standard queues

Nearly unlimited API calls per second, per action (SendMessage, ReceiveMessage, DeleteMessage). Scales automatically with demand. There is no published per-queue TPS ceiling.

FIFO queues — default (non-high-throughput) mode

ModeLimit
Without batching300 TPS per API action, per partition
With batching (10 per call)3,000 messages/sec per API action (= 300 calls × 10)

FIFO queues — high throughput mode enabled

Limits are on API requests, not messages, and are region-dependent:

Region groupNon-batched TPSBatched (×10) messages/sec
us-east-1, us-west-2, eu-west-170,000700,000
us-east-2, eu-central-119,000190,000
ap-south-1, ap-southeast-1, ap-southeast-2, ap-northeast-1, eu-south-29,00090,000
eu-west-2, sa-east-14,50045,000
All other regions2,40024,000

Higher limits can be requested via Service Quotas.

Source: SQS message quotas — Message throughput

5. FIFO specifics

  • MessageGroupId is required on every send to a FIFO queue; omitting it fails the call. Length ≤ 128 chars; alphanumerics plus punctuation.
  • Deduplication requires one of:
    • ContentBasedDeduplication enabled on the queue → SQS takes a SHA-256 of the message body only (⚠️ not the message attributes — two messages differing only in attributes are treated as duplicates), or
    • an explicit MessageDeduplicationId per message.
  • Deduplication interval is 5 minutes, fixed. A SendMessage retry within that window does not create a duplicate.
  • AWS's phrase "exactly-once processing" means SQS does not introduce duplicates into the queue. ⚠️ It does not mean your consumer runs exactly once — a consumer crash before DeleteMessage still causes redelivery. See Module 09.

Source: Exactly-once processing in Amazon SQS

6. Fair queues (newer feature)

MessageGroupId is now also accepted on standard queues, where it enables fair queues — mitigating noisy-neighbour starvation when one tenant floods a shared queue. AWS recommends including a MessageGroupId on all messages when using fair queues. Fair-queue requests are billed at both fair-queue and standard rates.

Sources: message quotas — Message group ID, SQS pricing

7. Dead-letter queues

  • DLQ must be in the same AWS account and Region as the source queue, and the same queue type (a FIFO source needs a FIFO DLQ).
  • maxReceiveCount in the redrive policy = how many times a message may be received before it is moved to the DLQ. maxReceiveCount = 1 means one failed receive sends it to the DLQ.
  • Redrive allow policy on the DLQ controls which source queues may use it: allowAll (default), byQueue (up to 10 source queue ARNs), or denyAll.
  • ⚠️ Standard queues only: if maxReceiveCount > 3 and a message has been received 3 or more times without deletion, SQS moves it to the back of the queue. ApproximateAgeOfOldestMessage then reflects the next message under that threshold — a subtle metric distortion worth knowing during incidents.
  • Retention on move:
    • Standard: the original enqueue timestamp is preserved. A message that spent 1 day in the source queue and moves to a DLQ with 4-day retention is deleted after 3 more days.
    • FIFO: the enqueue timestamp resets on the move.
    • → Best practice: DLQ retention longer than source queue retention.
  • AWS explicitly warns against DLQs on FIFO queues where strict ordering must never break.

Source: Using dead-letter queues in Amazon SQS

8. Lambda event source mapping (ESM)

Who polls? ⚠️ The Lambda service polls SQS. Your function does not. Lambda calls ReceiveMessage, invokes your function synchronously with a batch, and calls DeleteMessage for the batch only on success.

Default (on-demand) scaling — standard queues

BehaviourValue
Initial concurrency when messages appear5 concurrent invocations (5 batches at a time)
Scale-up rateup to +300 concurrent invokes per minute
Max concurrent invokes per ESM1,250
Scale-down when idleback to 5, optimising to as few as 2 (disabled if max-concurrency is set)
MaximumConcurrency setting range2–1,000 per event source

Batching

SettingValue
Default batch size10
Max batching window (MaximumBatchingWindowInSeconds)up to 5 minutes
Low-traffic caveatWith a batch window, Lambda may wait up to 20 s even if you configured less
Invocation triggerbatch window expires OR payload size quota reached OR max batch size reached

FIFO queues

Order is preserved; a batch may span multiple message groups. Concurrency is capped by min(number of active message group IDs, MaximumConcurrency). On error, all retries for the affected messages complete before Lambda takes more from that group.

Provisioned mode (newer)

ItemValue
Per event pollerup to 1 MB/s, 10 concurrent invokes, or 10 SQS polling API calls/sec
MinimumPollers2–200 (default 2)
MaximumPollers2–10,000 (default 200)
Scale-up rateup to 1,000 concurrency per minute (3× faster than on-demand)
Max concurrencyup to 100,000 concurrent invokes
Mutually exclusive withthe MaximumConcurrency setting

Poller sizing formula AWS publishes:

EPS per event poller = min(
    ceil(1024 / avg event size in KB),
    ceil(10 / avg function duration in seconds) * batchSize,
    min(100, 10 * batchSize)
)
Required event pollers = peak events/sec ÷ EPS per event poller

Failure handling: by default a function error makes the whole batch visible again → duplicate processing of already-succeeded messages. Fix with ReportBatchItemFailures (partial batch response) or by calling DeleteMessage yourself as each message succeeds.

Sources: Using Lambda with Amazon SQS, Configuring scaling behavior for SQS event source mappings

9. Pricing

Verified 2026-09-21. Re-verify before quoting — pricing changes.

ItemValue
Free tier1,000,000 requests/month, free, for all customers, indefinitely
Standard queuefrom $0.40 per million requests, tiered down to $0.24/M at very high volume
FIFO queuefrom $0.50 per million requests, tiered down to $0.35/M at very high volume
Request counting⚠️ Each 64 KB chunk of payload is billed as one request. A 1 MiB payload = 16 requests.
Data transferFree within the same Region. Cross-Region and internet transfer at standard AWS rates.
Fair queuesstandard-queue requests carrying a MessageGroupId are billed at both fair-queue and standard rates

The cost lever that matters: a request is an API call, not a message. Batching 10 messages per call cuts request count ~10×. Long polling eliminates billed empty receives.

Sources: Amazon SQS Pricing, tiered pricing announcement

10. Facts commonly taught wrong

Use this list when writing chapters — each deserves an explicit correction.

Common claimReality
"Max message size is 256 KB"1 MiB
"FIFO allows 20,000 in-flight messages"120,000
"FIFO gives exactly-once processing"SQS avoids introducing duplicates on send; your consumer can still run twice
"ReceiveMessage returns 10 messages by default"Default is 1
"MessageGroupId is FIFO-only"Also used by fair queues on standard queues
"SQS pushes to Lambda"The Lambda service polls SQS
"A Lambda batch failure only retries the failed message"By default the whole batch returns; needs ReportBatchItemFailures
"Billing is per message"Billing is per request, in 64 KB chunks
"Retries happen in order on a standard queue"After 3 receives, SQS may move the message to the back of the queue
"FIFO throughput is 300 TPS, period"300 TPS per partition, per action; high-throughput mode goes far higher and is region-dependent

Re-verification checklist

Re-run before any publish. Values most likely to drift:

  • Pricing (§9) — tiers and per-million rates
  • FIFO high-throughput regional TPS table (§4)
  • Lambda ESM scaling numbers (§8) — AWS has changed these more than once
  • Provisioned mode limits (§8)
  • In-flight quotas (§3)
  • Fair queues — feature status and billing (§6)