Migrate GCP applications to AWS end-to-end. Two commands: generate a plan, then execute it.
git clone <repo>
cd migration-agent-v2
bun install
cp .env.example .env # add your OPENROUTER_API_KEY# 1. Generate migration plan
bun run src/index.ts plan \
--billing ./gcp-billing.csv \
--iac ./gcp-terraform/ \
--app ./my-app/ \
--out ./migration-plan
# Review migration-plan/ docs, then:
# 2. Execute the plan
bun run src/index.ts execute \
--plan ./migration-plan/plan.json \
--region us-east-1| GCP | AWS |
|---|---|
| Cloud Run | ECS Fargate |
| Cloud SQL (MySQL/PostgreSQL) | RDS |
| Memorystore (Redis) | ElastiCache |
| GCS | S3 |
| Firestore | DynamoDB |
| Firebase Auth | Cognito |
| Gemini / Vertex AI | Amazon Bedrock |
Python, Go, Node.js, Java
- Docker Desktop (running)
- Bun runtime
OPENROUTER_API_KEY— from openrouter.ai- AWS credentials configured (
aws configure) - GCP credentials configured (
gcloud auth application-default login)
Real data migration, auth user cutover, traffic switchover, security hardening, CI/CD setup.
Current smoke test is two bare HTTP checks. The plan is proper end-to-end verification:
How it would work:
aws-migrate planreads the app's source code (it already does this) and uses the LLM to generate atests.jsonalongsideplan.json— describing core user flows to verify: login, the app's main action, data persistence checksaws-migrate executeruns those tests automatically after deployment using Playwright (headless, inside the Docker sandbox) — no LLM at run time, fully deterministic- Tests cover: UI flows (pages load, buttons work, forms submit), API responses, and data round-trips (e.g., upload a file → verify it appears in S3, submit a form → verify it saved to DynamoDB/RDS)
- You can review
tests.jsonbefore executing, the same way you reviewplan.json
Why this matters: current smoke test tells you the app is running. This would tell you the migration actually works.
cd .tf-composed && terraform destroy -auto-approve