DEV Community

Cover image for Migrating EC2 Instances Across Accounts & Regions Using AMI Sharing

Migrating EC2 Instances Across Accounts & Regions Using AMI Sharing

When you think of moving an application from one EC2 instance to another, the first things that usually come to mind are:

  • Taking database dumps
  • Copying application files manually
  • Using third-party migration tools or plugins

While these methods work, they are often time-consuming, error-prone, and application-specific.

But here’s the shiner ✨ — a method we sometimes forget:

👉 AMI Sharing + Copying Across Regions.


🔑 Why AMI Sharing is Worth Remembering

Instead of migrating components individually (files, DB, configs), you simply capture the entire server as a machine image (AMI).
This guarantees that:

  • Your OS, application, database, configs, SSL certs, cron jobs, and dependencies move together.
  • Migration is faster and more reliable.
  • It works for any workload, not just specific apps.

🛠️ Step-by-Step: Migrating EC2 with AMI Sharing

1. Create an AMI from the Source EC2

In AWS Console:

  • Go to EC2 → Instances → Create Image (AMI).

AWS CLI:

aws ec2 create-image\
  --instance-id i-0123456789abcdef0\
  --name "my-server-ami"\
  --description "AMI for migration"
Enter fullscreen mode Exit fullscreen mode

2. Share the AMI with the Destination Account

In Console:

  • EC2 → AMIs → Modify Image Permissions → Add the AWS Account ID of the destination.

AWS CLI (make it public or shared with specific account):

aws ec2 modify-image-attribute\
  --image-id ami-1234567890abcdef0\
  --launch-permission "Add=[{UserId=111122223333}]"
Enter fullscreen mode Exit fullscreen mode

⚠️ If the AMI uses encrypted EBS volumes, also share the snapshot:

aws ec2 modify-snapshot-attribute\
  --snapshot-id snap-1234567890abcdef0\
  --attribute createVolumePermission\
  --operation-type add\
  --user-ids 111122223333
Enter fullscreen mode Exit fullscreen mode

And if using a KMS key for encryption:

aws kms create-grant\
  --key-id <kms-key-id>\
  --grantee-principal <arn:aws:iam::<dest-account-id>:root>\
  --operations Decrypt,Encrypt,GenerateDataKey
Enter fullscreen mode Exit fullscreen mode

3. Copy the AMI to the Destination Region

AMIs are region-specific. You need to copy it to your target region.

AWS Console:

  • In destination account, go to Shared AMIs → Copy AMI → Select target region.

AWS CLI:

aws ec2 copy-image\
  --source-image-id ami-1234567890abcdef0\
  --source-region us-east-1\
  --region us-west-1\
  --name "my-server-ami-copy"
Enter fullscreen mode Exit fullscreen mode

4. Launch a New EC2 Instance

From the copied AMI, you can launch your new instance.

AWS CLI:

aws ec2 run-instances\
  --image-id ami-0987654321fedcba0\
  --count 1\
  --instance-type t3.medium\
  --key-name my-key\
  --security-group-ids sg-0123456789abcdef0\
  --subnet-id subnet-0123456789abcdef0
Enter fullscreen mode Exit fullscreen mode

✅ Advantages

  • Universal → Works for any EC2 workload (WordPress, LAMP, Node.js, custom apps).

  • Faster & simpler than app-specific migration methods.

  • Reliable → No missing configs or dependencies.

  • Secure → Controlled sharing with account IDs.


⚠️ Things to Keep in Mind

  • Networking (VPCs, SGs, IAM roles, Elastic IPs) don't move → must be recreated.

  • Encrypted Volumes → require snapshot & KMS key sharing.

  • Licensing → commercial software may not migrate cleanly without reactivation.


🚀 TL;DR

Next time you need to move an EC2 instance whether WordPress, LAMP, or a custom server -remember this shiner ✨:

  1. Create AMI

  2. Share AMI

  3. Copy AMI to target region

  4. Launch EC2

And your server is migrated, clean and simple. 🎯


👉 This method is not limited to WordPress - it's applicable to all EC2-based workloads.

Top comments (0)