AWS Fundamentals
AWS has 200+ services. Most applications use a small subset; the rest are noise unless you have a specific need. This page covers the core services and the mental model for understanding the catalog.
The core dozen
The services most workloads touch:
| Service | What it is |
|---------|-----------|
| **EC2** | Virtual machines |
| **VPC** | Private networks |
| **IAM** | Identity and access |
| **S3** | Object storage |
| **RDS** | Managed relational databases |
| **DynamoDB** | Managed key-value/document store |
| **Lambda** | Serverless functions |
| **API Gateway** | HTTP/REST/WebSocket entry point |
| **CloudWatch** | Metrics, logs, alarms |
| **Route 53** | DNS |
| **CloudFront** | CDN |
| **SQS / SNS** | Queues and topics |
Knowing these well covers most use cases. The other 188 services are specializations — you'll learn them when you need them.
IAM is the foundation
Every AWS interaction is gated by IAM (Identity and Access Management). Users, roles, policies, permissions.
The model:
- **Users** represent people; have credentials.
- **Roles** are assumed by services or users for specific work.
- **Policies** describe permissions (what action on what resource).
- **Trust policies** describe who can assume a role.
Best practice: workloads use roles, not user credentials. EC2 instances have instance profiles; Lambda functions have execution roles. Code calling AWS doesn't need keys — it gets temporary credentials from the role.
VPC: the network
A VPC is a private network in AWS. By default each region has one; you can have many.
Inside:
- **Subnets** (public, private, isolated) — IP ranges in availability zones
- **Security groups** — instance-level firewall rules
- **NACLs** — subnet-level firewall rules
- **Internet Gateway** — public internet access for public subnets
- **NAT Gateway** — outbound internet for private subnets
Most application architecture decisions land in VPC: which subnets, what security group rules, how do services talk to each other.
EC2 vs. Lambda vs. Fargate
The compute decision:
- **EC2**: virtual machines you manage. Most flexible; most operational work.
- **Fargate (ECS/EKS)**: container compute without managing EC2. You define container; AWS runs it.
- **Lambda**: function as a service. Truly serverless; AWS manages everything below the function.
For typical applications, the trend is away from EC2 toward Fargate or Lambda. EC2 still wins for: long-running stateful workloads, GPU/special-hardware, tight control over the runtime, predictable steady-state load.
S3 patterns
S3 is the universal AWS storage. Cheap, durable, scales to petabytes. Common patterns:
- **Static asset hosting**: with CloudFront in front
- **Backups**: lifecycle to Glacier for cost
- **Data lakes**: parquet files, queried by Athena or Redshift Spectrum
- **Application data**: user uploads, generated documents
- **Build artifacts**: signed JARs, container images (via ECR which uses S3)
Storage classes are a real choice: Standard for hot data, Standard-IA for warm, Glacier tiers for cold. Lifecycle rules automate the transition.
See [CloudStorageOptions](CloudStorageOptions).
RDS vs. DynamoDB vs. Aurora
The database decision:
- **RDS**: managed PostgreSQL, MySQL, etc. Familiar relational; full SQL.
- **Aurora**: AWS's clone of MySQL/PostgreSQL with cloud-native storage. Similar API, different economics, better at scale.
- **DynamoDB**: NoSQL key-value/document. Auto-scaling; pay per request; very different access patterns.
For a typical web app, RDS PostgreSQL is the right default. DynamoDB wins for high-scale, simple-access-pattern workloads. Aurora wins for relational workloads that have outgrown standard RDS.
See [CloudDatabases](CloudDatabases).
Cost: where the bill comes from
Most AWS bills are dominated by:
1. **Compute** (EC2 hours, Lambda invocations × duration)
2. **Data transfer** (egress to internet, cross-AZ traffic)
3. **Storage** (S3, EBS, RDS)
4. **Specific premium services** (NAT Gateway, ALB, KMS)
Surprises are usually data transfer (cross-region or out-to-internet) or NAT Gateway (per-GB charges add up).
Common failure patterns
- **Storing credentials in code or config files.** Use IAM roles.
- **Open security groups (0.0.0.0/0:22).** SSH open to internet; bots find it within hours.
- **Single-AZ deployments for production.** AZ failure = downtime.
- **No cost monitoring.** Surprises at end of month.
- **Lift-and-shift without refactoring.** "Cloud" without "cloud-native" — still expensive on-prem patterns.
- **Treating AWS as a single service.** Each service has its own quirks; learn the ones you use deeply.
Further Reading
- [CloudNativeApplicationDesign](CloudNativeApplicationDesign) — How to design for cloud
- [TerraformFundamentals](TerraformFundamentals) — IaC for AWS
- [ServerlessArchitecture](ServerlessArchitecture) — Lambda-centric design
- [AwsLambdaPatterns](AwsLambdaPatterns) — Lambda specifics
- [CloudSecurityFundamentals](CloudSecurityFundamentals) — IAM, encryption, network security
- [CloudPlatforms Hub](CloudPlatformsHub) — Cluster index