Migrating Complex, Multi-Tier Applications to AWS
Strategy first: the seven Rs
Retire, retain, rehost, relocate, replatform, repurchase, refactor. Almost every prompt resolves to one of these, and the decision is driven by timeline, appetite for code change, and licensing. Rehost is fastest and lowest risk; replatform buys managed-service benefits with modest change; refactor is the most expensive and rarely the answer when a deadline is stated.
Know the toolchain
Application Discovery Service and Migration Hub for inventory and dependency mapping; AWS Application Migration Service for block-level rehosting of servers into EC2; AWS Database Migration Service plus Schema Conversion Tool for heterogeneous database moves; DataSync for online, scheduled, or incremental file and object transfer; Snowball Edge for large offline transfers where bandwidth is the constraint; Direct Connect or Site-to-Site VPN for the hybrid network path; Control Tower and a landing zone to establish accounts, networking, and guardrails before the first workload lands.
Plan migrations in waves grouped by dependency cluster and business unit, not by server list order. Define cutover and rollback explicitly, and keep the source running until validation passes.
Traps
DMS replicates data, but schema objects such as stored procedures and triggers usually need SCT and manual remediation; the replication instance must be sized for the change volume. For near-zero-downtime database moves, use change data capture rather than a one-time full load. Snowball is for offline bulk transfer; DataSync is for online transfer and ongoing synchronization. Do not rehost a monolith and then declare the migration complete when a replatform was the stated requirement.
Worked example
Two hundred .NET and SQL Server servers: use Migration Hub and Discovery Agent to group dependencies into waves; rehost application servers with Application Migration Service; convert SQL Server to Aurora PostgreSQL with SCT and DMS with CDC for a short cutover window; migrate file shares with DataSync over Direct Connect; and validate each wave with parallel runs before decommissioning.