What you get after migration
- Same developer experience: Push to deploy, just like Fly.io
- Predictable costs: No surprise bills—AWS pricing you control
- Full AWS access: Use any AWS service (RDS, ElastiCache, S3, SQS, etc.)
- Production-ready: Auto-scaling, auto-healing, monitoring, and CI/CD out of the box
- Built-in observability: Open-source stack with Prometheus, Loki, and Grafana—no extra cost
- No vendor lock-in: Your code runs on standard Kubernetes in your own AWS account
Migration overview
Need help? Schedule a migration call and our engineers will assist you through the
entire process.
Step 1: Set up LocalOps environment
Before migrating, you need a LocalOps environment running on AWS.Create LocalOps account
Sign up for LocalOps if you haven’t already.
Connect AWS account
Follow the AWS connection guide to connect your AWS account.
Create environment
Create a new environment (e.g., production) in your preferred AWS region. See
Create new environment.
Create service
Create a new service and connect your GitHub repository. See Create new service.
Step 2: Prepare your application
Dockerfile-based apps
If you have a Dockerfile, LocalOps will use it automatically. No changes needed.fly.toml configuration
Yourfly.toml configuration maps to LocalOps concepts:
| fly.toml | LocalOps Equivalent |
|---|---|
[http_service] | Web service |
[processes] | Workers |
[[services]] | Internal service |
[env] | Environment variables in service settings |
[[vm]] size | Resource configuration in service settings |
Health checks
Convert Fly.io health checks to LocalOps format inops.json:
Step 3: Migrate Fly Postgres to Amazon RDS
3.1 Create a backup of your Fly Postgres database
Useflyctl to connect to your Postgres cluster and create a backup:
flyctl ssh console to access the database directly:
3.2 Create RDS database in your LocalOps environment VPC
Option A: Using ops.json (Recommended)
Add anops.json file to the root of your repository:
Option B: Manual RDS creation
- Login to AWS Console in the same region as your LocalOps environment
-
Create a DB Subnet Group:
- Navigate to RDS > Subnet groups > Create DB subnet group
- Select the VPC ID from your LocalOps environment
- Add the private subnet IDs from your LocalOps environment
-
Create RDS Instance:
- Navigate to RDS > Create database
- Choose PostgreSQL and select the same major version as your Fly database
- Select the DB subnet group you created
- Set
Publicly accessibleto No - Create a security group allowing port 5432 from
10.0.0.0/16
3.3 Restore backup to Amazon RDS
3.4 Configure database credentials
If you manually created the RDS instance, add credentials as secrets:- Navigate to your service in the LocalOps console
- Go to Settings > Secrets
- Add the following secrets:
Step 4: Migrate Fly Redis (Upstash) to ElastiCache
If you’re using Upstash Redis on Fly.io, migrate to Amazon ElastiCache:Step 5: Migrate environment variables and secrets
Export secrets from Fly.io and add them to LocalOps:- Get the value from your local environment or source
- In LocalOps console, navigate to your service > Settings > Secrets
- Add each variable
Step 6: Update your application
Update your application to use the new environment variables:Step 7: Deploy and verify
- Push your changes to trigger a deployment
- Check logs in the LocalOps console to verify the application starts correctly
- Test your application endpoints
- Update your DNS to point to the new LocalOps environment
Built-in observability
Every LocalOps environment comes with a fully integrated open-source observability stack—no extra add-ons required.Prometheus + Grafana for metrics
Prometheus automatically collects CPU, memory, disk, and network metrics from every node running your application. View and analyze metrics through pre-built Grafana dashboards, accessible from the Monitoring tab in your environment. You can filter and group metrics by:- Node
- Pod
- Deployment
- Service
- Namespace
Loki + Grafana for logs
Loki automatically collects all logs from STDOUT and STDERR across your services. No log drain configuration needed—just print to console and your logs are captured. Access logs through the same Grafana dashboard, with powerful filtering by Kubernetes namespace, deployment, or custom labels.Custom dashboards
Each environment gets its own Grafana instance with pre-built dashboards for infrastructure monitoring. You can create custom dashboards to visualize application-specific metrics and logs.Migrating Fly.io features
| Fly.io Feature | LocalOps Equivalent |
|---|---|
| Machines (web) | Web service |
| Machines (worker) | Workers |
| Fly Postgres | Amazon RDS |
| Upstash Redis | Amazon ElastiCache |
| Tigris Object Storage | Amazon S3 |
| Fly Metrics | Built-in metrics |
| Fly Logs | Built-in logging |