Scalable, Loosely Coupled Architectures: SQS, SNS, EventBridge, Step Functions
Task 2.1 covers the architecture patterns that let systems scale and fail independently: queuing with Amazon SQS, publish/subscribe with SNS, event routing with EventBridge, workflow orchestration with Step Functions, API Gateway as a managed front door, and the compute decisions among Lambda, Fargate, and ECS or EKS on EC2. It sits inside Design Resilient Architectures, worth 26% of SAA-C03 scored content, and loose coupling is the mechanism behind most "redesign this architecture" questions. The exam rarely asks what a queue is — it hands you a tightly coupled system that drops orders during a flash sale, or a single event that five downstream systems must react to, and asks which integration service fixes it with the LEAST operational overhead. By the end of this lesson you will be able to pick the right integration service and the right compute layer from a scenario's trigger phrases, and explain exactly why each runner-up option loses.
On this page9 sections
- Why loose coupling means resilience and independent scaling
- SQS decisions: standard vs FIFO, visibility timeout, and dead-letter queues
- SNS pub/sub and the SNS-to-SQS fan-out pattern
- EventBridge: event routing, SaaS integration, and choosing among the three
- Step Functions: orchestrating multi-step workflows with retries
- API Gateway: the managed front door — and the integration decision table
- Compute selection: Lambda vs Fargate vs ECS/EKS on EC2
- Scaling strategies: Auto Scaling, load balancing, caching, and the edge
- Worked scenarios: reasoning through Task 2.1 questions
- Explain why loose coupling improves both resilience and scaling, and spot tight coupling inside a scenario
- Choose between SQS standard and FIFO queues, and reason about visibility timeouts and dead-letter queues
- Select SQS, SNS, EventBridge, Step Functions, or API Gateway from a scenario's requirements and trigger phrases
- Decide between Lambda, Fargate, and ECS or EKS on EC2 for a workload, including container migrations
- Design scaling strategies: horizontal over vertical, target tracking Auto Scaling, load balancing across AZs, caching, and edge offload
Why loose coupling means resilience and independent scaling
Tight coupling means one component calls another synchronously and depends on that component being up, responsive, and correctly sized at that exact moment. A web tier that writes orders directly into a processing tier inherits every one of the processing tier's problems: if processing slows down, web requests time out; if processing crashes, orders are lost; if traffic spikes, both tiers must scale in lockstep or the whole chain fails. The failure of one component propagates to everything upstream of it. That propagation is what Task 2.1 asks you to design away.
Loose coupling inserts an intermediary — a queue, a topic, an event bus, a load balancer, an API — between components so that each side depends only on the intermediary, not on the other side's availability or capacity. Two benefits follow, and the exam tests both. First, resilience: if a consumer fails, work waits durably in the intermediary instead of being dropped, and the consumer catches up when it recovers. Second, independent scaling: each tier scales on its own signal — the web tier on request count, the worker tier on queue depth — so a spike in one place never forces an emergency resize of everything else.
Loose coupling is also why stateless design keeps appearing in this task. A component can only be scaled horizontally or replaced freely if any instance can handle any request, which means session state, uploaded files, and in-flight job data must live outside the instance — in ElastiCache or DynamoDB for sessions, S3 for objects, a queue for pending work. A multi-tier architecture (web, application, data) is the classic frame: each tier sits behind its own intermediary and scales independently, and microservices push the same idea further by giving each service its own deployment, data store, and scaling policy.
On the exam, this section is the diagnosis step. When a stem says requests are "lost during peak traffic," components "time out waiting for a downstream service," or two systems "must be updated together," you are being shown tight coupling — and the correct answer almost always introduces a managed intermediary rather than making the coupled components bigger.
SQS decisions: standard vs FIFO, visibility timeout, and dead-letter queues
Amazon SQS is the buffering intermediary, and SAA-C03 tests it at the decision level. The first decision is standard vs FIFO. A standard queue offers nearly unlimited throughput with at-least-once delivery and best-effort ordering — occasionally a message arrives twice or out of order, so consumers must be idempotent. A FIFO queue guarantees strict ordering within a message group and exactly-once processing (duplicates within the deduplication window are rejected), but the guarantee costs throughput: FIFO has a capped rate, while standard effectively does not. The decision rule: default to standard; choose FIFO only when the scenario explicitly says order matters ("transactions must be processed in the order received") or duplicates are unacceptable ("must be processed exactly once"). An answer that picks FIFO "to be safe" for a high-throughput workload with no ordering requirement is choosing a bottleneck.
The second concept is the visibility timeout. SQS does not delete a message when a consumer receives it — the message becomes invisible for the timeout period while the consumer works, and the consumer deletes it after finishing successfully. If the consumer crashes, the timeout expires and the message reappears for another consumer: that is the retry mechanism. Set the timeout shorter than the processing time and healthy consumers get interrupted by duplicates — the classic "messages are being processed twice" scenario is fixed by raising the visibility timeout, not by switching queue types.
Third, the dead-letter queue (DLQ). A malformed "poison" message that always fails would otherwise cycle through receive-fail-reappear forever, wasting consumer capacity. A redrive policy moves any message that has been received more than maxReceiveCount times into a DLQ, where you alarm on it and inspect it without blocking the main queue. Any scenario about "messages that repeatedly fail processing" is a DLQ question.
Finally, the pattern that makes SQS a resilience tool: the queue as a buffer. Put a queue between a web tier and a worker tier, and a traffic spike becomes a backlog instead of an outage — the web tier acknowledges instantly, the queue absorbs the burst durably, and the worker Auto Scaling group scales on queue depth to drain it. The exam presents this as the web-tier-to-worker-tier redesign constantly; recognize it from "requests are lost during traffic spikes" and answer with SQS plus workers scaling on the backlog.
SNS pub/sub and the SNS-to-SQS fan-out pattern
SQS solves one producer feeding one logical consumer. When multiple independent systems must react to the same event, you need publish/subscribe, and on AWS that starts with Amazon SNS. A publisher sends one message to a topic; SNS pushes a copy to every subscriber — SQS queues, Lambda functions, HTTPS endpoints, Kinesis Data Firehose, and (for notification use cases) email and SMS. The publisher knows nothing about the subscribers, so adding a sixth consumer means adding a subscription, not changing producer code — that is loose coupling in the fan-out direction.
Know the crucial contrast with SQS delivery semantics: an SQS message is consumed by one worker (competing consumers), while an SNS message is delivered to every subscriber. A scenario where three teams each need their own copy of every order event cannot be solved with a single shared SQS queue — the teams would steal each other's messages. That elimination shows up repeatedly.
SNS is push-based and does not retain messages for later replay, which is why the exam's favorite pattern is SNS-to-SQS fan-out: subscribe an SQS queue per consumer to the topic. Each consumer now gets its own durable buffer, its own retry behavior via visibility timeout, its own DLQ, and its own scaling signal — the pub/sub reach of SNS combined with the resilience of queues. If one downstream system goes offline for an hour, its queue accumulates the backlog while every other subscriber continues unaffected. When ordering matters end to end, FIFO topics fan out to FIFO queues.
Two refinements are worth recognition-level knowledge. Message filtering: a subscription filter policy delivers only matching messages to a subscriber (for example, only order_cancelled events to the refunds queue), so consumers stop discarding traffic they never wanted. And SNS is regional, high-throughput, and low-latency — for straightforward one-to-many delivery it remains the simplest answer. On the exam, the trigger phrases are "multiple systems must be notified," "process the same message in parallel," and "add new consumers without modifying the application"; the answer is SNS, and if each consumer must process reliably at its own pace, it is SNS with SQS queues subscribed.
EventBridge: event routing, SaaS integration, and choosing among the three
Amazon EventBridge is the third messaging service, and the exam expects you to pick correctly among SQS, SNS, and EventBridge rather than define each. EventBridge is an event bus with rules: producers put structured JSON events on a bus, rules match events by their content — source, detail-type, or any field in the payload — and route matches to targets such as Lambda, Step Functions, SQS, SNS, Kinesis, or API destinations. One event can match many rules, and one rule can drive multiple targets, so EventBridge does fan-out too, but its differentiator is content-based routing: "send orders over $10,000 to the fraud-check workflow, everything else to standard processing" is a rule expression, not consumer-side filtering code.
Three capabilities are strong exam signals for EventBridge. First, the default bus already carries AWS service events — an EC2 instance changing state, a change written to CloudTrail — so "trigger an action when an AWS resource changes state" is EventBridge. Second, SaaS partner event sources: supported third-party applications (the Zendesk/Datadog/Shopify category) deliver events directly onto a partner event bus with no polling code or webhook infrastructure — any scenario integrating a SaaS product's events points here. Third, operational extras like archive and replay (re-process past events after fixing a bug) and EventBridge Scheduler for cron-style invocation.
The selection logic compresses to this. Choose SQS when one consumer must reliably work through a backlog — buffering, load leveling, retries. Choose SNS when many subscribers need the same message with high throughput and minimal latency, typically fanning into SQS for durability. Choose EventBridge when the scenario needs routing decisions based on event content, ingestion of SaaS or AWS service events, cross-account event distribution, or an application decomposed around a shared event bus. Where the three overlap, the qualifier decides: "filter and route events by attributes in the payload" beats SNS's subscription filters in flexibility, while raw fan-out throughput with the simplest setup still favors SNS. Exam stems flag EventBridge with phrases like "route events to different targets based on content," "react to events from a third-party SaaS application," and "build an event-driven architecture across multiple accounts."
Step Functions: orchestrating multi-step workflows with retries
Queues and topics implement choreography — each service reacts to events with no central coordinator. Some processes instead need orchestration: an explicit, ordered, stateful workflow where step 3 runs only if step 2 succeeded, failures at any point are retried with backoff, and someone can see exactly where each execution stands. That is AWS Step Functions: you define a state machine of tasks (Lambda functions, ECS tasks, direct SDK integrations with over two hundred services), and Step Functions runs it with sequencing, Choice branching, Parallel branches, Map for fan-out over a collection, and per-step Retry and Catch policies with exponential backoff.
The exam's favorite framing is Step Functions versus chaining Lambda functions — one function synchronously invoking the next, or a tangle of functions wired through queues. Chaining fails in ways the exam wants you to articulate: a synchronous chain accumulates all the runtime into the first function's 15-minute limit and bills you for idle waiting; there is no central place to define retries or compensation when step 4 fails; and the workflow's current state lives nowhere, so a crash mid-chain leaves orphaned work. Step Functions externalizes the state, gives every step its own retry policy, and shows the execution visually. Trigger phrases: "multi-step process," "coordinate multiple Lambda functions," "retry individual steps," "if the step fails, the whole process must roll back or alert."
Step Functions also solves long waits and human approval. A Standard workflow execution can run for up to a year, and a task can pause on a callback task token until an external system or a human approver responds — "wait for manual approval before proceeding" is a Step Functions signal, not a Lambda one. Know the two workflow types at decision level: Standard for long-running, auditable workflows with exactly-once execution semantics; Express for high-volume, short-lived event processing where at-least-once semantics and lower cost per execution fit better.
Keep the boundary with SQS crisp, because the exam blurs it deliberately. SQS decouples two parties and buffers work; it has no notion of sequence across steps. Step Functions coordinates many steps with dependencies, branching, and error handling. If the scenario is "absorb bursts of independent jobs," queue it. If it is "run these five operations in order with retries and a failure path," orchestrate it.
API Gateway: the managed front door — and the integration decision table
Amazon API Gateway decouples clients from backends the way a queue decouples producers from consumers. Clients call a stable REST (or HTTP or WebSocket) API contract; behind it you can swap a Lambda function for a container service, or route different paths to different microservices, without any client changing. That indirection is the architectural point — plus a layer of managed cross-cutting concerns you no longer build yourself: throttling (rate and burst limits, plus per-client quotas via usage plans and API keys) that protects backends from being overwhelmed, request validation, authentication and authorization through IAM, Amazon Cognito authorizers, or Lambda authorizers, and an optional response cache that absorbs repeated reads before they touch the backend.
Two patterns earn their own recognition. First, API Gateway with Lambda is the serverless web backend — no servers anywhere, scaling from zero, pay per request. Second, API Gateway can integrate directly with AWS services: an API method can write straight into SQS or invoke Step Functions without a Lambda in between, removing glue code — a LEAST-operational-overhead favorite. Exam signals: "expose the service as a REST API," "throttle requests per client," "protect the backend from traffic spikes at the API layer," "different consumers need different rate limits."
With all five integration services covered, here is the selection table to memorize:
| Service | Problem it solves | Trigger phrases in the stem |
|---|---|---|
| SQS | Buffer work between a producer and one consumer group; absorb spikes; retry via visibility timeout; isolate poison messages with a DLQ | "requests are lost during spikes," "process asynchronously," "decouple web tier from processing tier" |
| SNS | Push one message to many subscribers; fan out to SQS queues for durable per-consumer processing | "notify multiple systems," "each service needs a copy," "add consumers without changing the publisher" |
| EventBridge | Route events to targets based on event content; ingest SaaS and AWS service events; cross-account event buses; archive and replay | "route based on event content," "events from a SaaS application," "react to AWS resource state changes" |
| Step Functions | Orchestrate multi-step workflows with per-step retries, branching, parallelism, and human approval; state kept outside the code | "multi-step," "coordinate Lambda functions," "retry failed steps," "manual approval," "visual workflow" |
| API Gateway | Stable managed front door for synchronous clients: throttling, auth, validation, caching; decouples client contract from backend implementation | "expose a REST API," "throttle per client," "replace the backend without changing clients" |
Most integration-service questions are answered by matching the stem to one row of this table and then checking the qualifier — the wrong options are usually other rows that solve a problem the scenario does not have.
Compute selection: Lambda vs Fargate vs ECS/EKS on EC2
Task 2.1 also tests where the decoupled work should run, and the decision compresses to a spectrum from most managed to most controlled. AWS Lambda is the default for short, event-driven, spiky work: it scales from zero to thousands of concurrent executions automatically, bills per request and duration, and integrates natively as the target of SQS, SNS, EventBridge, S3, and API Gateway. Its defining constraint is the 15-minute maximum execution time — any task that can exceed it, or any long-lived process like a persistent server or a streaming consumer that never exits, disqualifies Lambda outright. Steady very-high-volume workloads can also make per-invocation pricing worse than always-on containers, which the cost-qualifier questions exploit.
AWS Fargate runs containers without any EC2 instances to manage: you declare CPU and memory per task, and AWS provisions and patches the underlying capacity. It is the answer when the workload is containerized and long-running (or simply longer than 15 minutes), the team wants no server management, and there is no need to control the host. "Run containers without managing servers or clusters of EC2 instances" is the literal Fargate trigger phrase. ECS or EKS on EC2 trades that convenience for control: choose it when the scenario needs specific instance types (GPUs, high memory), daemon processes on every host, or aggressive cost optimization of steady capacity with Reserved Instances, Savings Plans, or Spot. Between the orchestrators, ECS is the simpler AWS-native choice; EKS is for teams that require Kubernetes itself — existing Kubernetes tooling, expertise, or portability across environments. Plain EC2 remains for workloads needing full OS control or licensing tied to hosts.
Migrating an application into containers is its own bullet in the guide. The judgment: containerizing a monolith "as is" (a lift into ECS/Fargate) buys deployment consistency and easier scaling without a rewrite, and is the right first step when the scenario wants to move off aging servers with minimal code change; refactoring into microservices comes later. Statefulness is the gate — a container should be stateless, so session data and files move to ElastiCache, DynamoDB, S3, or EFS as part of the migration.
| Compute | Choose when |
|---|---|
| Lambda | Event-driven, short tasks (hard 15-min cap), spiky or infrequent traffic, zero server management, per-request billing |
| Fargate | Long-running containers or jobs over 15 minutes, no desire to manage instances, serverless operational model |
| ECS on EC2 | Containers needing instance control: GPUs, special instance types, host daemons, Spot/Reserved cost optimization |
| EKS | Kubernetes is a stated requirement: existing k8s workloads, tooling, or multi-environment portability |
| EC2 | Full OS control, non-containerized legacy apps, host-bound licensing |
Exam questions pair these with qualifiers: "LEAST operational overhead" pushes toward Lambda or Fargate; "jobs take 40 minutes" eliminates Lambda; "must continue using existing Kubernetes manifests" forces EKS.
Scaling strategies: Auto Scaling, load balancing, caching, and the edge
Loose coupling makes independent scaling possible; this section is how each tier actually scales. Start with the direction. Vertical scaling — a bigger instance — is simple but has a hard ceiling, usually requires a restart, and leaves you with a single point of failure. Horizontal scaling — more instances behind a load balancer — has no practical ceiling and doubles as availability, but requires the stateless design covered earlier. On SAA-C03, vertical scaling is almost always the wrong answer dressed up as the easy one; it appears in options precisely so you can eliminate it.
For EC2, horizontal scaling means an Auto Scaling group spanning multiple AZs behind an Elastic Load Balancer. Know the scaling policies at decision level. Target tracking is the default and usually the right answer: you name a metric and a target (keep average CPU at 50%, or keep request count per target steady) and AWS computes the adjustments — least configuration, least overhead. Step scaling is for custom thresholds with different-sized responses; scheduled scaling is for known time-based cycles ("traffic doubles every weekday at 9 AM"); predictive scaling learns cyclical patterns and provisions ahead of them. And the pattern that ties this lesson together: a worker tier scales on queue backlog — a target tracking policy on backlog per instance drains an SQS spike automatically. On the load balancer side, the Application Load Balancer routes at layer 7 (paths, hostnames — the microservices front), while the Network Load Balancer handles layer 4 with static IPs and extreme TCP throughput.
Databases scale reads by decoupling them from the primary. ElastiCache (Redis or Memcached) absorbs repeated reads at sub-millisecond latency in front of the database and is also the standard externalized session store; DynamoDB has DAX for the same job. RDS read replicas offload read and reporting traffic over asynchronous replication — accepting slight staleness — so the primary handles only writes. Both are loose coupling for the data tier: readers stop contending with writers.
Finally, offload work before it reaches you at all. CloudFront caches static content at edge locations worldwide and accelerates dynamic requests over the AWS backbone, cutting both origin load and user latency. "Reduce load on the origin" and "improve performance for global users" both point at the edge. Exam stems combine these levers and ask for the one matching the bottleneck named in the scenario — cache reads if reads repeat, replicate if reports compete with writes, scale out if compute saturates.
Worked scenarios: reasoning through Task 2.1 questions
Scenario 1 — the spike-buffering redesign. An e-commerce site runs a web tier that synchronously submits orders to a processing tier of EC2 instances. During flash sales, the processing tier saturates, web requests time out, and some orders are lost. The company needs a design that ensures no orders are lost and handles unpredictable spikes cost-effectively. Options: (A) move the processing tier to larger instances; (B) put an SQS queue between the tiers and run processors in an Auto Scaling group that scales on queue depth; (C) publish orders to an SNS topic that pushes to the processing instances; (D) increase the web tier's timeout values.
Eliminate A: vertical scaling raises the ceiling but keeps the synchronous coupling — a big enough sale still saturates it, orders are still lost at the limit, and you now pay for peak capacity all the time. Eliminate D: longer timeouts change when failures surface, not whether they happen; nothing stores the order. Eliminate C: SNS is push-based delivery to subscribers, not a durable work buffer with consumer-paced retrieval — it does not let the processing tier drain a backlog at its own pace. B is correct: the queue durably absorbs the spike (no lost orders), the web tier returns instantly, and workers scale out on backlog and back in afterward (cost-effective). This exact shape — synchronous tiers, spikes, lost work — is the most common Task 2.1 question.
Scenario 2 — the fan-out. When an order is placed, three systems must each process the event independently: inventory, shipping, and analytics. Each must process every event reliably even if it goes offline temporarily, and the company wants to add future consumers without modifying the ordering application. Options: (A) the application writes to one SQS queue that all three systems poll; (B) the application publishes to an SNS topic with an SQS queue subscribed per consumer; (C) the application calls each system's API in sequence; (D) a Step Functions workflow invokes each system.
Eliminate A: consumers on a single queue compete — each message is processed by one of them, so inventory would receive only a third of the events. Eliminate C: synchronous calls are tight coupling — one slow system delays the order path, and adding a consumer means changing application code. D actually works, but it is centralized orchestration for what is independent parallel consumption: adding a consumer means editing the state machine, and the ordering app becomes coupled to the workflow's completion. B is correct: SNS fans out a copy to every subscriber, each queue buffers durably through downtime, and new consumers are just new subscriptions. When two options both function, the one where consumers are independent and the publisher never changes wins the loose-coupling qualifier.
Tip. SAA-C03 tests this task with redesign scenarios: a tightly coupled architecture that loses requests during spikes, times out on a slow downstream, or requires code changes for every new consumer, plus a qualifier like MOST cost-effective or LEAST operational overhead. Classic shapes include the web-tier-to-worker-tier queue insertion, the SNS-to-SQS fan-out, choosing EventBridge for SaaS events or content-based routing, replacing chained Lambda functions with Step Functions, and picking Lambda vs Fargate vs ECS on EC2 against a stated runtime or control requirement. Trap patterns to expect: vertical scaling offered as the fix for a coupling problem, a single shared SQS queue where every consumer needs its own copy, FIFO queues chosen without an ordering requirement, and Lambda proposed for jobs that exceed 15 minutes. When two options both function, the one that adds a managed intermediary, keeps consumers independent, and scales each tier on its own signal usually wins.
- A queue between tiers turns a traffic spike into a backlog: SQS plus a worker Auto Scaling group scaling on queue depth is the default spike-absorption redesign.
- SQS standard maximizes throughput with at-least-once delivery; FIFO trades throughput for strict ordering and exactly-once processing — pick FIFO only when the scenario demands order or no duplicates.
- Messages processed twice usually means the visibility timeout is shorter than processing time; messages that always fail belong in a dead-letter queue.
- One event, many independent consumers = SNS-to-SQS fan-out — every subscriber gets its own durable buffer, retries, and scaling signal.
- EventBridge wins when the scenario needs content-based routing, SaaS or AWS service events, or cross-account buses; SNS wins simple high-volume fan-out.
- Multi-step processes with retries, branching, or human approval are Step Functions — never chain Lambda functions synchronously.
- Lambda for short event-driven work (15-minute cap); Fargate for long-running containers with no servers to manage; ECS or EKS on EC2 only when you need instance-level control or Kubernetes itself.
- Scale horizontally behind an ELB across AZs with target tracking as the default policy; offload reads with ElastiCache and read replicas, and offload globally with CloudFront.
Frequently asked questions
What is the difference between SQS and SNS?
SQS is a pull-based queue: producers send messages, and each message is consumed by one worker from a competing consumer group, with the queue durably buffering work until consumers are ready. SNS is push-based publish/subscribe: one published message is delivered to every subscriber of a topic. Use SQS to decouple and buffer work for one processing tier; use SNS when multiple systems each need a copy of the same message. The two combine in the fan-out pattern — an SNS topic with an SQS queue subscribed per consumer — so every consumer gets pub/sub reach plus a durable, independently scaled buffer.
When should I use EventBridge instead of SNS?
Choose EventBridge when you need routing decisions based on the event's content (rules matching any field in the JSON payload), when events come from SaaS partner applications or from AWS services themselves, when you want cross-account event buses, or when you need archive and replay. Choose SNS for straightforward one-to-many delivery at very high throughput with minimal latency, especially the classic fan-out into SQS queues. SNS supports subscription filter policies, but EventBridge's rule matching and target variety are far richer — the trade-off is that SNS is simpler for plain fan-out.
What is the SQS visibility timeout and what happens if it is too short?
When a consumer receives an SQS message, the message is not deleted — it becomes invisible to other consumers for the visibility timeout period. The consumer deletes it after processing successfully; if the consumer crashes, the timeout expires and the message reappears for redelivery, which is how SQS retries work. If the timeout is shorter than your actual processing time, messages reappear while still being processed and get handled twice. The fix in that scenario is to increase the visibility timeout so it comfortably exceeds processing time, not to switch to a FIFO queue.
When should I use an SQS FIFO queue instead of a standard queue?
Use FIFO only when the workload genuinely requires strict ordering (messages must be processed in the exact sequence sent, within a message group) or exactly-once processing (duplicates are unacceptable, such as financial transactions). FIFO buys those guarantees by capping throughput, while standard queues offer nearly unlimited throughput with at-least-once delivery and best-effort ordering. If a scenario emphasizes very high message volume and the consumers can be made idempotent, standard is the right answer; picking FIFO without an ordering or deduplication requirement introduces an unnecessary bottleneck.
Should I use Step Functions or chain Lambda functions together?
Use Step Functions whenever a process has multiple steps with dependencies, retries, branching, parallel work, or human approval. Chaining Lambda functions — one synchronously invoking the next — packs the whole workflow into the first function's 15-minute limit, bills for idle waiting, scatters retry logic across code, and keeps no central record of where an execution stands if something crashes mid-chain. Step Functions externalizes the workflow state, gives each step its own retry and catch policy with exponential backoff, supports executions up to a year on Standard workflows, and shows each execution visually for debugging.
When should I use Lambda vs Fargate?
Use Lambda for short, event-driven tasks: it scales automatically from zero, bills per request, and plugs natively into SQS, SNS, EventBridge, S3, and API Gateway — but every invocation must finish within the hard 15-minute cap. Use Fargate for containerized workloads that run longer than 15 minutes or run continuously, such as APIs, stream consumers, or batch jobs, when the team wants no EC2 instances to patch or scale. If the scenario adds requirements like GPUs, specific instance types, or host-level daemons, move past Fargate to ECS or EKS on EC2, which trade managed simplicity for instance control.
What is fan-out architecture in AWS?
Fan-out is the pattern where one published event is delivered to multiple independent consumers in parallel. On AWS the standard implementation is an SNS topic with an SQS queue subscribed for each consumer: the publisher sends one message, SNS copies it to every queue, and each consumer processes from its own queue at its own pace with its own retries and dead-letter queue. This keeps the publisher completely decoupled — adding a new downstream system is just a new subscription. EventBridge achieves fan-out too, with rules routing one event to multiple targets, and adds content-based filtering when different consumers need different subsets of events.
Sign up free to mark lessons complete, bookmark topics and track your exam readiness.