Migrate from AWS EC2 to Quake AI compute
Coming from another cloud?
▸AWS·EC2 Instances, EBS, Amazon Machine Images (AMIs)
EC2 Instances
- Uses EC2 RunInstances API instead of Nova servers.create.
- Requires predefined instance type selection.
- Supports per-second On-Demand billing and Spot/Reserved options.
- Includes hibernation state not standard in OpenStack.
Migrate from AWS EC2 to Quake AI compute
You use this guide to move virtual machine workloads from AWS EC2 to Quake AI (OpenStack Nova). For most workloads, you rebuild and rsync: you provision a fresh Nova instance, install your application stack, and transfer data. You can export custom AMIs, but the pipeline adds complexity and often takes longer than rebuild and rsync.
Service mapping#
AWS to Quake AI
| AWS service | Quake AI equivalent | Key difference |
|---|---|---|
| Amazon EBS Volume Copies (Clones) | Clones | Direct same-AZ copy only; requires source encrypted, size >= source; background initialization with instant low-latency access. One-time... see details |
| Amazon EC2 | Compute | No notable divergence |
| Instance Types | Flavors | Fixed predefined configurations only; no custom flavor creation. Extensive families for GPU/HPC/ARM etc. InstanceType as string param in... see details |
| Amazon Machine Images (AMIs) | Images | Managed via EC2 APIs, not Glance. Region-specific with cross-region copy. Marketplace AMIs may charge hourly fees. Includes block device... see details |
| EC2 Instances | Instances | Uses EC2 RunInstances API instead of Nova servers.create. Requires predefined instance type selection. Supports per-second On-Demand... see details |
| EC2 Key Pairs | Key Pairs | Public key auto-injected to authorized_keys at boot. Up to 5000 per region; AWS stores public key. Supports import of external keys... see details |
| Placement Groups | Server Groups | Policies: cluster/partition/spread vs affinity/anti-affinity. AZ-scoped, no instance moves/merges. Specified at launch via... see details |
| Amazon Machine Images (AMIs) | Snapshots | No notable divergence |
| EBS Snapshots | Snapshots | Per-EBS volume, incremental in S3; not full instance image. Via EC2 CreateSnapshot API, not Nova/Cinder. Async pending state, volume usable... see details |
Prerequisites#
- A Quake AI account with application credentials
- The OpenStack CLI installed and configured
- SSH access to your EC2 instances
- An SSH key pair imported to Quake AI (
openstack keypair create --public-key)
Image portability#
AWS supports exporting custom AMIs to S3 in VMDK, VHD, or RAW format using the aws ec2 export-image command. Downloaded images require conversion to QCOW2 before uploading to Glance.
aws ec2 export-image \
--image-id MY_AMI_ID \
--disk-image-format RAW \
--s3-export-location S3Bucket=MY_EXPORT_BUCKET,S3Prefix=exports/
# Download from S3, convert to QCOW2
qemu-img convert -f raw -O qcow2 MY_EXPORTED_RAW MY_OUTPUT_QCOW2
# Upload to Glance
openstack image create MY_IMAGE_NAME \
--disk-format qcow2 --container-format bare \
--file MY_OUTPUT_QCOW2When to use image export: Only for custom AMIs with significant baked-in software that would take longer to rebuild than to export, convert, and upload. The pipeline adds 30-60 minutes per image depending on size. For most workloads, rebuild and rsync is faster.
Flavor mapping#
AWS instance families map to Quake AI flavor families by their RAM-to-vCPU ratio. M-series (general purpose, 4:1) maps to m2a, C-series (compute optimized, 2:1) maps to c2a, R-series (memory optimized, 8:1) maps to r2a, and T-series (burstable) maps to s1a for light workloads.
| AWS Instance Type | vCPUs | RAM (GiB) | Quake AI Flavor | vCPUs | RAM (GiB) | Notes |
|---|---|---|---|---|---|---|
| t3.micro | 2 | 1 | s1a.micro | 1 | 1 | Burstable → shared; fewer vCPUs on Quake AI |
| t3.medium | 2 | 4 | s1a.medium | 2 | 4 | Both 2 vCPU / 4 GiB |
| t3.large | 2 | 8 | m2a.large | 2 | 8 | Exact ratio match |
| m6i.large | 2 | 8 | m2a.large | 2 | 8 | Exact ratio match |
| m6i.xlarge | 4 | 16 | m2a.xlarge | 4 | 16 | Exact ratio match |
| m6i.2xlarge | 8 | 32 | m2a.2xlarge | 8 | 32 | Exact ratio match |
| m6i.4xlarge | 16 | 64 | m2a.4xlarge | 16 | 64 | Exact ratio match |
| m6i.8xlarge | 32 | 128 | m2a.8xlarge | 32 | 128 | Exact ratio match |
| m6i.16xlarge | 64 | 256 | m2a.16xlarge | 64 | 256 | Exact ratio match |
| c6i.large | 2 | 4 | c2a.large | 2 | 4 | Exact ratio match |
| c6i.xlarge | 4 | 8 | c2a.xlarge | 4 | 8 | Exact ratio match |
| c6i.2xlarge | 8 | 16 | c2a.2xlarge | 8 | 16 | Exact ratio match |
| c6i.4xlarge | 16 | 32 | c2a.4xlarge | 16 | 32 | Exact ratio match |
| r6i.large | 2 | 16 | r2a.large | 2 | 16 | Exact ratio match |
| r6i.xlarge | 4 | 32 | r2a.xlarge | 4 | 32 | Exact ratio match |
| r6i.2xlarge | 8 | 64 | r2a.2xlarge | 8 | 64 | Exact ratio match |
| r6i.4xlarge | 16 | 128 | r2a.4xlarge | 16 | 128 | Exact ratio match |
T-series instances at high sustained utilization should move to m2a rather than s1a, since T-series bursting masks continuous CPU demand.
The same vCPU-to-RAM ratios apply to newer instance generations (m7i, c7i, r7i). Choose the Quake AI flavor based on the ratio, not the generation number.
Migration approach#
Option 1: Containerized workloads (recommended)#
If your EC2 workloads run in Docker or on ECS/EKS, migrate the container images and redeploy.
- Push images from ECR to a portable registry (Docker Hub, GitHub Container Registry, or self-hosted):
docker pull MY_ACCOUNT_ID.dkr.ecr.MY_AWS_REGION.amazonaws.com/MY_APP:latest
docker tag MY_ACCOUNT_ID.dkr.ecr.MY_AWS_REGION.amazonaws.com/MY_APP:latest \
MY_REGISTRY/MY_APP:latest
docker push MY_REGISTRY/MY_APP:latest- Provision a Nova instance on Quake AI:
openstack server create \
--image "Ubuntu-22.04" \
--flavor m2a.xlarge \
--network MY_NETWORK \
--key-name MY_KEY \
--security-group MY_SECURITY_GROUP \
MY_INSTANCE_NAME- Install Docker and deploy:
ssh ubuntu@FLOATING_IP
sudo apt update && sudo apt install -y docker.io
sudo docker pull MY_REGISTRY/MY_APP:latest
sudo docker run -d -p 80:8080 MY_REGISTRY/MY_APP:latestOption 2: Rebuild and rsync (non-containerized)#
For traditional application stacks, provision a fresh instance and transfer data.
- Provision a Nova instance with the same base OS:
openstack server create \
--image "Ubuntu-22.04" \
--flavor m2a.xlarge \
--network MY_NETWORK \
--key-name MY_KEY \
--security-group MY_SECURITY_GROUP \
MY_INSTANCE_NAME- Assign a floating IP for SSH access:
openstack floating ip create PublicStatic
openstack server add floating ip MY_INSTANCE_NAME FLOATING_IP-
Install your application stack on the Quake AI instance. Reuse existing cloud-init configs, Ansible playbooks, or shell scripts.
-
Transfer application data from the EC2 instance:
rsync -avz --progress -e "ssh -i ~/.ssh/MY_KEY" \
ubuntu@EC2_PUBLIC_IP:/path/to/app/data \
ubuntu@FLOATING_IP:/path/to/app/data- Migrate databases:
# PostgreSQL
pg_dump -h EC2_PUBLIC_IP -U MY_USER MY_DATABASE | \
psql -h FLOATING_IP -U MY_USER MY_DATABASE
# MySQL
mysqldump -h EC2_PUBLIC_IP -u MY_USER -p MY_DATABASE | \
mysql -h FLOATING_IP -u MY_USER -p MY_DATABASEKey pair and security setup#
Import your SSH key#
If you already have an SSH key pair used with EC2, import the public key to Quake AI:
openstack keypair create --public-key ~/.ssh/id_ed25519.pub MY_KEYOr generate a new key pair:
openstack keypair create MY_KEY > MY_KEY.pem
chmod 600 MY_KEY.pemRecreate security groups#
EC2 security groups map closely to Neutron security groups. Both default to deny-inbound, allow-outbound. Translate your rules with the same protocol, port, and CIDR values:
openstack security group create web-tier
openstack security group rule create web-tier \
--protocol tcp --dst-port 22 --remote-ip 0.0.0.0/0
openstack security group rule create web-tier \
--protocol tcp --dst-port 80 --remote-ip 0.0.0.0/0
openstack security group rule create web-tier \
--protocol tcp --dst-port 443 --remote-ip 0.0.0.0/0Validation checklist#
After migrating each workload, verify:
- Application responds correctly on the Quake AI instance
- All expected ports are accessible through the security group
- Data integrity: compare file checksums or row counts between source and destination
- Database connectivity from the application to any migrated databases
- DNS records updated to point to the new Quake AI floating IP
- Monitoring in place (self-managed Prometheus + Grafana to replace CloudWatch)
- cloud-init or configuration management runs cleanly on the new instance
- SSL/TLS certificates installed and renewed with Let's Encrypt, Certbot, or your chosen certificate service
Provider-specific gotchas#
| Topic | Detail |
|---|---|
| Egress costs | AWS bills egress per-GB after a small free allowance. AWS offers a free egress waiver for migrations, but you must request it from AWS Support; it is not automatic. See AWS pricing. |
| Reserved Instances | Check for active RI or Savings Plan commitments before decommissioning. Break fees may apply. |
| Marketplace AMIs | Cannot be exported. Rebuild from scratch with equivalent open-source software. |
| IAM credentials | AWS IAM has no Quake AI equivalent. Switch to OpenStack application credentials. |
| Instance metadata | Both use the 169.254.169.254 metadata endpoint. AWS-specific keys (instance profile, IAM role) do not exist on OpenStack. cloud-init is compatible, but remove EC2-specific datasource references. AWS IMDSv2 uses session-oriented PUT+GET requests; OpenStack uses the older GET-only (IMDSv1-style) interface. Applications that enforce IMDSv2 need changes on Quake AI. |
| EBS volumes | No direct volume export. Attach, mount, and rsync data to a Cinder volume on Quake AI. |
| Elastic IPs | AWS Elastic IPs cannot be transferred. Update DNS to point to new Quake AI floating IPs during cutover. Use low TTLs during the transition. |
| Secondary ENIs | Multiple ENIs for network isolation or failover have no direct equivalent. Replicate the topology using Neutron ports and multiple security groups. |
| Windows licensing | BYOL from Software Assurance is required. Cloud-only Windows licenses are provider-locked and cannot transfer. |
See also#
- Migrating from AWS to Quake AI: full cross-service migration hub
- Coming from AWS: concept translation reference
- Create an instance: full instance provisioning workflow
- Compute migration guides: all provider guides
Usage Guidelines
The sample code, software libraries, command line tools, proofs of concept, templates, and other related technology on this page (including any of the foregoing that is provided by Quake AI personnel) is provided to you as Quake AI Content under the Quake AI Customer Agreement, or the relevant written agreement between you and Quake AI (whichever applies). Do not use this Quake AI Content in your production accounts, or on production or other critical data. You are responsible for testing, securing, and optimizing the Quake AI Content (such as sample code) as appropriate for production grade use based on your specific quality control practices and standards. Deploying Quake AI Content may incur Quake AI charges for creating or using Quake AI chargeable resources, such as running Compute instances or storing data in Object Storage. Your use is also subject to the Acceptable Use Policy.
Comparisons to third-party providers in this material reflect publicly documented behavior as of the validation date below. Pricing, quotas, service limits, and feature availability change frequently on every cloud. Verify provider-specific claims against the provider's own current documentation before relying on them for a procurement, architecture, or migration decision.
For the full policy, see Usage Guidelines.
Last validated: 22.06.2026
Quick answers
- Why does `openstack image save` write a 0-byte file for my boot-from-volume instance?CLI
- Why does `openstack server create` fail with "Only volume-backed servers are allowed for flavors with zero disk"?CLIAPITerraform
- Why does my project still have a 10 GiB Cinder volume after I deleted my instance?CLIAPI
See Also
Compute migration guides
Shares: Flavors, Images
Migrate from Azure Virtual Machines to Quake AI Compute
Shares: Flavors, Images
Migrate from DigitalOcean Droplets to Quake AI Compute
Shares: Flavors, Images
Migrate from GCP Compute Engine to Quake AI compute
Shares: Flavors, Images
Migrate from Hetzner Cloud Servers to Quake AI Compute
Shares: Flavors, Images