On-Premises Workloads & Migration to AWS

AWS Outposts for the workloads that cannot leave, the seven Rs for deciding how the rest should move, and the services (and trucks) that carry them there

Introduction

The previous lesson built the bridge: Transit Gateway, VPN, and Direct Connect all exist to answer "how do an on-premises network and AWS talk to each other, securely and privately?" That bridge solves connectivity, but it does not answer two harder questions that hybrid and migrating organizations face every day: where should this workload actually live, and how do we get the rest of it there?

Some workloads cannot simply move. A factory floor needs millisecond-level response times no region can guarantee from hundreds of miles away; a hospital or bank may be legally required to keep certain data inside a specific building or country. For exactly these cases, AWS will bring its own infrastructure to you: AWS Outposts runs real AWS hardware, APIs, and tools inside your own facility.

Everything else is usually heading in the other direction, into AWS, and that raises its own questions: which strategy fits each application (the seven Rs of migration), which services plan and track that move (Migration Hub, Application Discovery Service), which ones execute it (Application Migration Service, Database Migration Service), and, once the decisions are made, how the data itself actually gets there, over the wire with DataSync and Transfer Family, or, when the wire is not big enough, on a truck, with the Snow Family.

1. Bringing AWS to You: AWS Outposts

AWS Outposts is physical AWS infrastructure, delivered as a full 42U rack for large deployments or as compact 1U/2U Outposts servers for smaller footprints, installed in your own datacenter, office, or colocation facility, and fully managed, monitored, and patched by AWS. The defining idea is that it is not "AWS-like" hardware you operate yourself: it runs the exact same APIs, SDKs, console, and services (EC2, EBS, ECS, EKS, RDS, and S3 on Outposts) as the public Region it extends.

  • Low-latency local processing - manufacturing lines, trading desks, or live production environments where even a few milliseconds of round-trip time to the nearest Region is unacceptable.
  • Local data processing - workloads that generate or consume very large datasets on-site (medical imaging, video production) where moving the data first would be slower and more expensive than processing it locally.
  • Data residency and compliance - regulations that require certain data to physically remain within a specific building, city, or country, while still letting teams build against the AWS APIs they already know.

An Outpost Is an Extension of Your VPC, Not a Separate System

DCOn-Premises FacilityDatacenter / colocationOUTOutposts RackEC2, EBS, RDS, S3 locallyVPCHome AWS RegionSame VPC, APIs, and toolsDelivered, installed, and maintained by AWSService link: redundant Direct Connect or VPN

Figure 1: An Outpost is delivered to your facility as a physical extension of a VPC in a Region you choose. The service link, the same Direct Connect or VPN connectivity from the previous lesson, keeps the Outpost in sync with that Region, while EC2 instances, EBS volumes, RDS databases, or S3 on Outposts buckets running locally are created, billed, and managed through the exact same console and APIs as their Region-based counterparts.

Provisioning a resource on an Outpost looks almost identical to provisioning one in the Region, the only real difference is one extra property pointing at the Outpost itself:

# A subnet that lives on an Outposts rack: same VPC, same APIs, different hardware
outpost_subnet = ec2.CfnSubnet(self, "OutpostSubnet",
    vpc_id=vpc.vpc_id,
    cidr_block="10.0.10.0/24",
    availability_zone="us-east-1a",
    outpost_arn="arn:aws:outposts:us-east-1:123456789012:outpost/op-0123456789abcdef0",
)

# An EC2 instance scheduled onto that subnet runs on the Outpost in your facility,
# but is created, billed, monitored, and managed exactly like any other EC2 instance
local_processor = ec2.CfnInstance(self, "LocalProcessingNode",
    image_id=ami.image_id,
    instance_type="m5.xlarge",
    subnet_id=outpost_subnet.ref,
)
Pricing Model: Not Pay-as-You-Go

Outposts pricing is fundamentally different from standard AWS services. You are reserving physical capacity for a 3-year term and paying for the full hardware configuration whether or not your instances are running, closer to a Reserved Instance than to on-demand EC2. Payment options mirror EC2 RIs: All Upfront, Partial Upfront, or No Upfront (with monthly charges spread over the term).

  • Delivery, installation, maintenance, and software patches are bundled into the configuration price - you are not billed separately for the AWS technicians who show up at your facility.
  • AWS services running on the Outpost (RDS, ECS, EKS) are billed hourly on top of the base capacity cost, at rates comparable to their Region equivalents.
  • An AWS Enterprise Support (or Enterprise On-Ramp) subscription is mandatory to order any Outpost.
  • Exact prices vary by geographic region and hardware configuration - in practice you will request a quote from AWS rather than reading a simple per-hour number off a pricing page.

