plugins/migration-to-aws/skills/gcp-to-aws/SKILL.md
Migrate workloads from Google Cloud Platform to AWS. Triggers on: migrate from GCP, GCP to AWS, move off Google Cloud, migrate Terraform to AWS, migrate Cloud SQL to RDS, migrate GKE to EKS, migrate Cloud Run to Fargate, Google Cloud migration. Runs a 5-phase process: discover GCP resources from Terraform files, clarify migration requirements, design AWS architecture, estimate costs, and plan execution.
npx skillsauth add awslabs/agent-plugins gcp-to-awsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
User must provide GCP infrastructure-as-code:
.tf files (Terraform).tfvars or .tfstate filesIf no Terraform files are found, stop immediately and ask user to provide them.
Migration state lives in .migration/[MMDD-HHMM]/ directory (created by Phase 1, persists across invocations):
.migration/
├── .gitignore # Auto-created to protect state files from git
└── 0226-1430/ # MMDD-HHMM timestamp
├── .phase-status.json # Current phase tracking
├── gcp-resource-inventory.json # All GCP resources found
├── gcp-resource-clusters.json # Clustered resources by affinity
├── clarified.json # User answers (Phase 2 output)
├── aws-design.json # AWS services mapping (Phase 3 output)
├── estimation.json # Cost breakdown (Phase 4 output)
└── execution.json # Timeline + risks (Phase 5 output)
Note: The .migration/ directory is automatically protected by a .gitignore file created in Phase 1. Migration state files will not be accidentally committed to version control.
.phase-status.json schema:
{
"phase": "discover|clarify|design|estimate|execute",
"status": "in-progress|completed",
"timestamp": "2026-02-26T14:30:00Z",
"version": "1.0.0"
}
If .phase-status.json exists:
status is completed: advance to next phase (discover→clarify, clarify→design, etc.)status is in-progress: resume from that phaseOn skill invocation: Check for .migration/*/ directory
in-progress.migration/:" then for each directory, display its name and the contents of its .phase-status.json (phase + status). Output: "Pick one to continue: [list with phase info]".phase-status.json and validate:
.migration/[MMDD-HHMM]/.phase-status.json and restart.".migration/[MMDD-HHMM]/.phase-status.json and restart Phase [X]."phase, status, timestamp, version): STOP. Output: "State file incomplete (missing [field]). Delete and restart."in-progress: Resume that phasecompleted: Advance to next phasePhase transition mapping (when phase is completed):
Phase gate checks: If prior phase incomplete, do not advance (e.g., cannot enter estimate without completed design)
| Phase | Inputs | Outputs | Reference |
| ------------ | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ---------------------------------------- |
| Discover | .tf files | gcp-resource-inventory.json, gcp-resource-clusters.json, .phase-status.json updated | references/phases/discover/discover.md |
| Clarify | gcp-resource-inventory.json, gcp-resource-clusters.json | clarified.json, .phase-status.json updated | references/phases/clarify.md |
| Design | gcp-resource-inventory.json, gcp-resource-clusters.json, clarified.json | aws-design.json, aws-design-report.md, .phase-status.json updated | references/phases/design.md |
| Estimate | aws-design.json, clarified.json | estimation.json, estimation-report.md, .phase-status.json updated | references/phases/estimate.md |
| Execute | aws-design.json, estimation.json | execution.json, execution-timeline.md, .phase-status.json updated | references/phases/execute.md |
awspricing (for cost estimation):
get_pricing_service_codes() to detect availabilityreferences/shared/pricing-fallback.json (includes 2026 on-demand rates for major services)awsknowledge (for design validation):
validation_status: "skipped" in aws-design.json with note in design report| Condition | Action |
| ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| No .tf files found | Stop. Output: "No Terraform files detected. Please provide .tf files with your GCP resources and try again." |
| .phase-status.json missing phase gate | Stop. Output: "Cannot enter Phase X: Phase Y-1 not completed. Start from Phase Y or resume Phase Y-1." |
| awspricing unavailable after 3 attempts | Display user warning about ±15-25% accuracy. Use pricing-fallback.json. Add pricing_source: fallback to estimation.json. |
| User does not answer all Q1-8 | Offer Mode C (defaults) or Mode D (free text). Phase 2 completes either way. |
| aws-design.json missing required clusters | Stop Phase 4. Output: "Re-run Phase 3 to generate missing cluster designs." |
us-east-1 (unless user specifies, or GCP region → AWS region mapping suggests otherwise)When invoked, the agent MUST follow this exact sequence:
Load phase status: Read .phase-status.json from .migration/*/.
Determine phase to execute:
in-progress: Resume that phase (read corresponding reference file)completed: Advance to next phase (read next reference file)references/phases/clarify.md)references/phases/design.md)references/phases/estimate.md)references/phases/execute.md)Read phase reference: Load the full reference file for the target phase.
Execute ALL steps in order: Follow every numbered step in the reference file. Do not skip, optimize, or deviate.
Validate outputs: Confirm all required output files exist with correct schema before proceeding.
Update phase status: Each phase reference file specifies the final .phase-status.json update (records the phase that just completed).
Display summary: Show user what was accomplished, highlight next phase, or confirm migration completion.
Critical constraint: Agent must strictly adhere to the reference file's workflow. If unable to complete a step, stop and report the exact step that failed.
User can invoke the skill again to resume from last completed phase.
v1.0 includes:
Deferred to v1.1+:
development
Deploy to AWS Elastic Beanstalk. Triggers on: elastic beanstalk, EB, managed EC2 platform, web app with managed patching, worker on EC2, Heroku alternative, don't want to manage servers or containers, migrate from Heroku, managed operational lifecycle. Covers Elastic Beanstalk on EC2 for web and worker applications.
testing
Evaluate, configure, and migrate workloads to AWS Lambda Managed Instances (LMI). Triggers on: Lambda Managed Instances, LMI, capacity provider, multi-concurrency Lambda, dedicated instance Lambda, EC2-backed Lambda, cold start elimination, Graviton Lambda, instance type for Lambda, Lambda cost optimization with Reserved Instances or Savings Plans. Also trigger when users describe high-volume predictable workloads seeking cost savings, or compare Lambda vs EC2 for steady-state traffic. For standard Lambda without LMI, use the aws-lambda skill instead.
development
Deploy applications to AWS. Triggers on phrases like: deploy to AWS, host on AWS, run this on AWS, AWS architecture, estimate AWS cost, generate infrastructure. Analyzes any codebase and deploys to optimal AWS services.
development
Build with Aurora DSQL — manage schemas, execute queries, handle migrations, diagnose query plans, load data, and develop applications with a serverless, distributed SQL database. Covers IAM auth, multi-tenant patterns, MySQL-to-DSQL migration, DDL operations, query plan explainability, SQL compatibility validation, and bulk data loading. Triggers on phrases like: DSQL, Aurora DSQL, create DSQL table, DSQL schema, migrate to DSQL, distributed SQL database, serverless PostgreSQL-compatible database, DSQL query plan, DSQL EXPLAIN ANALYZE, why is my DSQL query slow, aurora-dsql-loader, load CSV into DSQL.