Skip to content

Commit c51ed0d

Browse files
icarthickKarthikclaudekrokokoscottschreckengaust
authored
feat(migration-to-aws): Migration plugin (awslabs#73)
* feat(gcp-to-aws): Add GCP-to-AWS migration plugin (v1.0) Add complete gcp-to-aws plugin for AWS Agent Plugins marketplace: - 5-phase migration workflow: Discover, Clarify, Design, Estimate, Execute - Terraform-based infrastructure discovery and resource classification - AWS service mapping with 2-pass design evaluation (fast-path + rubric) - Cost estimation with pricing MCP integration and fallback - Execution timeline and risk assessment Files: - plugin.json: Plugin manifest with metadata and version - .mcp.json: MCP server configuration (awspricing, awsknowledge) - SKILL.md: Main orchestrator (~280 lines) with phase routing - references/phases/: 5 phase implementations (discover, clarify, design, estimate, execute) - references/design-refs/: Service mapping rubrics (compute, database, storage, networking, messaging, ai) - references/design-refs/fast-path.md: Deterministic 1:1 mappings (8 services) - references/shared/: Clarification questions, output schemas, pricing fallback - README.md: Plugin overview and usage Scope (v1.0): - Terraform infrastructure only (no app code scanning yet) - Design and estimation (no IaC code generation) - Dev sizing by default, production overridable - State management via .migration/[MMDD-HHMM]/ directory Future (v1.1+): - App code scanning for AI workload detection - AI-only fast-track path in Clarify/Design - Billing data import from GCP - Flat Design path for non-Terraform codebases Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * refactor(gcp-to-aws): Refactor discover phase architecture into modular files Decomposed monolithic discover.md into: **Discover Phase** (references/phases/discover/): - discover.md: Lightweight orchestrator (~40 lines) - discover-iac.md: Terraform-specific discovery (~75 lines) - discover-billing.md: Billing stub v1.2+ (~35 lines) - discover-app-code.md: App code stub v1.1+ (~35 lines) - unify-resources.md: Combines domain outputs (~75 lines) **Clustering Logic** (references/clustering/terraform/): - classification-rules.md: PRIMARY/SECONDARY hardcoded lists (~85 lines) - typed-edges-strategy.md: Relationship type inference from HCL (~105 lines) - clustering-algorithm.md: Rules 1-6 deterministic clustering (~125 lines) - depth-calculation.md: Topological sort algorithm (~130 lines) **Changes**: - Updated SKILL.md Phase Summary Table to point to new discover/discover.md - Deleted old monolithic references/phases/discover.md Enables v1.1 (app code) and v1.2 (billing) support by adding new files only—zero changes to existing discoverers or orchestration logic. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * refactor(gcp-to-aws): Make discover phase specifications more prescriptive Updated discover phase files to enforce strict workflow compliance: **SKILL.md**: - Workflow Execution section now requires agent to: - Follow EVERY step in order - NOT skip or optimize - Validate outputs before proceeding - Stop immediately on any failure **discover.md**: - Numbered steps with explicit dependencies - WAIT statements before proceeding - Schema validation requirements - Error handling for each step - Prevents agent from deviating or optimizing **discover-iac.md**: - Step-by-step instructions for each phase (parse, classify, edge-build, depth, cluster) - Exact JSON schema for iac_resources.json with required fields - Validation confirmations after each step - MANDATORY file write requirement with schema specification - Prevents custom schema creation **unify-resources.md**: - PATH A (IaC) vs PATH B (non-IaC) decision logic - Intermediate file validation with required schemas - Exact JSON schemas for both output files (inventory + clusters) - Step-by-step merge logic - MANDATORY file write with validation - Prevents autonomous schema modifications **Key changes**: - Added "Execute ALL steps in order. Do not skip or deviate." to each file - Added "WAIT for completion" and "Validate file exists" checks - Embedded exact JSON schemas with required/optional fields - Added error handling with specific failure messages - Removed ambiguity that allowed agent optimization This ensures v1.1/v1.2 compatibility by enforcing deterministic, predictable workflow. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * refactor(gcp-to-aws): Simplify discover phase - discover-iac produces final outputs Simplified architecture based on testing feedback: **Key Changes:** 1. **discover.md** (simplified orchestrator): - Step 0: Initialize .migration/[MMDD-HHMM]/ - Step 1: Scan for Terraform files - Step 2: Call discover-iac.md (Terraform only, v1.0) - Step 3: Update .phase-status.json - No more intermediate file handling or unify-resources delegation 2. **discover-iac.md** (self-contained, produces FINAL outputs): - Step 1: Parse Terraform files - Step 2: Classify resources (PRIMARY/SECONDARY) - Step 3: Build typed dependency edges + populate serves[] - Step 4: Calculate topological depth (Kahn's algorithm) - Step 5: Apply clustering algorithm (Rules 1-6) - Step 6: Write FINAL outputs directly: * gcp-resource-inventory.json (with metadata, all resources) * gcp-resource-clusters.json (with all clusters) - Based on proven logic from discover-full.md - Exact JSON schemas provided for both outputs 3. **Deleted:** - unify-resources.md (no longer needed) - Intermediate iac_resources.json concept abandoned 4. **discover-billing.md & discover-app-code.md:** - Remain as stubs for v1.1/v1.2 - Merging strategy deferred (TBD in future versions) **Benefits:** - No intermediate files or orchestration complexity - discover-iac.md is self-contained and testable - Clarify/Design phases work immediately after discover - Cleaner error handling - outputs are final - Scales easily for v1.1/v1.2 (each source produces own outputs) **Critical Field Names:** Inventory: address, type, classification, secondary_role, cluster_id, depth, serves Clusters: cluster_id, primary_resources, secondary_resources, creation_order_depth, edges Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * refactor(gcp-to-aws): Explicitly forbid extra files - discover outputs ONLY 2 JSON files Added strict constraints to both discover.md and discover-iac.md: **Output files ONLY:** - gcp-resource-inventory.json (REQUIRED) - gcp-resource-clusters.json (REQUIRED) **Forbidden (waste tokens):** - README.md - discovery-summary.md - EXECUTION_REPORT.txt - discovery-log.md - Any documentation or report files All user communication via output messages, NOT written files. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(gcp-to-aws): Clarify Rule 2 - ONE cluster per resource type, not per resource Critical fix to clustering algorithm Rule 2: **Problem:** Current implementation creates separate clusters for each resource: - 4× google_pubsub_topic → 4 clusters (WRONG) - 3× google_storage_bucket → 3 clusters (WRONG) **Solution:** Group ALL resources of same type into ONE cluster: - 4× google_pubsub_topic → 1 cluster (messaging_pubsubtopic_us-central1_001) - 3× google_storage_bucket → 1 cluster (storage_bucket_us-central1_001) - 2× google_sql_database_instance → 1 cluster (database_sql_us-central1_001) **Examples updated to show:** - ✅ CORRECT: 4 topics → 1 cluster - ❌ INCORRECT: 4 topics → 4 clusters **Expected result:** 5-7 clusters instead of 11+ Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * build: Configure bandit to exclude node_modules from security scans - Add .bandit configuration file with exclude_dirs for node_modules, .tmp, .git - Update mise.toml bandit task to use .bandit config - Prevents false positives from dependency code Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * style: Apply dprint formatting to discover phase files - Format markdown tables and code blocks per dprint standards - Improves consistency across plugin documentation Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * chore: Add package.json and package-lock.json - Specifies npm dev dependencies (dprint, markdownlint-cli2, ajv-cli) - Locks dependency versions for consistent builds Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * chore: Remove package.json and package-lock.json These files are generated artifacts from npm and shouldn't be committed. Mise manages npm tool installation, not npm directly. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * chore: Add package.json and package-lock.json to .gitignore These files are generated artifacts from npm package management and should not be tracked in version control. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * revert: Undo bandit configuration changes Reverted: - mise.toml: Changed bandit command back to 'bandit -r .' - Removed .bandit configuration file Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * docs: Add gcp-to-aws plugin to documentation - Add gcp-to-aws to CODEOWNERS file with plugin team owners - Update root README.md with gcp-to-aws in plugins table - Add installation instructions for gcp-to-aws - Add detailed plugin section with workflow, triggers, and MCP servers Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * style: Apply dprint formatting to README.md Align markdown tables per dprint formatting standards. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * chore: Remove package.json and package-lock.json from .gitignore These files are not generated by mise, so no need to ignore them. Keep only node_modules/ which is the actual dependency artifact. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * refactor: Rename gcp-to-aws plugin to migration-to-aws - Rename plugin directory from plugins/gcp-to-aws to plugins/migration-to-aws - Update plugin name in marketplace registry, CODEOWNERS, and plugin.json - Update README.md with new plugin name and installation command - Skill names remain gcp-to-aws to support future migration skills (azure-to-aws, etc.) Plugin structure now supports multiple migration skills under one plugin: - migration-to-aws (plugin container) - gcp-to-aws (skill) - azure-to-aws (future skill) - etc. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix: Correct phase status schema logic Fix semantic bug in .phase-status.json phase transitions. ISSUE: Phase files were writing the NEXT phase as 'completed', contradicting the routing logic that should advance only when the CURRENT phase is completed. SOLUTION: Record the phase that just completed, not the next phase. Phase status now records completion correctly: - discover (completed) → route to clarify - clarify (completed) → route to design - design (completed) → route to estimate - estimate (completed) → route to execute - execute (completed) → migration complete Updated files: - discover.md: write 'discover' completed (was 'clarify') - clarify.md: write 'clarify' completed (was 'design') - design.md: write 'design' completed (was 'estimate') - estimate.md: write 'estimate' completed (was 'execute') - SKILL.md: rewrote Phase Routing and Workflow Execution sections to clarify the phase advancement logic This resolves Reviewer feedback issue #1 (Phase Status Schema Bug). Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix: Consolidate gcp-resource-inventory.json schema Resolve schema inconsistency by updating output-schema.md to match the actual schema produced by discover-iac.md. CHANGES: - Add 'metadata' wrapper with summary statistics - total_resources, primary_resources, secondary_resources - total_clusters, terraform_available - Add missing resource fields: secondary_role, depth, serves - Add SECONDARY resource example (google_compute_network.vpc) - Add field documentation explaining each field's purpose RESULT: - Single source of truth: output-schema.md now matches discover-iac.md - Agents following either file now produce compatible output - Metadata provides useful summary information This resolves Reviewer feedback issue awslabs#2 (Schema Inconsistency). Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix: Consolidate cluster ID naming format Resolve cluster ID naming inconsistency by standardizing on the format specified in clustering-algorithm.md: {category}_{type}_{region}_{sequence} CHANGES: - gcp-resource-clusters.json examples: - 'web-us-central1' → 'compute_instance_us-central1_001' - 'database-us-central1' → 'database_sql_us-central1_001' - aws-design.json examples: - 'web-us-central1' → 'compute_instance_us-central1_001' RESULT: - All cluster_id values now use consistent format across all schemas - Matches clustering-algorithm.md Rule 6 (Deterministic naming) - Single schema source of truth in output-schema.md This resolves Reviewer feedback issue awslabs#3 (Cluster ID Naming Inconsistency). Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(migration-to-aws): Fix compute.md factual error in timeout calculation Example 2 incorrectly claimed 540s exceeds 15-minute Lambda limit. 540 seconds = 9 minutes, which is LESS than 900 seconds (15 minutes). Changed Example 2 into two examples: - Example 2a: 540s (9 min) → timeout does NOT eliminate Lambda - Example 2b: 1200s (20 min) → timeout DOES eliminate Lambda This teaches the correct eliminator logic instead of giving incorrect info. Updates REVIEWER_FEEDBACK.md to mark issue as RESOLVED. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(migration-to-aws): Remove misleading IaC generation message from execute phase Execute phase completion message promised IaC generation, but v1.0 scope explicitly states design/estimate only. No awsiac MCP server is configured. Changed final output message from: "Ready to generate IaC code. Say 'generate CDK code' or 'export Terraform'..." To: "Use this plan to guide your migration. All phases of the GCP-to-AWS migration analysis are complete." This aligns execute.md with SKILL.md v1.0 scope and removes false expectations. IaC generation is deferred to v1.1+. Updates REVIEWER_FEEDBACK.md to mark issue as RESOLVED. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(migration-to-aws): Automatically protect migration state from git commits Add automatic .gitignore creation to prevent accidental commits of .migration/ directory state files. Changes: - discover.md Step 0: Create .migration/.gitignore with content: * (ignore all) !.gitignore (except .gitignore itself) - Error handling: Check for .gitignore file existence - SKILL.md State Management: Document auto-protection feature - Updates REVIEWER_FEEDBACK.md to mark issue RESOLVED Users no longer need manual .gitignore configuration. Migration state files are automatically excluded from git across all phase invocations. Implements Option 2: Handle automatically (recommended approach). Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * refactor(migration-to-aws): Consolidate duplicate schemas into single source of truth Implement Option 1: Consolidate all schemas in output-schema.md as the authoritative source, removing duplicates from phase files. Changes: - clarify.md: Replace full clarified.json schema with reference to output-schema.md - discover-iac.md Step 6a: Replace gcp-resource-inventory.json schema with reference - discover-iac.md Step 6b: Replace gcp-resource-clusters.json schema with reference - Keep critical field names in phase files for quick reference during implementation Benefits: - Single source of truth: output-schema.md is now the only place to update schemas - Eliminates drift risk: No more duplicate definitions to keep in sync - Reduces duplication: Removed 50+ lines of redundant schema examples - Improved maintainability: Future schema changes in one place only Previous issue: gcp-resource-inventory.json schema was inconsistent between discover-iac.md and output-schema.md. Now resolved by consolidation. Updates REVIEWER_FEEDBACK.md to mark issue as RESOLVED. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * chore: Remove REVIEWER_FEEDBACK.md (internal tracking only) * fix: Correct markdown formatting for lint compliance Fix 3 markdown lint errors (MD032: lists need blank lines): - clarify.md: Add blank line before key fields list - output-schema.md: Add blank line before schema fields list - SKILL.md: Add blank line before phase status list Fix table formatting in README.md with dprint. All checks now pass: lint, formatting, manifests, cross-refs, security. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(migration-to-aws): Resolve 3 remaining reviewer issues 1. Fix depth calculation algorithm direction (depth-calculation.md) - Previous: Algorithm processed R's dependencies (backwards) - Fixed: Now correctly processes resources that depend on R - Result: Dependent resources get higher depths (deploy later) 2. Resolve google_compute_network classification contradiction - Previous: Listed as PRIMARY in classification-rules.md - But: Shown as SECONDARY in output-schema.md example - And: Clustering Rule 1 treats networks specially - Fixed: Move google_compute_network to SECONDARY / network_path - Reason: Networks are infrastructure, not workloads 3. Fix remaining cluster ID format inconsistency (design.md) - Previous: Still used old format "web-app-us-central1" - Fixed: Updated to new format "compute_instance_us-central1_001" - Aligns with: clustering-algorithm.md Rule 6 specification All reviewer feedback now fully addressed. Build passes all checks. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(migration-to-aws): Update plugin path in development instructions Fix plugin naming inconsistency in README.md development section. Changed: claude --plugin-dir ./plugins/gcp-to-aws To: claude --plugin-dir ./plugins/migration-to-aws This aligns with the plugin directory rename from gcp-to-aws to migration-to-aws, ensuring development instructions reflect the current directory structure. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix: Align install command order with plugin table Reorder plugin installation examples to match the order specified in the plugin table (deploy-on-aws, amazon-location-service, migration-to-aws). Previously the install commands were in a different order: - amazon-location-service - deploy-on-aws - migration-to-aws Now consistent with plugin table order: - deploy-on-aws - amazon-location-service - migration-to-aws This improves clarity and consistency for users reading the README. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * docs: Add migration-to-aws plugin team ownership to CODEOWNERS Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(migration-to-aws): Fix depth pseudocode direction and README scope claims 1. Fix depth-calculation.md pseudocode (Critical Issue #1) - Problem: Pseudocode used depends_on[R] (wrong direction) - Prose said 'resources that depend on R' but code did the opposite - Fix: Build dependents_of reverse adjacency structure - Now correctly processes resources that depend on R - Dependent resources get higher depths (deploy later) 2. Fix README.md v1.0 vs v1.1+ scope (Critical Issue awslabs#2) - Problem: Claimed 'IaC generation' as v1.0 feature - But SKILL.md line 110 says 'v1.0 is design/estimate only' - App code, billing data, IaC deferred to v1.1+ - Fix: Update plugin description to 'execution planning' - Update workflow steps: Discover, Clarify, Design, Estimate, Execute - Execute phase now correctly described as 'Plan migration timeline' Build: All linters, manifests, security scans pass ✓ Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(migration-to-aws): Resolve resource classification contradictions (Critical Issue awslabs#4) 1. Move google_project_service from PRIMARY to SECONDARY/orchestration - Problem: Listed as PRIMARY but clustering-algorithm.md Rule 5 says 'Classify as orchestration secondary, Do NOT create its own cluster' - Fix: Move to SECONDARY/orchestration with rationale - Reasoning: API enablement is prerequisite, not a deployable unit 2. Move google_monitoring_alert_policy from PRIMARY to SECONDARY/configuration - Problem: Listed as PRIMARY but fast-path.md Skip Mappings says 'google_monitoring_* do not require AWS equivalents in v1.0' - Fix: Move to SECONDARY/configuration - Reasoning: Monitoring is supporting infrastructure; fallback to CloudWatch Build: All linters, manifests, security scans pass ✓ Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * docs: Add migration-to-aws plugin to AGENTS.md (Critical Issue awslabs#5) Add migration-to-aws plugin documentation in three sections: 1. Directory Structure - Added migration-to-aws plugin entry with skills/gcp-to-aws structure - Maintains alphabetical ordering after amazon-location-service 2. MCP Servers Section - Added new '### migration-to-aws' subsection - Lists awsknowledge (HTTP) and awspricing (stdio) servers - Aligns with plugin's actual MCP configuration 3. TL;DR Pitch - Updated marketplace description to include migration-to-aws - Added brief description: 'GCP-to-AWS migration with resource discovery, architecture mapping, and cost analysis' - Now describes all three available plugins Build: All linters, manifests, security scans pass ✓ Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(migration-to-aws): Add pricing fallback transparency and retry logic (Critical Issue awslabs#6) 1. Add explicit retry logic to estimate.md - Specify 3 attempts (up to 2 retries) before fallback - Wait intervals: 1s after attempt 1, 2s after attempt 2 - Clear specification: success vs fallback paths 2. Add user-visible warning for fallback - When awspricing fails: Display 'AWS pricing API unavailable; using cached 2026 rates (±15-25% accuracy)' - Not silent; user sees accuracy degradation - Message included in estimation report 3. Add pricing_source field to estimation.json schema - Track: 'live' vs 'fallback' status - Per-service tracking: which services use live API vs fallback - Message explaining accuracy impact 4. Update SKILL.md error handling - Changed: 'awspricing timeout after 2 retries' - To: 'awspricing unavailable after 3 attempts' - Specified all actions: warning display, fallback use, schema updates Result: Full pricing source transparency + per-service accuracy tracking Build: All linters, manifests, security scans pass ✓ Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(migration-to-aws): Add architecture validation tracking (Critical Issue awslabs#7) 1. Add validation step to design.md (Step 3.5) - Check regional availability via awsknowledge - Verify feature parity with GCP services - Identify service constraints and gotchas - Graceful degradation if awsknowledge unavailable - Non-blocking: design proceeds either way 2. Add validation_status field to aws-design.json schema - Status: 'completed' | 'skipped' - Message: explains result (validation done or reason skipped) - Tracks which services were validated 3. Update SKILL.md MCP Servers section - Clarify awsknowledge role: regional availability, feature parity - Explain handling when unavailable - Mark validation as non-critical but important - Remove misleading 'non-critical' language 4. Add validation section to output schema - Track validation status and results - Include regional availability warnings - Document feature parity issues Result: Full visibility into validation status + informational warnings when skipped Build: All linters, manifests, security scans pass ✓ Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(migration-to-aws): Add pricing fallback staleness enforcement (Critical Issue awslabs#8) 1. Add staleness check to estimate.md Step 1 (Fallback Path) - Read last_updated from pricing-fallback.json metadata - Calculate days since update - If > 90 days: Warn user 'cached pricing data is >90 days old' - If ≤ 90 days: Note '±15-25% accuracy' - Display warning prominently in estimation report 2. Add handling for missing services in Step 3 - Check if service exists in fallback data - If NOT found: - Add to services_with_missing_fallback[] in estimation.json - Use conservative estimate or ask user - Mark pricing_source as 'estimated' (not 'fallback') - Add warning to report: 'Service X not in cached fallback data' 3. Enhance estimation.json schema with staleness tracking - Add fallback_staleness object: - last_updated: date from metadata - days_old: calculated age - is_stale: boolean flag (> 90 days) - staleness_warning: null or warning message - Expand services_by_source to include 'estimated' - Add services_with_missing_fallback[] array Result: Full fallback data staleness visibility + explicit handling for missing services Build: All linters, manifests, security scans pass ✓ Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(migration-to-aws): Fix 3 critical cost estimation issues (Important Issues #1, awslabs#2, awslabs#14) 1. Fix ROI arithmetic error (Issue #1) - Problem: 500 GB @ $0.02/GB = $10,000 (should be $10) - Files: output-schema.md, estimate.md - Impact: Cascading errors through cost calculations - Fixes: - Corrected data_transfer calculation to $10 - Updated one_time_costs total: 37500 → 27510 (schema), 32500 → 22510 (estimate) - Recalculated ROI: payback_months 37.5 → 27.51 (schema), 32.5 → 22.51 (estimate) - Recalculated 5-year savings: 22500 → 32490 (schema), 28500 → 37490 (estimate) 2. Fix SNS retention claim (Issue awslabs#2) - Problem: SNS doesn't support message retention; only SQS does - Files: messaging.md (example and schema) - Fixes: - Removed '7-day message retention' from SNS example (line 51) - Added note: 'If retention is critical, consider SQS instead' - Removed message_retention_period from aws_config (SNS doesn't support it) 3. Add structured GCP cost estimation (Issue awslabs#14) - Problem: 'estimate from inventory or ask user' has no structured method - File: estimate.md Step 4 (ROI calculation) - Fixes: - Priority 1: Use discovered inventory pricing - Priority 2: Use user-provided spend from clarified.json - Priority 3: Prompt user with specific question - Priority 4: Conservative default (AWS × 1.25) - Track source in assumptions Result: ROI calculations now accurate and deterministic Build: All linters, manifests, security scans pass ✓ Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix(migration-to-aws): Align 4 schema inconsistencies (Important Issues awslabs#3, awslabs#5, awslabs#6, awslabs#7) 1. Add missing edges field to gcp-resource-clusters.json (Issue awslabs#3) - Problem: output-schema.md example lacked edges array - But: discover-iac.md lists edges as CRITICAL field - And: clustering-algorithm.md includes edges in output - Fix: Added edges array with relationship types to output-schema.md - Fields: from, to, relationship_type 2. Align execution.json risks schema (Issue awslabs#5) - Problem: output-schema.md had 4 fields, execute.md had 3 - output-schema: category, probability, impact, mitigation - execute.md: category, probability, mitigation (missing impact) - Naming: 'data loss' vs 'data_loss' - Fix: Added impact field to execute.md - Fix: Aligned naming to use underscores (data_loss, performance_regression) - Added example with multiple risks 3. Align cluster ID naming format (Issue awslabs#6) - Problem: clustering-algorithm.md used 4-component format with region - But: discover-iac.md used 3-component format without region - clustering-algorithm: {service_category}_{service_type}_{gcp_region}_{sequence} - discover-iac: {type}_{subtype}_{sequence} - Fix: Updated discover-iac.md to use 4-component format - Now: compute_cloudrun_us-central1_001 (includes region) 4. Add missing fields to aws-design.json resource schema (Issue awslabs#7) - Problem: design.md example lacked gcp_config field - output-schema.md Design Resource Schema includes gcp_config - Fix: Added gcp_config with example values (machine_type, zone, boot_disk_size_gb) - Now: Full resource schema includes both GCP and AWS configuration Result: All JSON schemas now consistent across files Build: All linters, manifests, security scans pass ✓ Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * Fix 3 important workflow/logic issues (4, 8, 9) - Issue 4 (estimation.json inconsistency): Added missing "training" line item to one_time_costs in estimate.md. Updated total from $22,510 to $27,510, payback_months from 22.51 to 27.51, and five_year_savings from $37,490 to $32,490. Now matches output-schema.md example. - Issue 8 (Phase Summary Table incomplete): Updated SKILL.md Phase Summary Table to include all required outputs and inputs. Added estimation-report.md and execution-timeline.md to Estimate and Execute phase outputs. Added gcp-resource-clusters.json to Clarify phase inputs. - Issue 9 (Mode C/D fallback mismatch): Clarified Mode C/D fallback behavior in clarify.md Step 2. Added note: "If user selects Mode A or B but then declines to answer questions or provides incomplete answers, offer Mode C (use defaults) or Mode D (free-text description) as alternatives." Makes SKILL.md error handling consistent with clarify.md workflow. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * Fix 3 critical workflow/logic issues (10, 11, 12) - Issue 10 (Phase status file corruption unhandled): Added comprehensive error handling in SKILL.md Phase Routing for: invalid JSON in .phase-status.json, unrecognized phase values, unrecognized status values, and multiple .migration/*/ directories. Each error now outputs specific user-visible messages with remediation steps. - Issue 11 (Design phase catch-all for unknown GCP types): Added catch-all behavior in design.md Step 2 for GCP resource types not found in design-refs/index.md. Pattern-matching heuristics (e.g., "scheduler" -> orchestration) attempt categorization. If no match found, agent stops with clear error message asking user to file issue with resource type. - Issue 12 (Estimate phase missing aws-design.json validation): Added Step 0 (Validate Design Output) to estimate.md. Validates: file exists, valid JSON, clusters array not empty, each cluster has resources, each resource has aws_service and aws_config fields. All failures result in STOP with specific remediation guidance. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * Fix 2 final important issues (13, 15) - Issue 13 (Mode D free-text parsing no confirmation): Added explicit confirmation step in clarify.md Step 3. When user selects Mode D, agent now parses requirements, then presents extracted vs. default answers for user confirmation. If user declines, agent falls back to Mode A/B for explicit answers. Users now know which answers were inferred vs. defaulted. - Issue 15 (JSON formatting inconsistency): Reformatted plugin.json and .mcp.json to use expanded multi-line format consistent with other plugins (deploy-on-aws, amazon-location-service). Changed from single-line compact style to readable multi-line indentation. Now passes dprint fmt:check. All 15 important issues from PR awslabs#73 review are now addressed. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * Update plugins/migration-to-aws/skills/gcp-to-aws/references/shared/output-schema.md Co-authored-by: Scott Schreckengaust <scottschreckengaust@users.noreply.github.com> Signed-off-by: icarthick <93390344+icarthick@users.noreply.github.com> * Update plugins/migration-to-aws/skills/gcp-to-aws/references/shared/output-schema.md Co-authored-by: Scott Schreckengaust <scottschreckengaust@users.noreply.github.com> Signed-off-by: icarthick <93390344+icarthick@users.noreply.github.com> * Fix 6 review feedback items for migration-to-aws plugin - Fix cluster ID in design.md report template (web-app-us-central1 → deterministic format) - Fix misleading IaC default in SKILL.md (CDK TypeScript → None, v1.0 has no IaC output) - Add rubric_applied field to aws-design.json examples in design.md and output-schema.md - Remove stale "cdk" keyword from marketplace.json for migration-to-aws - Add marketplace install command to plugin README Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix stray diff artifact in output-schema.md and clarify network classification - Remove stray '+' character from aws-design.json example in output-schema.md - Add clarifying note that google_compute_network anchors the networking cluster Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix 4 review items: README scope, serves[] example, schema duplication, pipe notation - Align root README migration-to-aws description with actual v1.0 scope - Fix serves[] example to trace through SECONDARY to an actual PRIMARY resource - Remove duplicate clarified.json schema from clarify-questions.md, reference output-schema.md - Add convention note for pipe notation in output-schema.md JSON examples Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Update plugins/migration-to-aws/skills/gcp-to-aws/references/shared/output-schema.md Co-authored-by: Scott Schreckengaust <scottschreckengaust@users.noreply.github.com> Signed-off-by: icarthick <93390344+icarthick@users.noreply.github.com> * Fix 6 review items: table inputs, network cluster, JSON validity, edge field, depth trace, cluster naming 1. SKILL.md Phase Summary Table: Add clusters to Design inputs, change Execute inputs from clarified to estimation 2. output-schema.md: Move google_compute_network to its own network_vpc cluster per clustering Rule 1 3. output-schema.md: Replace invalid space-padded pipe notation (null | "string") with valid JSON null 4. clustering-algorithm.md: Change edge "type" to "relationship_type" matching output-schema.md and discover-iac.md 5. depth-calculation.md: Fix queue trace step 3 — D has in_degree=1 after processing B, not 0; D enqueued in step 4 after C 6. clustering-algorithm.md: Align Rule 1 cluster ID with Rule 6 format (network_vpc_{region}_{sequence}) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix 3 review items: network classification, estimation numbers, edge type 1. classification-rules.md: Move google_compute_network from SECONDARY network_path to PRIMARY list, matching output-schema.md and clustering Rule 1 (network anchors its own cluster as PRIMARY) 2. estimate.md: Align report example with JSON example — data transfer $10 (not $10,000), total $27,510 (not $32,500), payback 27.5 months (not 32.5), 5-year savings $32,490 (not $28,500) 3. output-schema.md: Change network_membership back to network_path — network_membership is not defined in typed-edges-strategy.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add input validation to discover, clarify, and execute phases CRITICAL-2: discover.md Step 2 now STOPs when no .tf files are found instead of silently completing with zero output files. CRITICAL-3: clarify.md gains Step 0 input validation matching estimate.md rigor — checks for missing files, invalid JSON, and empty arrays. CRITICAL-4: execute.md Step 1 replaces vague "incomplete" check with structural validation — verifies non-empty clusters, required fields on each resource, non-zero cost totals, and all expected sections. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix 4 critical issues from PR awslabs#73 review CRITICAL-1: DynamoDB example label said "100k writes, 1m reads" but costs matched 100M writes and 1B reads. Fixed label to match actual arithmetic and added calculation note. CRITICAL-2: Cluster schema in clustering-algorithm.md had 6 fields (name, type, description, network, must_migrate_together, dependencies) missing from canonical output-schema.md. Added all 6 to the schema example. CRITICAL-3: classification-rules.md listed google_firestore_database as PRIMARY but index.md/database.md expected google_firestore_document. Both are valid Terraform types — added both to classification-rules.md and index.md so neither falls through. CRITICAL-4: RDS pricing labeled "Multi-AZ" but values were Single-AZ rates. Corrected label to "Single-AZ" with note about Multi-AZ doubling. Also fixed: classification-rules.md Serves[] example incorrectly called google_compute_network SECONDARY when it is PRIMARY (Priority 1 list). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix remaining critical and high issues from PR awslabs#73 review - Fix Lambda pricing math: compute_cost 0.083→8.33, total 0.283→8.53 - Add google_redis_instance to fast-path.md and index.md (ElastiCache Redis) - Add pricing_source + timestamp to estimate.md inline example - Add clarified.json validation to estimate.md Step 0 - Add gcp-resource-inventory.json validation to design.md Step 0 - Add validation_status + timestamp to design.md Step 4 inline example - Add gcp_config to output-schema.md aws-design.json resource example - Fix execute.md gcp_teardown string → gcp_teardown_week integer + timestamp - Fix messaging.md: SNS FIFO supports exactly-once via deduplication Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix critical and high issues from PR awslabs#73 review round 2 CRITICAL fixes: - Fix DynamoDB eliminator: strong consistency IS supported, change to 100-item transaction limit - Add 3 missing PRIMARY resources to classification-rules.md: google_app_engine_application, google_cloud_tasks_queue, google_compute_forwarding_rule - Fix confidence value in design.md: google_compute_instance is not in fast-path.md, so confidence is "inferred" not "deterministic" - Fix Fargate common_sizes to match unit rate calculations - Add JSON validity + array content checks to design.md Step 0 HIGH fixes: - Fix execute.md hardcoded payback period, use placeholder from estimation - Add NAT Gateway line to estimate.md markdown report template - Fix messaging.md Signals: exactly-once → SNS FIFO + SQS FIFO - Fix Fargate eliminator: 10 GB is not a limit, use GPU/vCPU/memory limits - Add Redis section to database.md rubric coverage - Add db.t4g family to pricing-fallback.json (matches SKILL.md default) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix critical and high issues from PR awslabs#73 review round 3 CRITICAL fixes: - Fix simple_web_app total: 113.69 → 115.59 (sum of components) - Fix S3 Standard storage math: use 1024 GB consistently (23.55, not 23.04) - Fix ai_chatbot note: "1M reads" → "1B reads" (matches $250 cost) - Add config + dependencies to discover-iac.md Step 6a CRITICAL fields - Add 6 missing fields to discover-iac.md Step 6b CRITICAL fields - Fix BigQuery eliminator: Athena is OLAP not OLTP, recommend DynamoDB/Aurora - Add Bedrock, SQS, SNS, EventBridge, ElastiCache Redis pricing to fallback HIGH fixes: - Fix index.md usage: clarify fast-path.md lookup vs rubric routing - Fix SKILL.md default: Aurora Serverless v2 0.5 ACU (matches design refs) - Fix cloud_run equivalence: use compute.md rubric criteria, not memory - Move Redis signals from Examples section to Signals section in database.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix all remaining issues from PR awslabs#73 external review - IMP-1: Standardize edge_type → relationship_type in typed-edges-strategy.md and discover-iac.md - IMP-3: Acknowledge LLM non-determinism in clustering-algorithm.md determinism guarantee - IMP-7: Add prominent user-facing warning when awsknowledge MCP unavailable in design.md - IMP-8: Add fallback pricing for EKS, ECS, VPC, Route 53, CloudFront, Redshift, Athena, SageMaker - IMP-9: Replace fabricated GCP cost (AWS*1.25) with cannot_calculate status in estimate.md ROI - IMP-10: Clarify pipe-separated convention note in output-schema.md - MED-1: Tiered staleness thresholds (≤30d, 30-60d, >60d) in estimate.md fallback path - MED-2/MED-4: Add version, empty file, and missing field validation to SKILL.md phase routing - MED-3: Bound cycle detection to max 3 attempts, only break inferred edges in depth-calculation.md - MED-5: Display phase-status.json contents when multiple migration sessions detected in SKILL.md - MED-6: Unknown resource types add to warnings instead of STOP in design.md - MED-8: Add low-confidence classification downstream flagging in classification-rules.md - Comment-13: Add non-null staleness_warning example to output-schema.md - XREF-1: Clarify unify-resources.md is planned v1.1+ in discover-app-code.md and discover-billing.md - XREF-2: Align regex pattern in discover-iac.md with typed-edges-strategy.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix dprint table formatting in database and messaging design refs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Update plugin.json's description to include the correct description * Update plugin.json's description to be under 500 chars * Update migration description in marketplace.json --------- Signed-off-by: icarthick <93390344+icarthick@users.noreply.github.com> Signed-off-by: Alain Krok <alkrok@amazon.com> Co-authored-by: Karthik <your.email@example.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: Alain Krok <alkrok@amazon.com> Co-authored-by: Scott Schreckengaust <scottschreckengaust@users.noreply.github.com>
1 parent d97a4b2 commit c51ed0d

31 files changed

Lines changed: 3772 additions & 7 deletions

.claude-plugin/marketplace.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,25 @@
4848
"tags": ["aws", "location", "maps", "geospatial"],
4949
"version": "1.0.0"
5050
},
51+
{
52+
"category": "migration",
53+
"description": "This no-cost tool assesses your current cloud provider's usage, geography, and billing data to estimate and compare AWS services and pricing, and recommends migration or continued use of your current provider. AWS pricing is based on current published pricing and may vary over time. The tool may generate a .migration folder containing comparison and migration execution data, which you may delete upon completion or use to migrate to AWS.",
54+
"keywords": [
55+
"aws",
56+
"gcp",
57+
"google-cloud",
58+
"migration",
59+
"cloud-migration",
60+
"terraform",
61+
"fargate",
62+
"rds",
63+
"eks"
64+
],
65+
"name": "migration-to-aws",
66+
"source": "./plugins/migration-to-aws",
67+
"tags": ["aws", "gcp", "migration", "infrastructure"],
68+
"version": "1.0.0"
69+
},
5170
{
5271
"category": "development",
5372
"description": "Design, build, deploy, test, and debug serverless applications with AWS Serverless services.",

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ tools/ @awslabs/agent-plugins-admins
3333
plugins/amazon-location-service @awslabs/agent-plugins-admins @awslabs/agent-plugins-maintainers @awslabs/agent-plugins-agent-plugins-amazon-location-service
3434
plugins/aws-serverless @awslabs/agent-plugins-admins @awslabs/agent-plugins-maintainers @awslabs/agent-plugins-aws-serverless
3535
plugins/deploy-on-aws @awslabs/agent-plugins-admins @awslabs/agent-plugins-maintainers @awslabs/agent-plugins-deploy-on-aws
36+
plugins/migration-to-aws @awslabs/agent-plugins-admins @awslabs/agent-plugins-maintainers @awslabs/agent-plugins-migrate-to-aws
3637

3738
## File must end with CODEOWNERS file
3839

AGENTS.md

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
55
## TL;DR Pitch
66

7-
This repository supports **plugins** - bundles of skills, MCP servers, and agent configurations that extend capabilities. The `awslabs/agent-plugins` marketplace includes plugins like `deploy-on-aws` (architecture recommendations, cost estimates, and working IaC) and `amazon-location-service` (maps, geocoding, routing, and geospatial features).
7+
This repository supports **plugins** - bundles of skills, MCP servers, and agent configurations that extend capabilities. The `awslabs/agent-plugins` marketplace includes plugins like `deploy-on-aws` (architecture recommendations, cost estimates, and working IaC), `amazon-location-service` (maps, geocoding, routing, and geospatial features), and `migration-to-aws` (GCP-to-AWS migration with resource discovery, architecture mapping, and cost analysis).
88

99
## Core Concepts
1010

@@ -48,14 +48,22 @@ agent-plugins/
4848
│ │ ├── defaults.md
4949
│ │ ├── cost-estimation.md
5050
│ │ └── security.md
51-
── amazon-location-service/
51+
── amazon-location-service/
5252
│ ├── .claude-plugin/
5353
│ │ └── plugin.json
5454
│ ├── .mcp.json
5555
│ └── skills/
5656
│ └── amazon-location-service/
5757
│ ├── SKILL.md
5858
│ └── references/
59+
│ └── migration-to-aws/
60+
│ ├── .claude-plugin/
61+
│ │ └── plugin.json
62+
│ ├── .mcp.json
63+
│ └── skills/
64+
│ └── gcp-to-aws/
65+
│ ├── SKILL.md
66+
│ └── references/
5967
├── schemas/ # JSON schemas for manifests
6068
│ ├── marketplace.schema.json
6169
│ ├── plugin.schema.json
@@ -87,6 +95,13 @@ agent-plugins/
8795
| --------- | ----- | -------------------------------------- |
8896
| `aws-mcp` | stdio | AWS documentation and service guidance |
8997

98+
### migration-to-aws
99+
100+
| Server | Type | Purpose |
101+
| -------------- | ----- | ----------------------------------------------- |
102+
| `awsknowledge` | HTTP | AWS documentation and architecture guidance |
103+
| `awspricing` | stdio | Real-time AWS service pricing for cost analysis |
104+
90105
## Workflow: Deploy Skill
91106

92107
1. **Analyze** - Scan codebase for framework, database, dependencies

README.md

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@ To maximize the benefits of plugin-assisted development while maintaining securi
2626

2727
## Plugins
2828

29-
| Plugin | Description | Status |
30-
| --------------------------- | ----------------------------------------------------------------------------------------------------------------- | --------- |
31-
| **deploy-on-aws** | Deploy applications to AWS with architecture recommendations, cost estimates, and IaC deployment | Available |
32-
| **amazon-location-service** | Add maps, geocoding, routing, places search, and geospatial features to applications with Amazon Location Service | Available |
33-
| **aws-serverless** | Build serverless applications with Lambda, API Gateway, EventBridge, Step Functions, and durable functions | Available |
29+
| Plugin | Description | Status |
30+
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------- | --------- |
31+
| **deploy-on-aws** | Deploy applications to AWS with architecture recommendations, cost estimates, and IaC deployment | Available |
32+
| **amazon-location-service** | Add maps, geocoding, routing, places search, and geospatial features to applications with Amazon Location Service | Available |
33+
| **migration-to-aws** | Migrate GCP infrastructure to AWS with resource discovery, architecture mapping, cost analysis, and execution planning | Available |
34+
| **aws-serverless** | Build serverless applications with Lambda, API Gateway, EventBridge, Step Functions, and durable functions | Available |
3435

3536
## Installation
3637

@@ -54,6 +55,12 @@ or
5455
/plugin install amazon-location-service@agent-plugins-for-aws
5556
```
5657

58+
or
59+
60+
```bash
61+
/plugin install migration-to-aws@agent-plugins-for-aws
62+
```
63+
5764
### Cursor
5865

5966
You can install the **deploy-on-aws** plugin from the [Cursor Marketplace](https://cursor.com/marketplace/aws). For additional information, please refer to the [Cursor plugin documentation](https://cursor.com/docs/plugins). You can also install within the Cursor application:
@@ -107,6 +114,31 @@ Guides developers through adding maps, places search, geocoding, routing, and ot
107114
| ----------- | -------------------------------------- |
108115
| **aws-mcp** | AWS documentation and service guidance |
109116

117+
## migration-to-aws
118+
119+
Helps you systematically migrate GCP infrastructure to AWS through Terraform resource discovery, architecture mapping, cost estimation, and execution planning.
120+
121+
### Workflow
122+
123+
1. **Discover** - Scan Terraform files for GCP resources and extract infrastructure
124+
2. **Clarify** - Understand compute workloads and architecture patterns
125+
3. **Design** - Map GCP services to AWS equivalents with rationale
126+
4. **Estimate** - Calculate monthly AWS costs and compare to GCP
127+
5. **Execute** - Plan migration timeline and identify deployment risks
128+
129+
### Agent Skill Triggers
130+
131+
| Agent Skill | Triggers |
132+
| -------------- | ------------------------------------------------------------------------------------------------------------------ |
133+
| **gcp-to-aws** | "migrate GCP to AWS", "move from GCP", "GCP migration plan", "estimate AWS costs", "GCP infrastructure assessment" |
134+
135+
### MCP Servers
136+
137+
| Server | Purpose |
138+
| ---------------- | ------------------------------------------------ |
139+
| **awsknowledge** | AWS documentation, architecture guidance |
140+
| **awspricing** | Real-time AWS service pricing for cost estimates |
141+
110142
## Requirements
111143

112144
- Claude Code >=2.1.29 or [Cursor >= 2.5](https://cursor.com/changelog/2-5)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"author": {
3+
"name": "Amazon Web Services"
4+
},
5+
"description": "This no-cost tool assesses your current cloud provider's usage, geography, and billing data to estimate and compare AWS services and pricing, and recommends migration or continued use of your current provider. AWS pricing is based on current published pricing and may vary over time. The tool may generate a .migration folder containing comparison and migration execution data, which you may delete upon completion or use to migrate to AWS.",
6+
"homepage": "https://github.com/awslabs/agent-plugins",
7+
"keywords": [
8+
"aws",
9+
"gcp",
10+
"google-cloud",
11+
"migration",
12+
"cloud-migration",
13+
"terraform",
14+
"fargate"
15+
],
16+
"license": "Apache-2.0",
17+
"name": "migration-to-aws",
18+
"repository": "https://github.com/awslabs/agent-plugins",
19+
"version": "1.0.0"
20+
}

plugins/migration-to-aws/.mcp.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"mcpServers": {
3+
"awsknowledge": {
4+
"type": "http",
5+
"url": "https://knowledge-mcp.global.api.aws"
6+
},
7+
"awspricing": {
8+
"args": [
9+
"awslabs.aws-pricing-mcp-server@latest"
10+
],
11+
"command": "uvx",
12+
"env": {
13+
"FASTMCP_LOG_LEVEL": "ERROR"
14+
},
15+
"timeout": 120000,
16+
"type": "stdio"
17+
}
18+
}
19+
}

plugins/migration-to-aws/README.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# GCP-to-AWS Migration Plugin
2+
3+
Migrate workloads from Google Cloud Platform to AWS with a 5-phase guided process.
4+
5+
## Overview
6+
7+
This plugin guides you through migrating GCP infrastructure to AWS by:
8+
9+
1. **Discover** - Scan Terraform files for GCP resources
10+
2. **Clarify** - Answer 8 questions about your migration requirements
11+
3. **Design** - Map GCP services to equivalent AWS services
12+
4. **Estimate** - Calculate monthly costs and ROI
13+
5. **Execute** - Plan your migration timeline and rollback procedures
14+
15+
## Usage
16+
17+
Invoke the skill with migration-related phrases:
18+
19+
- "Migrate my GCP infrastructure to AWS"
20+
- "Move off Google Cloud"
21+
- "Migrate Cloud SQL to RDS"
22+
- "GCP to AWS migration plan"
23+
24+
## Scope (v1.0)
25+
26+
- **Supports**: Terraform-based GCP infrastructure
27+
- **Generates**: AWS architecture design, cost estimates, execution timeline
28+
- **Does not include** (v1.1+): App code scanning, billing data import, CDK code generation
29+
30+
## MCP Servers
31+
32+
The plugin integrates with:
33+
34+
- **awspricing** - Real-time AWS pricing (with fallback to cached data)
35+
- **awsknowledge** - AWS service guidance and best practices
36+
37+
## Files
38+
39+
- `SKILL.md` - Main skill orchestrator
40+
- `references/phases/` - Workflow phase implementations
41+
- `references/design-refs/` - AWS service mapping rubrics
42+
- `references/shared/` - Shared utilities and pricing data
43+
44+
## Architecture
45+
46+
The plugin uses state files (`.migration/[MMDD-HHMM]/`) to track migration progress across invocations:
47+
48+
- `.phase-status.json` - Current phase and status
49+
- `gcp-resource-inventory.json` - Discovered GCP resources
50+
- `clarified.json` - User requirements
51+
- `aws-design.json` - Mapped AWS services
52+
- `estimation.json` - Cost analysis
53+
- `execution.json` - Timeline and risks
54+
55+
## Installation
56+
57+
```bash
58+
/plugin marketplace add awslabs/agent-plugins
59+
/plugin install migration-to-aws@agent-plugins-for-aws
60+
```
61+
62+
## Development
63+
64+
To test locally:
65+
66+
```bash
67+
claude --plugin-dir ./plugins/migration-to-aws
68+
```
69+
70+
## License
71+
72+
Apache-2.0

0 commit comments

Comments
 (0)