Backend Developer
developerJava/Spring engineer deploying a first production workload: EC2, ECS, RDS, S3, SQS/SNS, API Gateway, and enough IAM to not get the account compromised.
AWS Core
Amazon Web Services through the lens of a backend Java/Spring engineer who already knows Docker, Kubernetes, Kafka, and microservices. No "what is cloud computing" — straight to IAM policy evaluation, VPC design, Graviton economics, Multi-AZ failover, and what actually happens inside AWS when you call CreateBucket. Every resource shown three ways: AWS CLI + Terraform + CDK.
There is no magic in the console. Every button click, every CLI command, every Terraform apply, every CDK deploy becomes a signed HTTPS request to a regional service endpoint like ec2.eu-west-1.amazonaws.com. Once you internalize this, AWS stops being 200+ products and becomes one consistent system: authenticate → authorize (IAM) → execute → audit (CloudTrail).
Caller
Console, CLI, SDK, Terraform, CDK — all build the same API request
SigV4 signature
Request signed with credentials (never sent raw) + timestamp + region + service
IAM evaluation
Who are you? Is this action on this resource allowed? Explicit deny wins
Service executes
Control plane mutates state; data plane serves traffic
CloudTrail
Who called what API, when, from where — the audit trail
Control plane vs data plane: AWS services split management operations (RunInstances, CreateTable — low volume, strongly consistent, regional) from data operations (GetObject, Query — massive volume, highly available, often zonal). During large AWS incidents the data plane usually keeps serving while the control plane is degraded — which is why "design so you don't need control-plane actions during failover" is a core resilience principle.
IAM, CloudFront, Route53, and WAF (for CloudFront) are global; almost everything else is regional. S3 bucket names are global but buckets live in one region. Exam questions love testing whether you know a resource's scope.
Every resource has an Amazon Resource Name. You will write hundreds of them in IAM policies, so learn the segments cold. Hover or tap each part:
Interactive — click each segment
Every resource example on this site ships as AWS CLI + Terraform + CDK. Pick your tool once — the choice persists across all pages. Here's a production-grade S3 bucket (encrypted, versioned, no public access):
aws s3api create-bucket --bucket my-app-artifacts --region us-east-1
aws s3api put-public-access-block --bucket my-app-artifacts \
--public-access-block-configuration \
BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true
aws s3api put-bucket-versioning --bucket my-app-artifacts \
--versioning-configuration Status=Enabled
aws s3api put-bucket-encryption --bucket my-app-artifacts \
--server-side-encryption-configuration \
'{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"aws:kms"}}]}'
resource "aws_s3_bucket" "artifacts" {
bucket = "my-app-artifacts"
}
resource "aws_s3_bucket_public_access_block" "artifacts" {
bucket = aws_s3_bucket.artifacts.id
block_public_acls = true
ignore_public_acls = true
block_public_policy = true
restrict_public_buckets = true
}
resource "aws_s3_bucket_versioning" "artifacts" {
bucket = aws_s3_bucket.artifacts.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_s3_bucket_server_side_encryption_configuration" "artifacts" {
bucket = aws_s3_bucket.artifacts.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "aws:kms"
}
}
}
import * as s3 from 'aws-cdk-lib/aws-s3';
import { RemovalPolicy } from 'aws-cdk-lib';
new s3.Bucket(this, 'Artifacts', {
bucketName: 'my-app-artifacts',
encryption: s3.BucketEncryption.KMS_MANAGED,
blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
versioned: true,
removalPolicy: RemovalPolicy.RETAIN, // never delete data by accident
});
Notice the CDK version is 8 lines vs ~30 for CLI/Terraform — L2 constructs encode AWS best practices as defaults. The CLI version requires four separate API calls because that's what's really happening: there is no single "create secure bucket" API. The console hides this; IaC doesn't.
AWS is physically organized as a hierarchy. Each layer trades blast-radius isolation against latency and cost. Knowing this hierarchy is the foundation for every availability decision you'll make.
Fully independent geographic deployments (us-east-1, eu-west-1). Separate power grids, separate control planes. Your data never leaves a region unless you move it.
33 regions worldwideOne or more discrete data centers with independent power, cooling, and networking — connected by <2ms fiber. The unit of fault isolation for Multi-AZ design.
105 AZs · 3+ per regionCompute/storage extensions in metro areas (Los Angeles, Lagos) for single-digit-ms latency to end users. Subset of services, parent-region control plane.
35+ metro areasAWS compute embedded inside 5G carrier networks (Verizon, Vodafone) — traffic never leaves the telecom network. Ultra-low-latency mobile edge.
Inside carrier 5G networksCloudFront points of presence — caching, Lambda@Edge, Route53 DNS, AWS Shield. Far more numerous than regions; this is where your users actually connect.
600+ CloudFront PoPs · 90+ countriesus-east-1 (N. Virginia) is special and dangerous. It's the oldest, biggest, and cheapest region, hosts global control planes (IAM, CloudFront certificates must live there), and historically has the most outages. Don't put your only production deployment there just because tutorials do. Also: inter-region and inter-AZ data transfer costs real money — region choice is a cost decision, not just a latency one.
Multi-AZ = high availability (survive an AZ failure, synchronous, same region). Multi-region = disaster recovery + latency (survive a region failure, asynchronous). The exam tests this distinction constantly: "company needs RPO of seconds across geographic failure" → multi-region; "survive data center failure with no data loss" → Multi-AZ.
AWS lists 200+ services. A production backend uses maybe 25. This is the map of the ones that matter, grouped the way this guide is organized.
AWS-native vs open-source: SQS vs RabbitMQ, Kinesis vs Kafka, DynamoDB vs Cassandra, ECS vs Kubernetes. AWS-native means less ops burden and deep IAM integration but vendor lock-in; open-source means portability and ecosystem but you (or MSK/EKS pricing) carry the operational load. Each chapter covers the decision explicitly.
An AWS account is the strongest isolation boundary AWS offers — stronger than VPCs, stronger than IAM. Mature organizations run dozens of accounts under AWS Organizations. One account per environment is the minimum bar.
flowchart TB MGMT["Management account\n(billing only — no workloads!)"] ORG["AWS Organizations\n+ Service Control Policies"] SEC["Security OU"] WORK["Workloads OU"] SAND["Sandbox OU"] LOG["Log archive\naccount"] AUDIT["Security tooling\naccount"] DEV["dev\naccount"] STG["staging\naccount"] PROD["prod\naccount"] DEVS["per-engineer\nsandboxes"] MGMT --> ORG ORG --> SEC ORG --> WORK ORG --> SAND SEC --> LOG SEC --> AUDIT WORK --> DEV WORK --> STG WORK --> PROD SAND --> DEVS
Root user checklist (do this today): enable MFA (hardware key for the management account), delete root access keys, set a strong unique password, store recovery in a break-glass procedure, and never use root for daily work. Root bypasses all IAM policies — it can do anything, including closing the account.
Starting with one account "to keep it simple" and untangling it two years later is one of the most expensive migrations in cloud engineering — resources, IAM history, and data gravity all resist moving. Use AWS Organizations from day one even if you only create three accounts.
The launch order explains the architecture: storage and queues first, compute second, managed databases third, serverless and containers a decade later. Older services are lower-level; newer ones abstract them away.
The original trio: durable objects, reliable queues, rentable VMs. Everything since builds on these primitives.
Managed relational databases and software-defined private networking — the enterprise unlock.
Serverless NoSQL born from the Dynamo paper (Amazon's own shopping-cart database), plus deep archival storage.
Functions-as-a-service invents the serverless category; ECS answers Docker's rise with AWS-native orchestration.
Layer-7 routing, host/path rules, WebSocket, HTTP/2 — the default front door for containerized services.
Serverless containers and managed Kubernetes — AWS concedes K8s won the orchestration war while betting Fargate abstracts it away.
AWS-designed ARM CPUs: 20–40% better price/performance. The biggest free cost optimization most teams ignore.
Managed foundation-model APIs (Claude, Llama, Titan) — AWS's entry into the GenAI platform race.
Fourth-generation ARM — 75% more memory bandwidth than Graviton3. New default for r8g memory-optimized instances.
Thirteen deep-dive chapters plus cheat sheets. Recommended path: IAM → VPC → Compute → Storage → Databases, then messaging, edge, and architecture patterns as your role requires.
Learning path: IAM · VPC & Networking · Compute · Storage · Databases · Cost
Java/Spring engineer deploying a first production workload: EC2, ECS, RDS, S3, SQS/SNS, API Gateway, and enough IAM to not get the account compromised.
Reusable infrastructure with Terraform/CDK: VPCs, EKS clusters, multi-account strategy, cost dashboards, CI/CD pipelines on AWS.
Resilient multi-region systems, AWS-native vs open-source selection, build-vs-buy decisions, SA Associate/Professional exam preparation.
Policy evaluation logic, roles done right, federation, least privilege in practice. The most important page.
Three-tier network design, security groups vs NACLs, VPC endpoints, Transit Gateway, Route53 routing policies.
Instance families, Graviton economics, Fargate vs EC2 launch type, Java cold-start mitigation, Karpenter.
S3 internals and storage classes, presigned URLs, EBS volume types and snapshots, EFS, storage selection guide.
Multi-AZ vs read replicas, Aurora's storage architecture, DynamoDB single-table design, Redis patterns.
Queues, fan-out, event buses, streams — and exactly when to choose each. Plus Step Functions workflows.
The front door: ALB routing, REST vs HTTP APIs, authorizers, CloudFront caching and edge functions.
Metrics, alarms, Logs Insights, distributed tracing, audit logging — and keeping the CloudWatch bill sane.
KMS envelope encryption, Secrets Manager rotation, WAF rules, Shield, GuardDuty findings, Inspector scanning.
CDK constructs, Terraform state on S3+DynamoDB, CloudFormation internals, landing zones, CDK vs Terraform.
Data transfer — the hidden budget killer. Savings Plans math, Spot strategy, the NAT Gateway surprise, cost alerting.
Multi-AZ and multi-region architectures, microservices on AWS, serverless patterns, CI/CD, DR strategies.
Developer, DevOps, and architect quick references: CLI commands, decision matrices, cost formulas, service limits.