Compiled for the Solutions Architect certification, from a Java backend perspective. Core idea: what pain point each service solves, when to choose it, and how to distinguish it from similar services.
1. Storage
1.1 Comparison of the three storage types
| Type | Representative service | Access unit | Typical scenario |
|---|---|---|---|
| Block storage | EBS, EC2 Instance Store | Block | Databases, OS disks |
| File storage | EFS, FSx | Files / directory tree | Multi-instance sharing, NFS/SMB mounts |
| Object storage | S3 | Object (Object + Key) | Static assets, backups, data lakes |
Block storage → like a local hard drive; the OS sees a raw device it formats and mounts itself
File storage → like a NAS; multiple machines can mount the same directory at once
Object storage → like HTTP PUT/GET key-value; no directory concept, simulated with prefixes
1.2 Amazon S3
Quick reference of core features:
| Feature | Description | Common exam point |
|---|---|---|
| Versioning | Keeps multiple historical versions of the same Key | Required before you can use CRR / MFA Delete |
| CRR (Cross-Region Replication) | Asynchronous replication to another Region | Disaster recovery, lower latency |
| Transfer Acceleration | Speeds up uploads via CloudFront edge nodes | Use when uploading to a distant Region |
| Lifecycle Policy | Automatically moves objects to another storage class by age | Core cost-saving means |
| S3 File Gateway | Maps a local SMB/NFS share to S3 | Hybrid-cloud file migration |
| Intelligent-Tiering | Automatically switches between Standard ↔ IA | Use when access patterns are unpredictable |
S3 storage class selection decision tree:
High access frequency? → S3 Standard
↓ no
Low frequency but occasionally needs immediate retrieval? → S3 Standard-IA
↓
Only need a single AZ and can accept loss risk? → S3 One Zone-IA (20% cheaper than IA)
↓
Rarely accessed (archive-grade)?
→ Glacier Instant Retrieval ← millisecond retrieval
→ Glacier Flexible Retrieval ← minutes to hours
→ Glacier Deep Archive ← 12–48 hours, cheapest
Key points for S3 CRR configuration:
1. Both source and target Buckets must have Versioning enabled
2. Configure a Replication Rule on the source Bucket (choose target Bucket/Region)
3. Create/specify an IAM Role (authorize S3 to read source + write target)
4. The target Bucket can be cross-account, and the storage class can be downgraded (to save cost)
5. Existing objects aren't replicated; only new objects created after the rule are
1.3 Amazon EBS vs EFS vs Instance Store
| Characteristic | EBS | EFS | Instance Store |
|---|---|---|---|
| Type | Block storage | File storage (NFS) | Block storage (physical, local) |
| Persistence | ✅ Persistent | ✅ Persistent | ❌ Gone when the instance stops |
| Multi-instance mount | ❌ (single-mount by default) Multi-Attach has limited support | ✅ Mounts on thousands simultaneously | |
| Cross-AZ | ❌ Same AZ only | ✅ Across AZ/Region | ❌ Physically bound |
| Performance | High (optional io2 Block Express) | Medium (NFS protocol overhead) | Very high (local NVMe) |
| Typical scenario | Databases, single-instance apps | Multi-instance sharing, CMS | Temporary cache, big-data compute |
⚠️ The EBS island effect: EBS can only be mounted within the same AZ. To move across AZs, first take a Snapshot, then create a new EBS from the Snapshot in the target AZ.
1.4 AWS DataSync vs Storage Gateway
| Service | Positioning | Typical use |
|---|---|---|
| DataSync | High-speed data migration/sync tool | One-time migration + scheduled incremental sync; NFS/SMB → S3/EFS/FSx |
| S3 File Gateway | Long-term hybrid-cloud storage bridge | Local apps keep using NFS/SMB while data is transparently stored in S3 |
Migration scenario (temporary) → DataSync (fast, bandwidth-efficient, auto-verify)
Continuous hybrid-cloud storage → Storage Gateway (long-term coexistence)
1.5 Amazon FSx types quick reference
| Type | Suitable scenario | Protocol |
|---|---|---|
| FSx for Windows | Windows apps, AD integration | SMB |
| FSx for Lustre | HPC, machine learning, high-performance computing | Lustre (can connect directly to S3) |
| FSx for NetApp ONTAP | Enterprise NAS migration to the cloud | NFS/SMB/iSCSI |
| FSx for OpenZFS | ZFS filesystem migration | NFS |
2. Database
2.1 Database selection quick reference
| Requirement | Recommended service | Reason |
|---|---|---|
| Relational, low traffic | RDS (MySQL/PostgreSQL) | Standard managed, reasonable cost |
| Relational, high performance/availability | Aurora | 5x MySQL performance, automatic multi-replica |
| NoSQL, ultra-low latency | DynamoDB | Single-digit ms, fully serverless |
| DynamoDB acceleration | DAX | Microsecond in-memory cache, transparent to the app |
| OLAP data warehouse | Redshift | Columnar storage, PB-scale analytics queries |
| In-memory cache | ElastiCache | Managed Redis / Memcached |
2.2 What pain point Amazon Aurora solves
Traditional RDS MySQL pain point Aurora's solution
─────────────────────────────────────────────
Hard to scale → Storage auto-scales (up to 128TB)
Hard to keep highly available (crashes easily) → 6 replicas across 3 AZs, 1 writer + up to 15 read replicas
Poor high-concurrency support → Aurora Serverless v2 auto scale in/out
High ops cost → Fully managed, automatic patching/backup
Low storage utilization → Log-structured storage, shared physical space
Slow startup, poor elasticity → Aurora Serverless second-level cold start
Aurora vs RDS choice:
- Need high availability, high concurrency, read scaling → Aurora
- Ordinary app, cost-sensitive → RDS
2.3 DynamoDB core concepts
Table
└── Item (row, max 400KB)
└── Attribute (column, dynamic schema)
Primary key types:
Partition Key (hash key) → determines which partition data lands in
Partition Key + Sort Key → composite key, sorted by Sort Key within a partition
Read/write capacity modes:
Provisioned → manually set RCU/WCU (good for steady traffic, saves money)
On-Demand → billed per request (good for variable traffic, no estimating needed)
DAX (DynamoDB Accelerator):
App → DAX (in-memory cache, microsecond response) → DynamoDB
↑ cache hit returns directly
↓ only on a miss does it go back to DynamoDB
Good for: read-heavy, write-light; the same Query executed repeatedly
Not good for: strongly-consistent reads, write-intensive scenarios
3. Messaging
3.1 SNS vs SQS vs EventBridge
| Characteristic | SNS | SQS | EventBridge |
|---|---|---|---|
| Model | Publish/subscribe (Push) | Queue (Poll) | Event bus (routing) |
| Consumers | Multiple subscribers receive simultaneously | One consumer processes one message | Multiple Targets routed in parallel |
| Persistence | ❌ (not persistent, gone once sent) | ✅ (kept up to 14 days) | ❌ (not stored after routing) |
| Retry | Limited | ✅ (Visibility Timeout) | ✅ (configurable retry policy) |
| Message ordering | ❌ | Supported by FIFO Queue | ❌ |
| Typical scenario | Notification broadcast, triggering multiple systems | Task queue, peak shaving | Responding to AWS service events |
3.2 The SNS + SQS fan-out pattern ⭐
Scenario: one message needs to be distributed simultaneously to multiple independent consumers (microservices)
┌── SQS Queue A ── Microservice A (send email)
Producer → SNS Topic ┤
├── SQS Queue B ── Microservice B (log)
└── SQS Queue C ── Microservice C (update inventory)
Why not use SNS directly?
SNS pushes directly to services; if a microservice is down, the message is permanently lost. With SQS as a buffer, messages pile up in the queue and are consumed after the service recovers — zero loss.
Key configuration points:
1. Create an SNS Topic
2. Create a separate SQS Queue for each downstream service
3. Have each SQS Queue subscribe to the SNS Topic
4. Each downstream service polls its own SQS Queue
5. Enable an SQS DLQ (dead-letter queue) to handle failed messages
3.3 SQS core concepts
Standard Queue → at-least-once delivery, approximate FIFO, high throughput
FIFO Queue → exactly-once delivery, strictly ordered, 300 TPS cap
Visibility Timeout:
The time window during which a message, after being taken by a consumer, is invisible to others
The consumer must DeleteMessage before the timeout, or the message becomes visible again
DLQ (Dead Letter Queue):
A message that exceeds maxReceiveCount without being processed successfully → moved to the DLQ
Purpose: troubleshooting, avoiding a poison message jamming the queue
4. Compute
4.1 EC2 core
How an Auto Scaling Group (ASG) works:
Define: min / desired / max instance count
↓
CloudWatch monitors metrics (CPU, request count, etc.)
↓
Triggers a Scaling Policy (scale out / scale in)
↓
The ALB automatically registers/deregisters instances
Scaling policy types:
| Policy | Description |
|---|---|
| Target Tracking | Keeps a metric at a target value (most recommended, e.g. CPU=60%) |
| Step Scaling | Scales by stepped rules (add 2 above 70%, add 5 above 90%) |
| Scheduled Scaling | Scales on a schedule (scale out at 8am, scale in at 10pm) |
| Predictive Scaling | ML predicts future traffic and scales out ahead of time |
4.2 AWS Lambda
Core limits (frequently tested on SAA):
Max execution time: 15 minutes
Memory: 128MB – 10,240MB
Temporary storage (/tmp): up to 10GB
Concurrency: default 1000/Region (can request an increase)
Deployment package size: 50MB (zip), 250MB (unzipped)
Judging when Lambda fits:
✅ Good for Lambda:
- Event-triggered (S3 upload, API request, scheduled task)
- Execution time < 15 minutes
- Stateless processing
- Highly variable traffic (don't want to manage servers)
❌ Not good for Lambda:
- Long-running tasks (>15 minutes) → use Fargate / EC2
- Need to persist local state → use EC2 + EBS
- High, continuous load (cold-start cost) → use EC2 + ASG
A typical Lambda + API Gateway architecture (Serverless):
User request → Route 53 → API Gateway
↓
Lambda function
↓
DynamoDB / S3 / RDS
5. Networking & Connectivity
5.1 CloudFront vs Global Accelerator
| Dimension | CloudFront (CDN) | Global Accelerator |
|---|---|---|
| Core ability | Caches content, reducing origin fetches | Optimizes the path, reducing network hops |
| Protocol | HTTP/HTTPS | All protocols (TCP/UDP) |
| Caching | ✅ Has caching | ❌ No caching, pass-through |
| IP address | Dynamic (DNS resolution) | Static Anycast IP (2) |
| Suitable scenario | Static assets, website acceleration | Gaming, VoIP, financial trading, global APIs |
Mnemonic:
CloudFront = content caching (move things close to the user)
Global Accelerator = network speedup (take the AWS highway, not the public internet)
5.2 VPC core components
VPC (Virtual Private Cloud)
├── Subnet
│ ├── Public Subnet → has an Internet Gateway route; instances can have public IPs
│ └── Private Subnet → no direct public access; egress via a NAT Gateway
├── Internet Gateway (IGW) → the door for the VPC to reach the public internet
├── NAT Gateway → egress to the public internet for private-subnet instances (one-way)
├── Route Table → controls traffic direction
├── Security Group (SG) → instance-level, stateful firewall
└── Network ACL (NACL) → subnet-level, stateless firewall
Key SG vs NACL differences:
| Characteristic | Security Group | Network ACL |
|---|---|---|
| Scope | Instance (ENI) | Subnet |
| State | Stateful (return traffic auto-allowed) | Stateless (must write rules for both in and out explicitly) |
| Rules | Allow only | Allow + Deny |
| Evaluation | Union of all rules | By rule number, first match wins |
⚠️ NACL being stateless is a frequent exam point: if you only allow inbound HTTP but don’t allow the outbound response ports, traffic will be blocked.
5.3 VPC Endpoints
Problem: an EC2 in a VPC accessing S3 sends traffic over the public internet by default → security risk + traffic cost
Solution: VPC Endpoint (private direct connection, bypassing the public internet)
Types:
Gateway Endpoint → S3, DynamoDB (free, configured in the Route Table)
Interface Endpoint → other AWS services (paid, deploys an ENI into the subnet)
5.4 Comparison of connectivity options
| Scenario | Recommended option |
|---|---|
| On-prem data center ↔ AWS (low latency, high security) | AWS Direct Connect (dedicated line, physical connection) |
| On-prem data center ↔ AWS (encrypted tunnel) | Site-to-Site VPN (over the public internet but encrypted, low cost) |
| Developer laptop ↔ resources in a VPC | Client VPN |
| Private connectivity between different VPCs | VPC Peering or Transit Gateway |
| Star interconnection of multiple VPCs / on-prem | Transit Gateway (hub-spoke topology) |
5.5 Route 53 routing policies
| Policy | Description | Scenario |
|---|---|---|
| Simple | Direct resolution, no special logic | Single endpoint |
| Weighted | Split by weight (A:70%, B:30%) | Canary release, A/B testing |
| Latency | Route to the lowest-latency Region | Global multi-Region deployment |
| Failover | Active-passive switch, triggered by health checks | Disaster recovery |
| Geolocation | Route by the user’s geographic location | Compliance (European users only reach Europe) |
| Geoproximity | Route by distance + bias weight | Fine-grained traffic shifting |
| Multi-Value | Return multiple healthy IPs | Simple client-side load balancing |
6. Security & IAM
6.1 IAM core concepts
User → corresponds to a specific person or program, has AK/SK
Group → a collection of users; policies attached to the group
Role → a temporary identity; EC2/Lambda/cross-account assume role
Policy → a JSON document defining permissions
Policy types:
| Type | Attached to | Description |
|---|---|---|
| Identity-based Policy | User/Group/Role | What permissions the principal has |
| Resource-based Policy | S3 Bucket / KMS Key, etc. | Who can access this resource |
| SCP (Service Control Policy) | AWS Organizations OU | The maximum permission boundary for an entire account/OU |
Instance Profile:
Problem: an app on EC2 needs to access S3, but you can't hardcode AK/SK in the code
Solution:
1. Create an IAM Role with an S3-access policy attached
2. Create an Instance Profile associated with that Role
3. Attach the Instance Profile when launching the EC2
4. The app automatically gets temporary credentials via 169.254.169.254 (the metadata endpoint)
The Java SDK automatically reads temporary credentials from Instance Metadata — no configuration needed
6.2 AWS Secrets Manager vs Parameter Store
| Characteristic | Secrets Manager | Parameter Store |
|---|---|---|
| Positioning | Designed specifically for sensitive credentials | Config parameters + sensitive info |
| Automatic rotation | ✅ (integrates Lambda to rotate passwords on a schedule) | ❌ (no automatic rotation) |
| Cost | Billed per secret (per/month) | Standard parameters free, advanced parameters paid |
| Typical use | DB passwords, API keys, OAuth tokens | App config, feature flags, a few secrets |
| Versioning | ✅ | ✅ |
| Cross-Region replication | ✅ | ❌ |
Mnemonic: need automatic password rotation → Secrets Manager; ordinary config / occasionally-used secrets → Parameter Store (cheaper)
6.3 The security service matrix
| Service | Function | Analogy |
|---|---|---|
| GuardDuty | Threat detection (anomalous behavior, malicious IPs) | Intrusion detection system (IDS) |
| Inspector | Vulnerability scanning (EC2/containers/Lambda) | Automated vulnerability scanner |
| Security Hub | Aggregates security findings across accounts | SIEM aggregation panel |
| Macie | S3 data classification, discovering PII | Data security classification (DLP) |
| Shield | DDoS protection (Standard free, Advanced paid) | Anti-DDoS |
| WAF | Web application firewall (SQL injection, XSS, etc.) | WAF |
| Firewall Manager | Unified security rule management across accounts | Centralized security policy |
| Network Firewall | VPC-level deep packet inspection firewall | Advanced NACL + IPS |
| KMS | Key management, encryption/decryption service | HSM key management |
| CloudHSM | Dedicated hardware security module | Physical HSM |
6.4 AWS Organizations & SCP
Management Account (root account)
└── Root
├── OU (R&D department)
│ ├── Member Account A (Dev environment)
│ └── Member Account B (Test environment)
└── OU (Production department)
└── Member Account C (Prod environment)
An SCP (Service Control Policy) applies to an OU or account:
- Grants no permissions, only limits the permission ceiling
- Even if the IAM Policy allows it, if the SCP denies it, it can't be executed
- Use: forbid a production account from using unauthorized Regions, forbid deleting CloudTrail
7. Analytics
7.1 The analytics service landscape
Ingestion layer:
Kinesis Data Streams → real-time data inflow (custom consumers)
Kinesis Firehose → delivers data directly to S3/Redshift/ES (no code)
AWS Glue → ETL service, data transformation and cleaning
Storage layer:
S3 → data lake
Redshift → data warehouse
Query/analysis layer:
Athena → SQL directly over S3 (serverless, billed by scan volume)
Redshift → complex OLAP analysis
EMR → managed Hadoop/Spark clusters (large-scale processing)
Visualization layer:
QuickSight → BI dashboards, connects to Athena/Redshift/S3
7.2 The three Kinesis siblings
| Service | Positioning | Analogy |
|---|---|---|
| Kinesis Data Streams | Real-time data stream, consumers handle it with custom code | Kafka (write your own consumers) |
| Kinesis Data Firehose | Delivers streaming data directly to a destination, fully managed | Kafka + Fluentd (auto-write) |
| Kinesis Data Analytics | Runs SQL/Flink queries on stream data | Flink (real-time analytics) |
7.3 Athena use cases
Typical scenario:
S3 holds large amounts of JSON/CSV/Parquet logs
→ you don't want to stand up a Spark cluster
→ just write SQL queries in Athena
→ billed by data scanned (the Parquet columnar format greatly reduces scan volume)
Cost optimization:
Raw JSON → convert to Parquet (Glue ETL)
→ the same query cost can drop by ~87%
8. Management & Governance
8.1 CloudWatch core
CloudWatch components:
Metrics → monitor numeric metrics (CPU, network, custom metrics)
Logs → collect and store logs (Log Group > Log Stream)
Alarms → trigger alerts based on metrics (notify SNS / trigger ASG)
Dashboards → visualization panels
Events → replaced by EventBridge
Log Group hierarchy:
Log Group (/aws/lambda/my-function)
└── Log Stream (2024/01/01/[$LATEST]abc123)
└── Log Events (an individual log entry)
8.2 CloudTrail vs CloudWatch vs Config
| Service | Question it answers | Data type |
|---|---|---|
| CloudWatch | How is the system performing now? (What’s the CPU?) | Metrics, logs |
| CloudTrail | Who did what at what time? | API-call audit logs |
| AWS Config | What’s the resource configuration change history? Is it compliant? | Configuration snapshots, compliance rules |
Remember: CloudTrail = records of human actions; Config = records of resource state; CloudWatch = system runtime monitoring
8.3 AWS SSM (Systems Manager)
Core features:
Session Manager → connect to EC2 straight from the browser without SSH/RDP (no need to open port 22)
Run Command → run commands remotely in bulk (no SSH into each machine)
Patch Manager → automated patch management
Parameter Store → configuration parameter storage
Automation → define ops Runbooks and execute them automatically
9. Architecture Design Patterns
9.1 High-availability design principles
Core principle: eliminate single points of failure (SPOF)
Multi-AZ deployment:
EC2 → cross-AZ ASG + ALB
RDS → Multi-AZ (synchronous replication, automatic failover)
ElastiCache → Multi-AZ with auto-failover
Multi-Region deployment (higher tier):
Route 53 Failover/Latency routing
S3 CRR (data replication)
Aurora Global Database (< 1s RPO)
9.2 Decoupling architecture patterns
Tight coupling (anti-pattern):
Service A → synchronous HTTP call → Service B
Problem: if B goes down A goes down too; if B is slow A is slow too
Loose coupling (recommended):
Service A → SQS Queue → Service B (async processing)
Advantages: if B is down messages pile up and are consumed after recovery; peak traffic is buffered by the queue
Fan-out decoupling:
One message → SNS Topic → N SQS → N consumers
9.3 Problem-solving approaches for common architecture scenarios
Scenario 1: reduce database load
Options:
Read-heavy, write-light → ElastiCache (Redis) caches hot data
Read scaling → Aurora read replicas (up to 15)
Session state → store sessions in ElastiCache (not local to EC2)
Scenario 2: handle bursty traffic (variable workloads)
Options:
Compute layer → EC2 ASG (auto scaling) + Target Tracking
Queue layer → SQS peak shaving (frontend responds fast, backend processes slowly)
Lambda → naturally supports bursts (concurrency auto-scales)
Scenario 3: migrate on-prem data to the cloud
Option selection:
Data < TB scale, adequate network → AWS DataSync (online migration)
Data TB–PB scale, slow network → AWS Snowball Edge (physical device)
Continuous hybrid-cloud storage → Storage Gateway
Database migration → AWS DMS (Database Migration Service)
Scenario 4: accelerate access for global users
Static content (images/CSS/JS) → CloudFront CDN
Dynamic API acceleration → Global Accelerator
Multi-Region deployment → Route 53 latency-based routing
Scenario 5: multi-account security governance
Account management → AWS Organizations + OU structure
Permission boundary → SCP (prevents IAM privilege escalation within an account)
Unified security → Firewall Manager (unified WAF/SG rules)
Audit & compliance → CloudTrail + AWS Config
Threat detection → GuardDuty (enable on all accounts)
10. Quick Reference of High-Frequency Exam Points
10.1 Judging the storage type
| Keyword | Choice |
|---|---|
| “shared filesystem”, “multiple EC2 mounting at once” | EFS |
| “database disk”, “single instance” | EBS |
| “temporary high-speed cache”, “data lost when instance stops” | Instance Store |
| “object storage”, “static assets” | S3 |
| “Windows file share”, “SMB” | FSx for Windows |
| “HPC”, “high-performance computing” | FSx for Lustre |
10.2 Judging the database type
| Keyword | Choice |
|---|---|
| “schemaless”, “high concurrency, low latency” | DynamoDB |
| “microsecond reads for DynamoDB” | DAX |
| “highly available MySQL/PostgreSQL”, “auto-scaling” | Aurora |
| “data warehouse”, “OLAP”, “PB-scale analytics” | Redshift |
| “SQL query over S3” | Athena |
| “managed Spark/Hadoop” | EMR |
10.3 Choosing a message queue
| Requirement | Choice |
|---|---|
| Broadcast to multiple consumers | SNS + SQS fan-out |
| Task queue, peak shaving | SQS Standard |
| Strict order, no duplicates | SQS FIFO |
| Real-time data stream | Kinesis Data Streams |
| Triggered by AWS service events | EventBridge |
10.4 Choosing network connectivity
| Requirement | Choice |
|---|---|
| On-prem ↔ AWS dedicated line, low latency | Direct Connect |
| On-prem ↔ AWS VPN (quick to set up) | Site-to-Site VPN |
| Access S3/DynamoDB from a VPC (private) | VPC Gateway Endpoint |
| Private interconnection of multiple VPCs | VPC Peering / Transit Gateway |
| HTTP acceleration for global users (caching) | CloudFront |
| Any-protocol acceleration for global users (routing) | Global Accelerator |
10.5 Choosing a security service
| Requirement | Choice |
|---|---|
| Detect anomalous API calls, malicious IPs | GuardDuty |
| Scan EC2 for vulnerabilities | Inspector |
| Whether there’s PII in S3 data | Macie |
| DDoS protection | Shield |
| SQL injection / XSS protection | WAF |
| API-call auditing | CloudTrail |
| Resource configuration compliance checks | AWS Config |
| Automatic key rotation | Secrets Manager |
| App configuration parameter storage | Parameter Store |