High availability (HA) means minimising downtime; resilience means the system recovers automatically from failure. In the SAA-C03 exam these ideas run through nearly every domain, so learn the AWS-native patterns rather than generic theory.
An Availability Zone (AZ) is one or more discrete data centres with independent power, cooling and networking, connected by low-latency links. A Region has a minimum of 3 AZs (most have 3, some have more). Spreading resources across at least 2 AZs protects against a single data-centre failure; multi-Region protects against a full Region outage but adds latency and data-transfer cost, and needs a replication strategy (e.g. S3 Cross-Region Replication, DynamoDB Global Tables, Aurora Global Database).
1. Backup and Restore — cheapest, slowest (hours), highest RPO/RTO.
2. Pilot Light — minimal core infrastructure running, scale up on failover.
3. Warm Standby — a scaled-down but fully functional copy always running.
4. Multi-Site Active-Active — full production capacity in two+ Regions, lowest RPO/RTO, highest cost.
IAM is global, not regional. It controls who (authentication) can do what (authorisation) on AWS resources.
Don't confuse permissions boundaries (per-identity ceiling) with SCPs (per-account/OU ceiling) — both are 'maximum' controls, neither grants access on its own; you still need an Allow.
KMS manages encryption keys for data at rest across AWS services (S3, EBS, RDS, etc).
Remember KMS keys are regional, unlike IAM. A key created in eu-west-2 cannot be used to decrypt data in us-east-1 directly — you'd need cross-region key replication (multi-Region keys) or re-encryption.
EC2 gives you full control over the OS. Choose instance families by workload: T (burstable, general-purpose, cheap), M (balanced), C (compute-optimised, high CPU), R (memory-optimised), I/D (storage-optimised). Purchasing options matter for cost questions: On-Demand for unpredictable short-term work, Reserved/Savings Plans (1 or 3 year, up to ~72% off) for steady-state predictable workloads, Spot Instances (up to 90% off) for fault-tolerant flexible workloads that can handle interruption with a 2-minute warning, and Dedicated Hosts for licensing/compliance needs where you must control the physical server.
Auto Scaling Groups (ASGs) keep the right number of EC2 instances running using a launch template, min/max/desired capacity, and scaling policies (target tracking is the recommended default, e.g. keep average CPU at 50%). ASGs work across multiple Availability Zones for resilience. Elastic Load Balancers spread traffic: Application Load Balancer (ALB) works at Layer 7 for HTTP/HTTPS and supports path/host-based routing, Network Load Balancer (NLB) works at Layer 4 for extreme performance and static IPs, Gateway Load Balancer is for third-party virtual appliances.
Lambda is serverless compute, billed per millisecond of execution and memory used, with no servers to patch. Key numbers to memorise: default timeout is 3 seconds, maximum timeout is 15 minutes, memory is configurable from 128 MB to 10,240 MB, and CPU scales automatically with memory. Deployment package size limits: 50 MB zipped direct upload, 250 MB unzipped including layers, or up to 10 GB using container images. Concurrency: default account concurrent execution limit is 1,000 (soft limit, raisable), and Provisioned Concurrency removes cold starts for latency-sensitive apps. Lambda is ideal for short, event-driven, stateless tasks triggered by S3, API Gateway, DynamoDB Streams, EventBridge, or SQS.
ECS (Elastic Container Service) runs Docker containers using Task Definitions (the blueprint: image, CPU, memory, ports) and Services (which keep a desired number of tasks running, often behind an ALB). Two launch types: EC2 launch type means you manage the underlying EC2 instances yourself (more control, more admin); Fargate is serverless — AWS manages the infrastructure, you just define CPU/memory per task. EKS is AWS's managed Kubernetes alternative for teams already standardised on Kubernetes tooling.
S3 is object storage, unlimited scale, 11 nines durability across all classes.
Lifecycle policies transition or expire objects automatically by age (days since creation), e.g. Standard to Standard-IA at 30 days, then Glacier at 90 days, then delete at 365 days. Objects must sit in Standard-IA or One Zone-IA a minimum of 30 days before transitioning further. Versioned buckets can expire noncurrent versions separately.
EBS is block storage attached to one EC2 instance at a time (except io1/io2 Multi-Attach). Types: gp3 (general purpose SSD, baseline 3,000 IOPS and 125 MiB/s independent of size, cheapest default), gp2 (older, IOPS tied to volume size, 3 IOPS/GB), io1/io2 (provisioned IOPS, up to 64,000 IOPS, for latency-sensitive databases), st1 (throughput-optimised HDD, big sequential workloads like big data), sc1 (cold HDD, cheapest, infrequent access). EBS snapshots are incremental and stored in S3; snapshots can be copied cross-region for DR.
EFS is a fully managed NFS file system that many EC2 instances (and Lambda, across AZs) can mount concurrently. It is regional, scales automatically, and has Standard and Infrequent Access storage classes with lifecycle management to move files automatically after a set number of days of no access. Use EFS for shared Linux workloads like content management or web serving; EBS cannot be shared across instances the way EFS can.
A VPC is your private network in AWS, split into subnets across Availability Zones.
Each subnet lives in exactly one AZ and gets a CIDR block carved from the VPC's CIDR.
AWS reserves 5 IP addresses in every subnet: network address, VPC router, DNS, future use, and broadcast address - so a /28 only gives you 11 usable IPs.
A subnet is 'public' only if it has a route to an Internet Gateway (IGW) in its route table AND instances have public IPs.
Private subnets route outbound traffic via a NAT Gateway (in a public subnet) - NAT Gateways are AZ-scoped, so put one per AZ for high availability.
VPC Peering links two VPCs 1:1 but is NOT transitive - A peered to B and B peered to C does not let A talk to C.
Transit Gateway solves that: a hub-and-spoke that connects many VPCs and on-prem networks, and does support transitive routing.
Site-to-Site VPN goes over the public internet (encrypted); Direct Connect is a dedicated private line - faster, more consistent, but takes weeks to provision.
VPC Endpoints let you reach AWS services privately without going over the internet: Gateway endpoints are free and cover only S3 and DynamoDB; Interface endpoints (powered by PrivateLink) cost money and cover most other services.
Security Groups are stateful (return traffic auto-allowed) and only support ALLOW rules - they act at the instance/ENI level.
NACLs are stateless (you must allow both inbound and outbound explicitly) and act at the subnet level, supporting both ALLOW and DENY rules - useful for blocking a specific malicious IP.
NACL rules are evaluated in order by rule number, lowest first, and the first match wins.
Supports routing policies: Simple, Weighted (percentage split), Latency-based, Failover, Geolocation, Geoproximity, and Multivalue answer.
Health checks combined with Failover routing give automatic DR failover to a standby endpoint.
Alias records are Route 53's free, AWS-only extension of CNAME - they can point at the zone apex (naked domain) and target ELBs, CloudFront, or S3 website endpoints for free.
CloudFront is AWS's CDN: caches content at edge locations close to users, cutting latency and load on the origin.
Origins can be S3 (use Origin Access Control, OAC, to keep the bucket private and force traffic through CloudFront only), an ALB, or any custom HTTP origin.
Signed URLs/Cookies restrict access to private content; Field-Level Encryption adds extra protection for sensitive fields like card numbers, encrypted end-to-end.
Use Cache Behaviors to route different path patterns to different origins or TTL settings within one distribution.
Confusing NACL (stateless, subnet) with Security Group (stateful, instance).
Forgetting NAT Gateways are per-AZ, not automatically HA across AZs.
Assuming VPC Peering is transitive - it is not, use Transit Gateway.
Using Gateway endpoints when the service isn't S3 or DynamoDB - need Interface endpoints instead.
SAA-C03 loves questions where the 'right' answer is the cheapest one that still meets the performance and durability requirement. Always match the workload pattern to the pricing model and storage/compute tier - overpaying for unused headroom is treated as a wrong answer, same as underprovisioning.