AWS Architecture Best Practices

Concise, practical notes for designing AWS systems that are reliable, secure, and cost-efficient — aligned with AWS Solutions Architect Professional standards.


1. Network Architecture

1.1 Designing a VPC

Think of your VPC as a city — each subnet is a district with its own purpose.

Subnet Type Purpose Example Components
Public Internet-facing resources ALB, NAT Gateway, Bastion Host
Private Internal app and API layers EC2, ECS Tasks
Database Isolated storage layer RDS, Aurora
Management Monitoring and admin tools Prometheus, Grafana

Example layout:

/16 VPC (65,536 IPs)
├── /20 public subnets – across 3 AZs
├── /20 private subnets – across 3 AZs
├── /24 database subnets – across 3 AZs
└── /24 management subnets – across 3 AZs

Design tips:


1.2 Network Security

Control Scope Behavior
Security Groups Instance-level Stateful, only “allow” rules.
NACLs Subnet-level Stateless, supports allow and deny.

Additional practices:


2. High Availability (HA)

2.1 Application HA

2.2 Database HA


3. Redundancy & Disaster Recovery

3.1 Storage Redundancy

3.2 DR Strategies

Strategy Description RTO/RPO
Backup & Restore Rebuild infrastructure from backups High
Pilot Light Minimal standby infrastructure Medium
Warm Standby Scaled-down live copy Low
Multi-site Active Full duplication across regions Very Low (highest cost)

4. Security Architecture

4.1 Identity & Access

4.2 Encryption


5. Performance Optimization


6. Cost Optimization


7. Monitoring & Observability


8. Deployment & Operations


9. Common Patterns

Pattern AWS Services Notes
Microservices API Gateway + ECS/EKS + SQS/SNS Async, scalable design
Serverless Lambda + API Gateway Pay per use
Event-Driven SQS, SNS, EventBridge Decoupled services

10. Design Principles (Rules of Thumb)

10.1 Availability Zones (AZs)

Nominal AZs = the number of AZs actively used in your architecture, leaving one buffer AZ for fault tolerance.

Formula:

Nominal AZs = Total AZs - 1
Instances per AZ = Required Instances ÷ Nominal AZs

Example:

You’re in a region with 6 AZs and your app needs 5 EC2 instances.

Nominal AZs = 6 - 1 = 5
Instances per AZ = 5 ÷ 5 = 1 instance per AZ

If one AZ fails, your app still runs evenly across 4 remaining AZs — maintaining stability and availability.


10.2 Subnets per Tier

Subnets = (Number of Tiers) × (Number of AZs)

Example:

2 tiers (app + DB) × 3 AZs = 6 subnets

10.3 Tiering Logic


11. Best Practices Summary

Principle Why It Matters
Design for failure Expect AZ or instance failure — assume things will break and plan redundancy.
Implement elasticity Scale with demand using Auto Scaling and managed services.
Automate with IaC Use CloudFormation or CDK to reduce manual errors and enforce consistency.
Monitor everything Visibility ensures reliability — track metrics, logs, and alarms proactively.
Optimize for cost Efficiency drives sustainability — right-size, schedule, and review usage regularly.

Common pitfalls:


Contents