Eighteen comparisons written the way we settle them on real Node.js backends: what each service is for, where the grey zone is, and which signal decides. No list prices, the cost shapes instead.
Start with the group that matches the decision in front of you. Every article ends with a decision rule you can apply on one diagram.
Lambda wins for spiky, event-driven, short-lived work; Fargate wins for long-running services and steady concurrency. Here is how we decide the grey zone in between.
Serverless architecture is not always the answer. A pragmatic framework for choosing between Lambda, Fargate and EC2: workload shape, cost curves and team capability.
A warm start is Lambda reusing an execution environment it already initialized, and a cold start is init landing on a user's request. We compare warming pings, provisioned concurrency, SnapStart and bundle work, and show when paying to remove cold starts is worth it.
Synchronous Lambda-to-Lambda calls, homemade state in DynamoDB and copy-pasted retries are the signs you need a state machine. We cover what Step Functions actually gives you, Standard vs Express, and what Distributed Map changes for batch processing.
SQS for point-to-point commands with backpressure, SNS for push fan-out, EventBridge for content-routed domain events with replay, Kinesis for ordered high-throughput streams. Combining them is the norm, and one dimension usually decides.
SQS is the workhorse of AWS messaging. Here's a decision framework for when it's the right tool, and when EventBridge, Kinesis, or Kafka is a better fit.
Why producers should publish to an EventBridge bus instead of writing into SQS, and why the queue still belongs between the bus and Lambda: fan-out, filtering, replay, backpressure, and per-consumer retries.
EventBridge Scheduler is the default for standalone schedules on serverless AWS, with timezones, one-time runs and per-schedule retries. Legacy cron rules only earn their keep on existing UTC jobs, and Step Functions Wait states handle delays inside a workflow.
Access patterns, Lambda connections, transactions and cost shape: the criteria that actually decide between DynamoDB and PostgreSQL on RDS.
Provisioned RDS wins on steady high-utilization load, Aurora Serverless v2 on variable load with a real baseline, DynamoDB on-demand on spiky low-average traffic. We map each traffic profile to its cost shape.
S3 for anything that can be an object, EFS for shared POSIX access from Lambda or Fargate, EBS for block storage bound to one EC2 instance. We map each service to its workload from a serverless Node.js angle.
Function URLs for single-function endpoints, HTTP API for most public serverless APIs, REST API for contractual partner access, ALB for steady high volume. The real differences are auth, throttling, WAF support and cost shape.
AppSync earns its place when multiple client shapes, mobile bandwidth, or built-in subscriptions justify GraphQL. API Gateway stays simpler for REST consumers, webhooks, and partner APIs, and most platforms end up running both.
Security groups give you free layer 3/4 default deny, AWS WAF blocks layer 7 attacks on public HTTP endpoints, and Network Firewall is the only one that filters egress. Here is which layer stops which threat, and what each one costs in shape.
Gateway endpoints carry S3 and DynamoDB traffic for free, Interface endpoints cover the remaining AWS APIs for less than NAT, and the NAT Gateway should only carry true internet egress. Most inflated NAT bills are AWS-to-AWS traffic that never needed the detour.
Tell us what you are working on. Reply within 24 hours, one-page diagnostic within 48.