Fast, exam-focused reference for AWS Solutions Architect Associate (SAA-C03): core patterns, service trade-offs, security and networking checklists, HA/DR strategies, storage/database choices, and cost levers.
Keep this page open while drilling questions. Prioritize trade-offs: availability, performance, cost, operations, and security.
Subnets and Routing
Security Layers
Hybrid and Multi-VPC
flowchart LR A["ALB (Public Subnets)"] --> B1["EC2/ECS (Private AZ1)"] A --> B2["EC2/ECS (Private AZ2)"] B1 & B2 --> C["RDS/Aurora (Multi-AZ)"] B1 & B2 --> D["S3 via Gateway VPC Endpoint"] B1 & B2 --> E["DynamoDB via Gateway VPC Endpoint"] B1 & B2 --> F["NAT GW per AZ for egress"]
IAM and Organizations
aws:PrincipalOrgID
.KMS and Data Protection
S3 encryption choices:
Use grants for service integrations; consider multi-Region keys when needed.
Secrets and Certificates
Copy-ready snippets
Minimal S3 bucket policy to require VPC endpoint usage:
1{
2 "Version": "2012-10-17",
3 "Statement": [
4 {
5 "Sid": "DenyNonVPCE",
6 "Effect": "Deny",
7 "Principal": "*",
8 "Action": "s3:*",
9 "Resource": [
10 "arn:aws:s3:::my-bucket",
11 "arn:aws:s3:::my-bucket/*"
12 ],
13 "Condition": {
14 "StringNotEquals": {
15 "aws:sourceVpce": "vpce-1234567890abcdef0"
16 }
17 }
18 }
19 ]
20}
Tight KMS key policy principal example:
1{
2 "Version": "2012-10-17",
3 "Statement": [
4 {
5 "Sid": "KeyAdmins",
6 "Effect": "Allow",
7 "Principal": { "AWS": "arn:aws:iam::111122223333:role/SecOpsKmsAdmin" },
8 "Action": ["kms:*"],
9 "Resource": "*"
10 },
11 {
12 "Sid": "UseKeyFromAppRole",
13 "Effect": "Allow",
14 "Principal": { "AWS": "arn:aws:iam::111122223333:role/AppProdRole" },
15 "Action": ["kms:Encrypt","kms:Decrypt","kms:GenerateDataKey*","kms:DescribeKey"],
16 "Resource": "*",
17 "Condition": {
18 "StringEquals": { "kms:ViaService": "ec2.us-east-1.amazonaws.com" }
19 }
20 }
21 ]
22}
EC2 and Auto Scaling
Load Balancers
Containers and Serverless
ECS vs EKS vs Fargate:
Lambda: set reserved concurrency to isolate critical functions; VPC-enable only if needed for private access.
Object vs Block vs File
Quick picks
Requirement | Service/Class | Notes |
---|---|---|
Application shared POSIX across AZs | EFS | Use EFS-IA for cold directories |
High IOPS per instance | EBS io2/io1 | gp3 is default; tune IOPS/throughput |
Hot object storage | S3 Standard | Default class |
Variable/unknown access patterns | S3 Intelligent-Tiering | Small monitoring fee |
Infrequent access, multi-AZ durability | S3 Standard-IA | Retrieval fee |
Infrequent access, single AZ | S3 One Zone-IA | Cheaper; not multi-AZ |
Archive | S3 Glacier/Deep Archive | Retrieval time trade-offs |
Throughput hints
Relational
NoSQL (DynamoDB)
Caching
HA patterns
Backup and Replication
DR strategies
Strategy | RTO | RPO | Cost | Notes |
---|---|---|---|---|
Backup/Restore | High | Hours | Low | Cheapest; slowest recovery |
Pilot Light | Medium | Minutes | Med | Minimal core running in DR |
Warm Standby | Low | Minutes | Med+ | Scaled-down prod in DR |
Multi-Site Active | Very Low | Seconds | High | Active-active, complex |
flowchart TD P["Primary Region"] -->| Async Replication | S["Secondary Region"] P --> B["Backups (AWS Backup / Snapshots)"] S --> R53["Route 53 Failover/Latency"]
kms:Decrypt
with conditions.Cost levers by area
Area | Lever | Example |
---|---|---|
Compute | Graviton, right-size, Spot | ASG with OD+Spot mixed policy |
Storage | S3 lifecycle, EFS-IA, gp3 tuning | Move logs to IA/Glacier |
Network | Endpoints over NAT where possible | S3/DDB via Gateway endpoints |
Analytics | Partitioning, compression | Athena scans reduced by partitions |
Load Balancer Choice
Need | Pick | Notes |
---|---|---|
HTTP/HTTPS, L7 routing | ALB | WAF attach, path/host routing |
TCP/UDP, static IP, low latency | NLB | TLS pass-through/termination |
Inline appliances | GWLB | Transparent insertion |
EC2 Purchase Option
Pattern | Option | Notes |
---|---|---|
Steady baseline | Savings Plan | Flexible instance families |
Predictable steady | Reserved Inst | Zonal/Regional scope |
Bursty/interruptible | Spot | Diversify pools + capacity-optimized |
DynamoDB Mode
Traffic Profile | Mode | Notes |
---|---|---|
Spiky/unknown | On-Demand | Pay-per-request |
Predictable/steady | Provisioned+AS | Lower cost at scale |
Private S3-only access (VPC endpoint)
1{
2 "Version":"2012-10-17",
3 "Statement":[{
4 "Sid":"DenyNotFromVPCE",
5 "Effect":"Deny",
6 "Principal":"*",
7 "Action":"s3:*",
8 "Resource":[
9 "arn:aws:s3:::my-bucket",
10 "arn:aws:s3:::my-bucket/*"
11 ],
12 "Condition":{"StringNotEquals":{"aws:sourceVpce":"vpce-1234567890abcdef0"}}
13 }]
14}
Cross-account role assumption (trust policy)
1{
2 "Version":"2012-10-17",
3 "Statement":[{
4 "Effect":"Allow",
5 "Principal":{"AWS":"arn:aws:iam::222233334444:role/TeamRole"},
6 "Action":"sts:AssumeRole",
7 "Condition":{"StringEquals":{"aws:PrincipalOrgID":"o-abc123"}}
8 }]
9}
Route 53 Failover records (pseudo steps)
11) Create primary A/AAAA alias to ALB in Region A with Health Check.
22) Create secondary A/AAAA alias to ALB in Region B with Health Check.
33) Set Failover: Primary / Secondary. Verify health checks and simulate failover.
Read the last sentence of each scenario first. If multiple answers work, pick the one that best satisfies the explicit constraint (e.g., “lowest cost,” “highest availability,” “least operational effort”).