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.2.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.2-py3-none-any.whl (25.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: gcp_aws_migrator-0.1.2.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.2.tar.gz
Algorithm Hash digest
SHA256 d0017af798fdf2be32724f25fdac2a083eb8002e2aef998bd2ea28fbbf3a9034
MD5 882a60ceaf1e9fd94b7e5214428160f6
BLAKE2b-256 d5c8e648ba31b910734b499efad2411e9c081289ce80f52e3dbe44b744292e4d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gcp_aws_migrator-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 796272f7331fd37086f8d05db7178114ae5540d1cf1e015a63a7ca73baf9b112
MD5 cddafaf6d316b4fb7bdee2b780644b9a
BLAKE2b-256 599e22acdcd4e2018c473eab3329f5143b94fb0e55de19cd00cdb789a70c5529

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