Selecting the Right AWS Service for the Stated Requirements
Map constraint words to services
Questions in this domain are written so that one constraint word eliminates most answers: duration, payload size, ordering, latency, protocol, operating system, or concurrency.
Compute: Lambda for event-driven code under 15 minutes; Fargate or ECS/EKS when you need containers or per-request isolation without host management; EC2 when you need the OS, specialized hardware, or licensed software; Batch for queued batch jobs; App Runner for simple HTTP containers.
Storage: S3 for object data with lifecycle transitions and Intelligent-Tiering; EBS gp3 as the general-purpose block default; io2 for high and predictable IOPS; EFS for shared Linux file access; FSx for Windows File Server for SMB; FSx for Lustre for HPC scratch. Databases: Aurora for relational with read scaling, DynamoDB for predictable key-value access at any scale, Neptune for graph, OpenSearch for search, Timestream for time series, Keyspaces for Cassandra-compatible workloads.
Integration: SQS standard for decoupling and throughput, SQS FIFO for ordering with message groups, SNS for fan-out, EventBridge for content-based routing and SaaS events, Kinesis Data Streams for ordered replayable streams with multiple consumers, Managed Service for Apache Kafka when you need Kafka APIs.
Traps
Lambda has a 15-minute maximum and small synchronous and asynchronous payload limits; provisioned concurrency is the fix for cold-start-sensitive APIs. Kinesis throughput is per shard and shared unless you enable enhanced fan-out. SNS does not store messages for replay. EBS volumes attach to a single instance except the multi-attach-capable types, which are same-AZ only. EFS is Linux-oriented, not a Windows SMB answer, and FSx for Windows is not a Lustre answer.
Rule of thumb
Ask two questions in order: does the workload need message replay? If yes, choose a stream, not a queue. Does it need strict ordering? If yes, choose FIFO or partitioned ordering, not a standard queue.