The main tools for moving workloads to AWS and Google Cloud, grouped by what they move, with what each one leaves for you to do, and where an infrastructure SDK fits when the application is re-platformed rather than copied.

Cloud migration tools are usually sold as one category, and they do very different jobs. Some replicate whole servers block by block, some copy a database and then stream its changes until cutover, and some move files, and none of them change how the application is built or deployed, which is where most of the time in a migration actually goes once the data has landed.
This guide groups the main AWS and Google Cloud migration tools by what they move, notes what each leaves to you, and covers where an infrastructure SDK fits when the application is re-platformed instead of copied.
AWS Application Migration Service (MGN) installs an agent on each source server, replicates its disks continuously into a staging area in your AWS account, and launches test or cutover instances on EC2 from that copy. It handles physical, virtualized and other-cloud servers, and the replication itself is free for a period per server, with EC2 and storage billed as usual. Google's Migrate to Virtual Machines does the same for Compute Engine, replicating VMs from vSphere, AWS or Azure.
Both are rehosting tools, so the servers arrive as they were, with the same operating system, patching, deploy scripts and cron entries, so the team still runs VMs afterwards, now on a cloud bill.
Best fit: Large estates of servers that must leave a data center by a deadline, where re-platforming each app first is not realistic.
AWS DMS runs a replication instance (or DMS Serverless) that performs a full load of each table and then applies ongoing changes through change data capture until you cut over, which keeps downtime to the final switch. It supports homogeneous moves such as Postgres to RDS for PostgreSQL and heterogeneous ones such as Oracle to Postgres, with a schema conversion tool for the latter. Google's Database Migration Service covers MySQL, PostgreSQL and SQL Server into Cloud SQL or AlloyDB with continuous replication.
The tools move rows, not the surrounding setup: the target instance, its networking, users, parameter settings and the application's connection all have to exist first, and DMS needs network access to the source and target plus source-side settings such as logical replication enabled on Postgres.
Best fit: Databases too large to dump and restore in a maintenance window, and engine changes.
AWS DataSync copies data from NFS, SMB, HDFS, other object stores or other clouds into S3, EFS or FSx, with an agent for on-premises sources, verification and scheduling for incremental runs. Google's Storage Transfer Service does the same into Cloud Storage, including from S3 and Azure Blob Storage. For very large datasets with limited bandwidth, offline devices such as AWS Snowball remain an option.
Best fit: Uploads, media libraries, backups and data lakes.
For a Postgres database of a few gigabytes, pg_dump --format=custom and pg_restore --jobs during a short write freeze are usually faster to set up than DMS, and native logical replication (a publication on the source, a subscription on RDS or Cloud SQL) gives near-zero downtime without a separate service when the source allows it. The Render to RDS and Heroku Postgres to RDS guides walk through the dump-and-restore path.
Encore combines an open source infrastructure SDK with a platform that provisions and deploys into your own AWS or GCP account, and it fits alongside the data tools rather than replacing them. None of the tools above decide how the application runs in the cloud, and a re-platform, from a PaaS or from VMs to containers and managed services, means building the target environment: a VPC, a container platform, the database instance DMS will load into, queues, buckets, secrets, IAM and a deploy pipeline, usually as Terraform written next to the application changes.
With Encore, services declare what they use in TypeScript or Go, and the deploy creates the VPC, Fargate or EKS (Cloud Run or GKE on GCP), RDS or Cloud SQL, SNS and SQS or Pub/Sub, S3 or Cloud Storage and the secret store entries, with an IAM role for each service on AWS or a service account on GCP, as covered in the AWS infrastructure docs:
// documents/documents.go
package documents
import (
"context"
"encore.dev/storage/objects"
"encore.dev/storage/sqldb"
)
// The target database DMS or pg_restore loads into.
var db = sqldb.NewDatabase("documents", sqldb.DatabaseConfig{
Migrations: "./migrations",
})
// The bucket DataSync or Storage Transfer Service fills.
var files = objects.NewBucket("documents", objects.BucketConfig{Versioned: true})
type Doc struct {
ID int64 `json:"id"`
Title string `json:"title"`
Key string `json:"key"`
}
//encore:api public method=GET path=/documents/:id
func Get(ctx context.Context, id int64) (*Doc, error) {
d := &Doc{ID: id}
err := db.QueryRow(ctx, `SELECT title, object_key FROM documents WHERE id = $1`, id).
Scan(&d.Title, &d.Key)
if err != nil {
return nil, err
}
return d, nil
}
Resources that already exist do not have to be recreated: Encore can import an existing RDS instance, S3 bucket, SNS topic, Cloud SQL instance or GCS bucket, so a database moved by DMS can be attached to the new services. encore run starts Postgres and local object storage for the same code, so the ported services are tested on a laptop before the cutover rather than first in the cloud. When AI coding agents do part of the porting, they declare a bucket or topic in the service code and run it locally in the same change, and the IAM and networking for it come from the deploy.
Migrated services are traced end to end from the first deploy, which the tracing docs cover, and production SQL databases keep deletion protection at the cloud provider level, per the infrastructure management docs.
Best fit: Re-platforming backend services into your own AWS or GCP account, alongside DMS or pg_dump for the data and DataSync for the files.
Match the tool to what is moving, and rehost servers with Application Migration Service or Migrate to Virtual Machines when the deadline is tight. Move databases with DMS, Google's Database Migration Service or native Postgres tools depending on size and downtime. Move files with DataSync or Storage Transfer Service. When the application itself is being rebuilt for the cloud, use Encore to create the services and the infrastructure they need in your own account, and point the data tools at what it provisions.
For servers, AWS Application Migration Service and Google Migrate to Virtual Machines replicate machines into the cloud. For databases, AWS Database Migration Service and Google Database Migration Service copy data with ongoing change capture. For files and objects, AWS DataSync and Google Storage Transfer Service move data in bulk. Application re-platforming uses tools that rebuild how the app is deployed, such as containers with Terraform.
Rehosting, or lift and shift, copies servers as they are onto cloud VMs, which is fast but keeps the old operating model. Replatforming changes how the application runs, for example moving it to containers with a managed database and queues, which takes longer but removes servers you would otherwise keep patching.
Port the services to Encore's TypeScript or Go SDK, declaring databases, Pub/Sub topics, buckets and cron jobs in code, then connect your AWS account and deploy. Encore provisions the networking, compute and managed services in your account, and existing RDS databases, S3 buckets or SNS topics can be imported instead of recreated.
Not always. For databases small enough to move during a short write freeze, pg_dump and pg_restore are enough. Use AWS DMS or native logical replication when the database is large or downtime has to stay close to zero, because they keep copying changes until you cut over.
Deploy to your cloud on AWS and Google Cloud
without managing infrastructure
Encore lets developers and agents define application infrastructure directly in code, then automatically provisions it from local development to production in your AWS or GCP account.