2. Deciding How Each Application Should Move: The Seven Rs

Outposts answers "what if a workload cannot leave?" Most applications, though, are migrating into AWS, and the first real decision is not a technical one: it is choosing, application by application, how it should move. AWS groups those choices into a well-known set of strategies, often called "the Rs":

Retire

Turn it off. Most enterprise inventories include systems nobody actually uses anymore; migration is the moment to notice and decommission them.

Retain

Keep it where it is, for now. Recently upgraded systems, workloads awaiting a larger rewrite, or apps with regulatory constraints are often deliberately left in place.

Rehost"lift-and-shift"

Move the application as-is onto EC2 with minimal changes. The fastest path to being in the cloud, and usually the first wave of a large migration.

Replatform"lift-tinker-and-shift"

Move it, and make a handful of cloud-friendly swaps along the way, for example replacing a self-managed database with Amazon RDS, without touching the application's core architecture.

Repurchase"drop-and-shop"

Replace the application entirely with a SaaS product, for example moving a self-hosted CRM to Salesforce, and migrate the underlying data into the new system.

Relocate

Move infrastructure to AWS as a unit, unchanged, for example shifting an entire VMware environment onto AWS hardware with VMware Cloud on AWS. The newest of the seven.

Refactor"re-architect"

Rebuild the application around cloud-native patterns: managed services, serverless, auto scaling. The most effort up front, and usually the largest long-term payoff.

Thinking Rehost and Relocate are the same thing?

They both move without changing the application, but what actually moves is very different.

Rehost

Moves your workload to AWS infrastructure. Your on-premises VMs are converted into EC2 instances, different underlying runtime, different tooling. A real conversion step is involved.

Relocate

Moves the infrastructure platform itself, hypervisor and all. The canonical case is VMware Cloud on AWS: your entire vSphere cluster moves to AWS-owned bare metal, your VMs keep running inside VMware, and you keep managing them with vCenter. No conversion to EC2, no restarts, even live migration via vMotion is possible.

In short: Rehost lands your apps on AWS; Relocate brings the entire hypervisor to AWS so your apps never know anything changed. Relocate is mainly relevant to organizations with large VMware estates that cannot afford the disruption of converting thousands of VMs to EC2 all at once.

The Seven Rs: Trading Effort for Long-Term Payoff

Retire / RetainA decision, not a moveRehostLift-and-shiftReplatformLift, tinker, and shiftRepurchase / RelocateDrop-and-shop, or move as-isRefactorRe-architect, cloud-nativeDecide to move itA bit more optimizationReplace it, or move it wholeMost effort, most payoff

Figure 1: Retire and Retain are decisions made before any migration tooling runs. From there, each step to the right asks for more engineering effort in exchange for a deeper fit with cloud-native patterns, from a same-day lift-and-shift, through small cloud-friendly swaps, to replacing or relocating the application wholesale, to a full re-architecture.

3. Planning, Tracking, and Executing the Move

Once a strategy is chosen for each application, a small family of services helps plan, track, and carry out the move itself:

AWS Migration Hub

A single dashboard that tracks migration progress across applications, servers, and databases, even when several different tools and teams are doing the actual work. It does not migrate anything itself - it is the place everyone checks to answer "where are we?"

AWS Application Discovery Service

The "what do we even have?" step. Collects server inventory, performance data, and process/network-level dependency maps, agentlessly (via VMware vCenter integration) or with a lightweight agent, so teams can group apps into sensible migration waves before moving anything.

AWS Application Migration Service (MGN)

The current, recommended tool for rehost migrations. Installs a lightweight agent on source servers (physical, virtual, or in another cloud), continuously replicates them block-by-block to AWS, and lets you launch fully provisioned instances in minutes, with a non-disruptive test launch before the real cutover.

AWS Database Migration Service (DMS)

