Skip to main content

Agentic GCP-to-AWS code migration service with live UI

Project description

GCP -> AWS Migration Agent (Hackathon MVP)

Python app that:

  • Accepts GCP architecture JSON.
  • Accepts optional target AWS YAML (or auto-generates one).
  • Clones a Python repo from Git.
  • Finds GCP SDK usage (Cloud SQL, Storage, Secret Manager patterns).
  • Rewrites matching files into AWS-oriented code via OpenAI (or fallback rule-based mode).
  • Runs a validation command after rewrite and iteratively attempts runtime repairs on error.
  • Installs dependencies inside the cloned repo (install_command=auto -> uv sync or pip fallback).
  • Can launch the migrated service via startup_command and keep it running in background.
  • Streams step-by-step logs to a frontend.

Stack

  • Backend: FastAPI
  • Frontend: static HTML + JS (served by FastAPI)
  • Package manager: uv
  • Git clone: GitPython
  • LLM: OpenAI with provider abstraction

Quick Start

  1. Install dependencies (already managed by uv):
uv sync
  1. (Optional) enable OpenAI rewrite mode:
copy .env.example .env
# add OPENAI_API_KEY in .env
  1. Run app:
uv run python main.py
  1. Open:
http://localhost:9000

Use As A Python Package

After publishing/installing:

from gcp_aws_migrator import launch_migration_ui

launch_migration_ui(
  repo_url="https://github.com/your-org/your-repo.git",
  branch="main",
  gcp_architecture={"services": ["storage", "secret_manager", "cloud_sql"]},
  auto_start=True,
  env_overrides={"AWS_DEFAULT_REGION": "eu-north-1"},
)

launch_migration_ui(...) supports pre-filling all UI fields and can auto-start the conversion.

Build And Publish

Build wheel + source dist:

uv build

Upload to PyPI using an API token:

set TWINE_USERNAME=__token__
set TWINE_PASSWORD=pypi-<your-token>
uvx twine upload dist/*

API

  • POST /api/migrate
    • body:
      • repo_url (string)
      • branch (string, default main)
      • gcp_architecture (json object)
      • aws_architecture_yaml (string, optional)
      • validation_command (string, default uv run tests.py)
      • max_fix_iterations (int, default 8, max 8)
      • install_command (string, default auto)
      • startup_command (string, default uv run main.py)
      • ensure_service_running (bool, default true)
      • create_env_file (bool, default true)
      • env_overrides (object, optional)
  • GET /api/runs/{run_id}
  • GET /api/runs/{run_id}/logs
  • GET /api/runs/{run_id}/stream (SSE)
    • GET /api/runs/{run_id}/files (shows cloned repo file list)

Notes

  • If OPENAI_API_KEY is missing, app uses deterministic rule-based rewrites.
  • Repositories are cloned into workspaces/<run_id>/.
  • If startup_command is set, process logs are written to workspaces/<run_id>/.migration/startup.log.
  • Validation and repair logs are streamed in real time so migration progress is traceable.
  • This is an MVP and does not enforce production-grade safety controls.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gcp_aws_migrator-0.1.0.tar.gz (20.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gcp_aws_migrator-0.1.0-py3-none-any.whl (25.5 kB view details)

Uploaded Python 3

File details

Details for the file gcp_aws_migrator-0.1.0.tar.gz.

File metadata

  • Download URL: gcp_aws_migrator-0.1.0.tar.gz
  • Upload date:
  • Size: 20.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for gcp_aws_migrator-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a4f0171c4629820725cde5b33f1ffb3182d11eec84468745053b5b0b56d1215a
MD5 90c07917d6ef0cb28380ed6090bee626
BLAKE2b-256 249baaf377c011e713da5f6ac6321e51bc387b899afc4fa4c8bc574534026312

See more details on using hashes here.

File details

Details for the file gcp_aws_migrator-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for gcp_aws_migrator-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5d0d38065a5f6520494272a46702f559f7a3091676f84e954428a02784ff613f
MD5 9aef056bdd127714ae8e62f855443f1b
BLAKE2b-256 9cc9c01de6a312e1ecb8d99f70cd2c68f2ab866829c752a4b8b5845baa79c9f7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page