Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Designing and evaluating complex AWS architectures — multi-account AWS Organizations, hybrid and cross-account networking (Transit Gateway, PrivateLink, Direct Connect), business-continuity and DR design, migration and modernization strategy (the 7 Rs), and cost/resilience/performance trade-offs at enterprise scale. Use when making or reviewing enterprise AWS design decisions across organizational complexity, new solutions, continuous improvement, or workload migration. Not hands-on pipeline/IaC
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | 280% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 412% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 277% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 91% | 0% |
| case-07 | ✓→✓ | = Same ✓ | 234% | 0% |
Operational playbook for designing complex AWS architectures. Each section states the rule an architect applies when reviewing or designing: decision criteria for picking services, anti-patterns to catch in design reviews. Verify against the live account — limits, pricing, and feature availability change frequently.
> Load this skill when… evaluating or designing complex AWS architectures across multiple accounts or regions; choosing connectivity patterns (TGW, VPC Peering, Direct Connect, PrivateLink); planning migration strategy (7 Rs, tooling, wave planning); or making cost/resilience/performance trade-offs at enterprise scale. > Not this skill: pipeline/IaC delivery → see aws-devops-engineer-professional; deep security control design → see aws-security-specialty.
> Study resources, whitepapers, practice exams, and credential logistics: references/study-resources.md.
> Verify steps assume nothing about your tooling — use your project's MCP/automation, the AWS CLI (aws) or CloudShell, or the AWS Console, in that order of preference.
[volatile — verify live], Direct Connect port speeds and availability by location [volatile — verify live], Lambda default concurrent executions per account per region [volatile — verify live], Shield Advanced monthly pricing [volatile — verify live], Snow family device capacity and lead times [volatile — verify live], and service quota defaults for any critical-path service before a scaling event.[volatile — verify live] (changes with AWS service updates) or [opinion — house style] (a defensible default, not the only valid choice).An AWS Organization with multiple accounts is the baseline for any enterprise. Accounts are the primary isolation boundary — IAM policies cannot span accounts without explicit cross-account trust.
Pick the right structure:
| Scenario | Recommendation | |---|---| | Enforce policy guardrails org-wide | Service Control Policies (SCPs) on OUs in AWS Organizations | | Automate account vending + guardrails | AWS Control Tower with Landing Zone | | Central identity with SSO across accounts | IAM Identity Center (formerly SSO) with SAML/OIDC federation | | Share resources across accounts (VPCs, subnets, RAM) | AWS Resource Access Manager | | Centralize security findings | Security Hub with delegated admin account | | Centralize CloudTrail logs | Org-level trail to a dedicated logging account |
SCP vs IAM: SCPs define the maximum permissions an account's IAM principals can have — they do not grant. A principal needs both an SCP allow and an IAM grant. An explicit SCP Deny blocks even root. Use SCPs for non-negotiable guardrails (block CloudTrail disable, restrict regions); use IAM for fine-grained access within accounts.
Red flags: single AWS account for all workloads; IAM alone to isolate prod vs dev; SCPs on root instead of specific OUs; forgetting SCPs don't affect the management account.
Verify: aws organizations list-policies --filter SERVICE_CONTROL_POLICY; aws organizations describe-effective-policy --policy-type SERVICE_CONTROL_POLICY.
Choose the connectivity pattern deliberately:
| Need | Pattern | Key constraint | |---|---|---| | Two VPCs, same or different accounts, low-volume private traffic | VPC Peering | Non-transitive — each pair needs its own peering; no overlapping CIDRs | | Hub-and-spoke across many VPCs or accounts | Transit Gateway (TGW) | Transitive routing; costs per attachment + data processing; supports VPN and Direct Connect attachments | | Private access to a service (e.g. S3, API endpoint) without routing through internet | VPC Endpoint (Gateway for S3/DynamoDB, Interface for most others) | Interface endpoints cost per AZ per hour + data; Gateway endpoints are free | | Expose your service to consumers without full VPC access | AWS PrivateLink | Consumer VPCs connect via Interface endpoint; no VPC peering needed; consumers cannot initiate connections back | | On-premises to AWS, dedicated bandwidth | AWS Direct Connect | 1, 10, 100, or 400 Gbps dedicated port speeds [volatile — verify live]; does not encrypt in transit by default — add a VPN over DX for encryption | | On-premises to AWS, internet-based encrypted | Site-to-Site VPN | Standard tunnels up to 1.25 Gbps each; Large Bandwidth Tunnels up to 5 Gbps each (TGW/Cloud WAN attachments only, Nov 2025) [volatile — verify live]; dual-tunnel for redundancy |
Transitive routing trap: VPC Peering is non-transitive — A→B and B→C does not mean A→C. Use Transit Gateway for transitive routing.
DNS in hybrid architectures: Route 53 Resolver inbound endpoints let on-premises resolvers forward queries to Route 53; outbound endpoints let VPC resources forward queries on-premises. Forwarding rules wire which domains go where.
Red flags: hub VPC for transitive routing via peering (won't work); Direct Connect without VPN when in-transit encryption required; overlapping CIDRs in a peering or TGW architecture.
Verify: aws ec2 describe-transit-gateway-attachments; aws route53resolver list-resolver-endpoints; validate route table entries in each VPC after wiring.
Match the DR pattern to the RTO/RPO requirement, not to the maximum:
| Pattern | Typical RTO | Typical RPO | Cost tier | |---|---|---|---| | Backup and restore | Hours | Hours (last backup) | Lowest | | Pilot light | 10s of minutes | Minutes | Low-medium | | Warm standby | Minutes | Near-zero | Medium-high | | Multi-site active/active | Near-zero | Near-zero | Highest |
AWS Elastic Disaster Recovery (DRS): managed replication + failover for lift-and-shift DR (replaces CloudEndure); sub-minute RPO for server-based workloads.
Red flag: multi-region active/active for RTO = 4 hr / RPO = 1 hr (warm standby suffices); backup & restore for RTO = 15 min.
Tag at creation — retrofitting is painful. Enforce via SCP or Config rules. Cost Explorer for trend analysis/forecasts; Budgets for alerts; Compute Optimizer for rightsizing; Trusted Advisor for idle resources and coverage gaps.
| Pattern | Zero downtime | Rollback | Cost | Use when | |---|---|---|---|---| | All-at-once | No | Slow | Lowest | Dev/test, batch | | Rolling | Partial | Medium | Low | Tolerates brief mixed-version | | Blue/green | Yes | Instant (swap) | 2× capacity | Production, stateless services | | Canary | Yes | Instant (shift back) | Slight overhead | Gradual validation in production |
CodeDeploy, ECS deployment config, and Lambda aliases support blue/green and canary natively. CloudFormation change sets = pre-deploy plan view.
Red flag: manual console changes outside IaC; blue/green for a stateful service without externalizing session state first.
Maps to §1.3. Multi-AZ is the availability floor — not a DR strategy. Multi-region required when RTO < ~10 min or single-region failure is unacceptable. Route 53 (failover/latency/weighted) is the DNS layer; S3 CRR and RDS cross-region read replicas are the data plane.
Red flag: Multi-AZ RDS presented as cross-region DR; single-region S3 bucket as DR storage.
aws:SecureTransport in S3 bucket policies.[volatile — verify live] for L7 DDoS + SRT.Red flag: long-lived IAM access keys in Lambda/EC2; SGs with 0.0.0.0/0 on non-public ports; no org-level CloudTrail; no GuardDuty in non-production accounts.
Compute: ASGs (EC2) with target tracking; ECS/EKS on Fargate for containers; Lambda (set reserved concurrency to protect downstream systems).
Databases — pick by access pattern:
| Workload | Service | |---|---| | Relational, OLTP | Aurora (MySQL/PostgreSQL) or RDS — Multi-AZ, read replicas | | Key-value / document | DynamoDB — serverless, auto-scaling, Global Tables | | In-memory cache | ElastiCache Redis — sub-ms latency | | Search / analytics | OpenSearch Service | | Data warehouse | Amazon Redshift — columnar, petabyte scale |
Loose coupling: SQS (standard: at-least-once; FIFO: exactly-once + ordering); SNS fan-out; EventBridge content-based routing; Step Functions for multi-step orchestration.
Red flag: synchronous calls with no timeout or circuit breaker; DynamoDB hot partition keys; single-AZ RDS in production.
Caching: CloudFront (edge) → ElastiCache (app-tier) → DAX (DynamoDB microsecond). Apply at the layer closest to the bottleneck.
Instance selection: C (CPU); R/X (memory); I/D (NVMe); P/G/Inf (ML). Use Global Accelerator for Anycast TCP routing for non-HTTP workloads.
Purchasing: On-Demand for variable; Compute Savings Plans (1yr/3yr, EC2+Fargate+Lambda) for steady-state; Spot for fault-tolerant batch/ML. Default to EBS gp3 over gp2.
Data transfer: inter-AZ transfer costs money. Use S3/DynamoDB Gateway endpoints (free) to eliminate NAT Gateway egress.
Red flag: On-Demand for 24/7 production; gp2 EBS; ignoring inter-AZ transfer costs.
Observability: alarm on P99, not average; structured JSON logs with retention policies (uncapped = cost leak); X-Ray distributed traces; CloudWatch dashboards or Managed Grafana. Move console deployments to CodePipeline; schedule detect-stack-drift to catch manual changes.
Red flag: alarms on Average latency only; no log retention policy; no runbooks for common failure modes.
Security Hub aggregates GuardDuty, Inspector, Macie, Firewall Manager, and IAM Access Analyzer findings — prioritize by severity × blast radius. IAM Access Analyzer finds unintended external access (run org-wide). Add managed Config rules with SSM Automation remediation. Use SSM Patch Manager + Inspector for CVE management.
Red flag: GuardDuty not org-wide; S3 Block Public Access not enabled at org level; IAM roles with *:*.
Performance: instrument before resizing — X-Ray service maps, Container Insights, Lambda Insights. Compute Optimizer recommends right-sizes based on p99. For databases: Performance Insights, Slow Query Logs, read replicas, DAX for DynamoDB.
Reliability — eliminate SPOFs in blast-radius order: single NAT Gateway → one per AZ; single EC2 → ASG min 2; single RDS → Multi-AZ; hard-coded endpoints → Route 53/LB DNS; synchronous calls no retry → SQS or exponential backoff.
Lambda default: 1,000 concurrent executions per region [volatile — verify live]. Document quota headroom; request increases before load events.
Red flag: resizing on Average CPU; single NAT Gateway for all AZs; Lambda with no reserved concurrency on a critical downstream.
Key levers: unused resources (Trusted Advisor; unattached EBS: aws ec2 describe-volumes --filters Name=status,Values=available); Compute Savings Plans for steady-state; S3 lifecycle policies or Intelligent-Tiering; free Gateway endpoints to replace NAT Gateway egress for S3/DynamoDB.
> Step-by-step cost optimization workflow (CUR analysis, rightsizing signals, Savings Plan purchase process, S3 Storage Lens setup): references/cost-optimization.md.
Red flag: no S3 lifecycle policies on buckets older than 90 days; gp2 EBS; no Savings Plan in a 24/7 production environment.
Every migration decision maps to one of the 7 Rs. Apply them in assessment order:
| Strategy | Summary | When to use | |---|---|---| | Retire | Decommission — it's not needed | Application has no active users; duplicate of another system | | Retain | Leave on-premises (for now) | Regulatory constraint; recent CapEx; complex dependency | | Rehost (Lift & Shift) | Move as-is to EC2 | Fast migration, minimal risk; optimize later | | Relocate | Hypervisor-level move (VMware Cloud on AWS) | VMware shops that want speed without re-platforming | | Replatform | Lift, tinker, shift — minor optimization | Move RDS → Aurora; Tomcat → Elastic Beanstalk | | Repurchase | Replace with SaaS | On-prem CRM → Salesforce; on-prem email → M365 | | Refactor / Re-architect | Redesign for cloud-native | Maximum agility/scale; highest effort and cost |
Wave planning: group by dependency, risk, and team capacity. Low-complexity standalone apps first; shared platform services (AD, DNS, monitoring) migrate with or before their dependents.
Red flag: defaulting every workload to Refactor; not mapping dependencies before wave planning; skipping Retire/Retain evaluation.
Verify TCO: AWS Migration Evaluator or Pricing Calculator — include hardware refresh, datacenter, licensing, and staff in the on-premises run rate.
> Full tool-by-tool reference (ADS, MGN, DataSync, Snow Family, DMS, SCT, Transfer Family, Directory Service) lives in references/migration-tooling.md. Load that file when selecting a specific migration tool. Key decision rules inline below.
Core decision rules (always loaded):
[volatile — verify live]. Note: Snowball Edge is no longer available to new customers; for new physical transfers use AWS Data Transfer Terminal or partner solutions. Snowmobile (truck) was discontinued in 2024.Red flag: using DMS without running SCT first on heterogeneous migrations; choosing Snow family for a 500 GB dataset with a 1 Gbps link (DataSync is faster); forgetting to re-point DNS during cutover; skipping a test launch with MGN before the production cutover window.
> Full compute, storage, decoupling, serverless-candidate, and purpose-built-database reference: references/architecture-patterns.md. Core rules below.
Red flag: migrating a stateful monolith to Lambda without externalizing state; using RDS MySQL for a key-value workload; refactoring to microservices without service contracts and observability; choosing EFS when FSx for Windows is required for SMB/DFS.
→ gate: no overlapping CIDRs between any VPC pair (both Peering and TGW reject overlapping CIDRs); aws ec2 describe-vpcs --query 'Vpcs[].CidrBlock' in each account.
aws ec2 create-transit-gateway --description "<name>" --options AmazonSideAsn=64512,AutoAcceptSharedAttachments=disable,DefaultRouteTableAssociation=enable,DefaultRouteTablePropagation=enable.→ gate: aws ec2 describe-transit-gateways --query 'TransitGateways[?State==\available\]' — must reach available before creating attachments.
→ gate: spoke account aws ec2 describe-transit-gateways lists the shared TGW; aws ram get-resource-share-invitations shows no PENDING entries.
aws ec2 create-transit-gateway-vpc-attachment --transit-gateway-id <tgw-id> --vpc-id <vpc-id> --subnet-ids <subnet-ids>.→ gate: aws ec2 describe-transit-gateway-vpc-attachments --filters Name=state,Values=available — every attachment available.
→ gate: aws ec2 describe-route-tables --route-table-ids <rtb> confirms the route; traceroute from an instance in one VPC to a private IP in another confirms packets traverse the TGW.
→ gate: every workload has a documented R + rationale; any Refactor needs a business case before wave planning proceeds.
→ gate: aws discovery describe-agents shows HEALTHY status; no wave plan is valid without a dependency map.
→ gate: aws mgn describe-source-servers shows dataReplicationInfo.dataReplicationState: Replicating for all servers before scheduling test launches.
aws mgn start-test; validate application behavior, licensing, and networking before scheduling the cutover window.→ gate: test instance passes all acceptance checks; results documented.
aws mgn finalize-cutover); update DNS to the new AWS endpoint; monitor 24–48 hours before decommissioning the source.→ gate: aws route53 list-resource-record-sets --hosted-zone-id <zone> confirms the new record; application health checks pass.
ReplicaLag < RPO target.Healthy.aws rds promote-read-replica); run smoke tests. An untested DR runbook is not a DR strategy.> The primary gate commands for each step are in the workflow above. For full RDS/Aurora cross-region replication setup, see the data-store details in §1.3.
Scenario 1 — Transit Gateway vs VPC Peering: the transitive routing trap
> Situation: An architect designs connectivity for 8 VPCs across 3 accounts using hub-and-spoke peering (7 connections to a shared-services VPC). Three months later two application VPCs need to communicate directly; reaching a full mesh would require N×(N-1)÷2 = 28 peering connections.
> Competent move: Use Transit Gateway from the start. TGW supports transitive routing — any attached VPC reaches any other through a single route table; adding a new VPC requires one attachment, not N new peering connections. TGW also supports VPN and Direct Connect attachments for hybrid extension. Per-attachment and per-GB charges are justified at ~4+ VPCs.
> Tempting-but-wrong: Extending the peering design on demand. Each new pair requires a dedicated connection, route table entries in both VPCs, and security group updates — operational overhead grows quadratically.
> Verify: aws ec2 describe-transit-gateways; aws ec2 describe-transit-gateway-attachments --filters Name=state,Values=available; aws ec2 describe-transit-gateway-route-tables; traceroute from VPC-A to a private IP in VPC-B confirms routing traverses the TGW.
Scenario 2 — Direct Connect encryption gap
> Situation: An enterprise migrates a payment-processing application to AWS over a dedicated 10 Gbps AWS Direct Connect connection. The network team provisions the DX connection and confirms link-state is up. The security team signs off on the architecture because "Direct Connect is a private connection." The compliance team later flags the design: traffic traversing the DX link does not meet the PCI-DSS requirement for encryption in transit.
> Competent move: AWS Direct Connect is a dedicated Layer 2 circuit — it is private in the sense that it bypasses the public internet, but it is not encrypted in transit by default. For PCI-DSS and similar mandates that require encryption of data in transit, run a Site-to-Site VPN over the Direct Connect connection (a DX-backed VPN). This gives the dedicated, low-latency path of DX plus IPsec encryption. Alternatively, use MACsec (available on dedicated DX connections at 1/10/100 Gbps) for Layer 2 encryption at the DX port level — check that the DX location and partner support MACsec before committing.
> Tempting-but-wrong: Treating a private/dedicated connection as equivalent to an encrypted connection and skipping the VPN overlay. "Private" means no shared internet path; it does not mean the signal is encrypted. An insider at the colocation facility or a DX partner router compromise would expose cleartext traffic.
> Verify: aws directconnect describe-connections --connection-id <id> --query 'connections[0].encryptionMode' — on a plain DX connection this returns no_encrypt; with MACsec it returns must_encrypt or should_encrypt. For VPN-over-DX: aws ec2 describe-vpn-connections --query 'VpnConnections[?State==\available\].VgwTelemetry' to confirm both VPN tunnels are UP.
Scenario 3 — Lambda concurrency exhaustion attacking Aurora connection pool
> Situation: A Lambda function processes events from an SQS queue and writes results to an Aurora MySQL database. During a Black Friday traffic spike, Lambda scales to 800 concurrent executions. The Aurora db.r6g.2xlarge instance (max_connections ≈ 900) immediately hits connection exhaustion: Too many connections errors appear in Lambda logs, and Aurora CPU spikes to 100%. An engineer proposes increasing Lambda reserved concurrency to 200 as a "throttle." Another proposes upgrading Aurora to db.r6g.4xlarge.
> Competent move: The root cause is that each Lambda invocation opens a new Aurora connection (Lambda's execution environment does not persist connections between invocations when cold-started). At 800 concurrent Lambdas, each holding a connection, Aurora's connection limit is exhausted. The correct architectural fix is Amazon RDS Proxy: RDS Proxy maintains a persistent connection pool to Aurora and multiplexes many Lambda connections through far fewer backend connections. This breaks the linear scaling relationship between Lambda concurrency and DB connections. Reducing Lambda reserved concurrency to 200 trades a database problem for a queue backlog problem. Upgrading Aurora to a larger instance raises the ceiling but does not eliminate the underlying pooling problem and adds cost.
> Tempting-but-wrong: Raising the Aurora instance class. A larger instance has more max_connections, but at full Lambda scale the problem recurs — Aurora instance sizing is not a substitute for connection pooling. RDS Proxy is the architectural fix regardless of instance size.
> Verify: aws rds describe-db-clusters --db-cluster-identifier <id> --query 'DBClusters[0].Endpoint' to confirm connectivity; aws rds describe-db-proxies to confirm RDS Proxy is deployed and associated with the cluster; in CloudWatch, watch the DatabaseConnections metric on the Aurora cluster — with RDS Proxy it should plateau well below max_connections even as Lambda concurrency scales.
Scenario 4 — Snow family vs DataSync: which to use for a 14 TB migration
> Situation: A company needs to migrate 14 TB of on-premises NFS data to Amazon S3 before a datacenter decommission. The network team reports a 500 Mbps internet uplink with typical sustained throughput of 300 Mbps. The migration lead immediately orders a Snowball Edge device, reasoning "14 TB is a lot of data." The project timeline allows 3 weeks for the migration.
> Competent move: At 300 Mbps sustained, 14 TB transfers online in approximately 14 TB × 8 bits/byte ÷ 300 Mbps ≈ 374,000 seconds ≈ 4.3 days — well within the 3-week window. Snowball Edge has a minimum 10-business-day shipping + return cycle; for 14 TB with a healthy internet link it is slower and adds cost (device rental + shipping). Use AWS DataSync for an online transfer: install the DataSync agent on-premises, configure an NFS location, and schedule a full sync followed by an incremental sync near cutover. The 10 TB–1 Gbps rule of thumb for choosing Snow family means Snow is appropriate when online transfer would take weeks or months (>10 TB and <10 Mbps effective throughput) — not when the link is 300+ Mbps.
> Tempting-but-wrong: Defaulting to Snowball Edge because the dataset "sounds large." The Snow family is the right tool when network bandwidth makes online transfer impractical (weeks of transfer time). 14 TB at 300 Mbps is comfortably online. Ordering Snowball adds shipping delay and device rental cost unnecessarily.
> Verify: Before committing, use the AWS DataSync console bandwidth calculator or estimate transfer time manually (dataset size ÷ available throughput). After DataSync starts: aws datasync list-task-executions --task-arn <arn> and describe-task-execution to monitor bytes transferred and estimated time remaining.
Additional scenarios (single NAT Gateway SPOF, SCP vs IAM boundary): references/scenarios.md.
Each rule is concrete and imperative.
aws:SecureTransport in S3 bucket policies; use Secrets Manager when automatic rotation is required.> Study resources (official AWS links, whitepapers, practice exams, community guides) are in references/study-resources.md.
Using this skill and hit a wall? If you find a claim contradicted by the live system or official docs, a missing rule that cost you a wrong attempt, or a decision this skill gave no criteria for — append an entry in the moment to .skill-feedback/aws-solutions-architect-professional.md at the project root (create it if absent):
date | skill last-reviewed | claim or gap | what you observed instead | evidence (error text / doc URL / query output) | suggested fix
These are harvested back into the skill via the learning loop. When the live system and this file disagree, trust the live system.
[volatile — verify live] marks, executable workflows, tool-agnostic verify steps, feedback protocol. Exam logistics relocated to references/study-resources.md._Independent educational content for upskilling AI agents. Not affiliated with or endorsed by Amazon Web Services; all trademarks belong to their owners. Guidance only — verify against official AWS documentation and live accounts. No certification outcome is implied or guaranteed._
Other measured skills in the registry, with their headline benchmark lift.