Purpose-built for moving databases. Supports homogeneous migrations (same engine, e.g. Oracle to Oracle) and heterogeneous ones (different engines, e.g. Oracle to Aurora PostgreSQL, with the Schema Conversion Tool handling schema and code). Can run a one-time copy or keep replicating ongoing changes via change data capture until a low-risk cutover.

A Name You May Still See: AWS Server Migration Service

Older guides, diagrams, and exam material often mention AWS Server Migration Service (SMS) as the tool for rehosting servers to EC2. AWS has retired SMS from active development: AWS Application Migration Service (MGN) is its modern, actively developed successor and the one to reach for today. If you encounter "SMS" anywhere, mentally substitute MGN, the underlying job, continuously replicating servers for a rehost, is the same.

4. Moving the Data Itself: Online and Offline Transfer

Replicating servers and databases is one kind of move. Separately, most migrations also involve a mountain of files, backups, media, or logs that need to land in S3, EFS, or FSx. AWS splits that problem into two paths: move it over the network, or, when the network is not big enough for the job, move it on a truck.

AWS DataSync

Automates moving large datasets between on-premises storage (NFS or SMB shares) and S3, EFS, or FSx. It handles scheduling, encryption in transit, retries, and end-to-end integrity validation, and after the first run, only transfers what actually changed.

AWS Transfer Family

Fully managed support for SFTP, FTPS, and FTP directly into or out of S3 or EFS. Useful when partners, vendors, or legacy workflows already speak one of those protocols and simply need a managed, AWS-native endpoint.

Both of those ride on your network connection, fine for steady, ongoing transfers. But when the dataset is so large, or the available bandwidth so limited, that even a fast link would take weeks or months, the fastest path stops being a wire. It becomes a truck.

The Snow Family: When the Network Isn't the Answer

The AWS Snow Family is a line of ruggedized physical devices: AWS ships one to your site, you load it with data (or run compute and machine learning workloads directly on it at the edge), ship it back, and AWS imports the data into S3. It is the cloud-era version of an old engineering joke: never underestimate the bandwidth of a station wagon full of hard drives speeding down the highway.

AWS Snowball Edge

The current workhorse of the family: rugged, portable devices available in storage-optimized and compute-optimized configurations, used both for large-scale offline data transfer and for running workloads at disconnected or bandwidth-constrained edge locations.

AWS Snowcone

The smallest member of the family, a lunchbox-sized device built for tight spaces and limited power, useful for edge data collection and small transfer jobs.

AWS Snowmobile

The famous one: a 45-foot shipping container on a semi-truck, designed to move up to 100 petabytes in a single trip for the largest data center migrations and decommissions on the planet.

Two Members Have Left the Family

Worth knowing if you run into them in older material or exam questions: AWS retired Snowmobile and stopped accepting new orders for Snowcone, pointing customers toward Snowball Edge for both transfer and edge-compute needs going forward. AWS's own explanation was simple: fleets of Snowball Edge devices turned out to be a more practical, cost-effective way to move the same exabyte-scale datasets than a single truck ever was. The lesson behind the lesson: even physical logistics gets optimized in the cloud.

Two Roads From On-Premises Storage to S3

DCOn-Premises StorageNFS / SMB sharesDSYDataSync AgentScheduled, incrementalSNBSnowball EdgeLoaded on-site, shippedS3Amazon S3Online: continuous sync over the networkEncrypted transfer, only what changedOffline: data loaded locallyShipped back, imported into S3

Figure 2: DataSync rides your existing network connection and is the right default for ongoing or moderately sized transfers. When the dataset is too large, or the connection too slow, for that to finish in a reasonable time, a Snowball Edge device takes the offline path: loaded on-site, shipped to AWS, and imported directly into S3, no network required for the bulk of the data at all.

DataSync locations and tasks are just CDK constructs like any other, defining where the data comes from, where it goes, and when it should run:

# Source: an on-premises NFS share, reached through a DataSync agent
nfs_location = datasync.CfnLocationNFS(self, "OnPremShare",
    server_hostname="nfs.onprem.example.com",
    subdirectory="/exports/datasets",
    on_prem_config=datasync.CfnLocationNFS.OnPremConfigProperty(
        agent_arns=["arn:aws:datasync:us-east-1:123456789012:agent/agent-0123456789abcdef0"],
    ),
)

# Destination: an S3 bucket, accessed through a role DataSync assumes
s3_location = datasync.CfnLocationS3(self, "S3Destination",
    s3_bucket_arn=destination_bucket.bucket_arn,
    s3_config=datasync.CfnLocationS3.S3ConfigProperty(
        bucket_access_role_arn=datasync_role.role_arn,
    ),
)

# A recurring task that only transfers what changed since the last run
nightly_sync = datasync.CfnTask(self, "NightlySync",
    source_location_arn=nfs_location.attr_location_arn,
    destination_location_arn=s3_location.attr_location_arn,
    schedule=datasync.CfnTask.TaskScheduleProperty(schedule_expression="cron(0 2 * * ? *)"),
)

5. Reference Architecture: A Migration in Motion

Putting the planning and execution services together: Application Discovery Service maps the on-premises estate first, so the team can group applications into waves with a clear strategy for each. Application Migration Service and Database Migration Service then replicate servers and databases continuously, while Migration Hub aggregates status from every tool into one view. Each wave finishes with a low-risk cutover into the target VPC, validated before traffic ever moves.

Discover, Plan, Replicate, Cut Over

DCOn-Premises EstateServers + databasesADSApplication DiscoveryMaps what's thereMHBMigration HubTracks every waveMGNApplication Migration SvcReplicates serversDMSDatabase Migration SvcReplicates databasesVPCTarget VPC1. Discover servers & dependenciesInventory feeds the tracker2a. Continuous server replication2b. Continuous database replicationProgressProgress3a. Cut over: launch replicated instances3b. Cut over: redirect to migrated database

Figure 1: Discovery comes first and feeds both the planning (Migration Hub) and execution (Application Migration Service, Database Migration Service) tools. Servers and databases replicate continuously from the on-premises estate, each tool reports its progress back to Migration Hub for a single source of truth, and the wave finishes with a validated cutover into the target VPC.

Zooming into a single wave shows what "continuous replication" actually buys you: the ability to test the destination before committing to it, with the source application still running the whole time.

A Wave's Journey: Discovery to Cutover

Application DiscoveryMigration HubApplication Migration ServiceOn-Prem ServerTarget VPCInventory & dependency mapSchedule wave 1Install replication agentContinuous block-level replicationLaunch test instance (non-disruptive)Validation passesCut over: launch production instanceWave 1 complete

Figure 2: The source server keeps running and replicating the entire time. A test launch validates the destination with zero impact on production, and only after that validation passes does the real cutover happen, with Migration Hub recording each milestone for the whole team to see.

Key Takeaways

  • AWS Outposts brings AWS hardware, APIs, and tools into your own facility - the answer for workloads that cannot leave on-premises due to latency, local data processing, or data-residency requirements, connected back to a home Region through the same Direct Connect or VPN service link covered in the previous lesson.
  • The seven Rs frame every migration decision - Retire and Retain are calls to make before tooling runs; Rehost, Replatform, Repurchase, Relocate, and Refactor trade increasing engineering effort for a deeper fit with cloud-native patterns.
  • Migration Hub and Application Discovery Service plan and track the move - discovery maps the estate into sensible waves, and the hub aggregates status from every tool into one dashboard, without migrating anything itself.
  • Application Migration Service and Database Migration Service execute it - both replicate continuously so source and target stay in sync until a validated, low-risk cutover; MGN is the modern, actively developed successor to the retired Server Migration Service (SMS).
  • Data moves online or offline depending on size and bandwidth - DataSync and Transfer Family handle ongoing transfers over the network, while the Snow Family (today, primarily Snowball Edge, since Snowcone and Snowmobile have been retired) physically ships data when the network alone would take too long.
What's Next?

You now have the full map: how AWS networks connect to each other and to the world outside AWS, how workloads that cannot leave on-premises still get to run on AWS infrastructure, and how the rest get planned, replicated, and physically transported into the cloud. The Capstone project pulls every piece of this course together into one deployed application:

  • A complete 3-tier deployment - VPC networking, Lambda compute, and an RDS database, served through the CloudFront pattern from the DNS, Certificates & CDN lesson.
  • Infrastructure as Code end to end - the entire stack expressed and deployed with CDK, the same patterns used for the Outposts and DataSync snippets in this lesson.
  • A production checklist - the monitoring, security, and operational practices that turn a working deployment into one you would trust with real traffic.