Loading...
Loading...
Migrate workloads from Heroku to AWS. Triggers on: migrate from Heroku, Heroku to AWS, move off Heroku, migrate Heroku app, migrate Heroku Postgres to RDS, migrate Heroku Redis to ElastiCache, migrate Heroku Kafka to MSK, migrate dynos to Elastic Beanstalk, migrate dynos to Fargate, Heroku migration, move from Heroku to AWS, migrate Heroku Private Space, Heroku to Elastic Beanstalk, Heroku to ECS, Heroku to Fargate, leave Heroku, migrate off Heroku platform, what-if workshop, reprice Heroku migration, compare migration scenarios, workshop mode. Runs a 6-phase process: discover Heroku resources live via the authenticated Heroku CLI (read-only, consent-gated) and/or from Terraform files, Procfile/app.json, and optional billing exports, clarify migration requirements, design AWS architecture, estimate costs, generate migration artifacts, and collect optional feedback. After Estimate, an optional what-if workshop can reprice region/HA/compute/Graviton scenarios without re-discovery. Clarify must finish before Design, Estimate, or Generate. Uses a flat resource model (no clustering or dependency graphs) with deterministic mapping tables for core services (Dynos → Elastic Beanstalk by default, Postgres → RDS/Aurora, Redis → ElastiCache, Kafka → MSK) and a fast-path table for 13+ common add-ons. Cedar/Fir generation detection is detect-only in v1. Pipeline/Review Apps are detect-only. Do not use for: GCP or Azure migrations to AWS, AWS-to-Heroku reverse migration, general AWS architecture advice without migration intent, Heroku-to-Heroku refactoring, or multi-cloud deployments that do not involve migrating off Heroku.
npx skill4agent add awslabs/startups heroku-to-awsheroku_*.tfheroku_*references/phases/workshop/workshop.md$MIGRATION_DIR.migration/.migration/0315-1030/references/vendored/dsl/INTERPRETER.mdINTERPRETER.mddesign.mdgenerate.md_trigger_knowledge_whenINTERPRETER.md.phase-status.json_preconditions_assemble_postconditionsHANDOFF_OK_advances_toINTERPRETER.md.migration/.phase-status.jsonreferences/phases/discover/discover.md_init: true_advances_tocurrent_phase.phase-status.jsonINTERPRETER.mdworkshoppreferences.json$MIGRATION_DIR.migration/[MMDD-HHMM]/.phase-status.jsonreferences/vendored/state/phase-status.schema.jsonINTERPRETER.md.migration/.gitignoreget_pricingget_pricing_service_codesget_pricing_service_attributesreferences/vendored/pricing/aws-infra-pricing.jsonheroku-to-aws/
├── SKILL.md ← You are here (skill entry point)
│
├── references/
│ ├── phases/
│ │ ├── discover/
│ │ │ ├── discover.md # Phase 1: Discover orchestrator
│ │ │ ├── discover-terraform.md # Terraform discovery
│ │ │ ├── discover-live-capture.md # Live CLI capture (main-window pre-work, consent-gated)
│ │ │ ├── discover-live.md # Live discovery fragment (parses live-capture/)
│ │ │ └── discover-billing.md # Billing data parsing
│ │ ├── clarify/
│ │ │ └── clarify.md # Phase 2: Adaptive questions (12–15, batched ≤5)
│ │ ├── design/
│ │ │ └── design.md # Phase 3: Design orchestrator (flat single-pass mapping)
│ │ ├── estimate/
│ │ │ └── estimate.md # Phase 4: Cost projection
│ │ ├── workshop/
│ │ │ ├── workshop.md # Sidebar: optional post-Estimate what-if
│ │ │ ├── workshop-sheet.md # Assumption sheet knobs
│ │ │ ├── workshop-refresh.md # Patch prefs → Design → Estimate → snapshot
│ │ │ ├── workshop-compare.md # Side-by-side scenarios
│ │ │ └── workshop-assemble.md # Resolve sidebar → return to Generate
│ │ ├── generate/
│ │ │ ├── generate.md # Phase 5: Generate orchestrator
│ │ │ ├── generate-terraform.md # Terraform configurations
│ │ │ ├── generate-docs.md # MIGRATION_GUIDE.md + README.md
│ │ │ ├── generate-report.md # migration-report.html (stakeholder + scenarios)
│ │ │ └── generate-eks.md # EKS manifests when design has EKS
│ │ └── feedback/
│ │ └── feedback.md # Phase 6: Feedback collection (reuses shared)
│ │
│ └── shared/ # heroku-to-aws's own shared references
│ ├── README.md # what lives here + pointers to plugin-neutral shared data
│ ├── heroku-pricing-cache.md # Heroku plan pricing (source-side baseline)
│ ├── schema-discover-heroku.md # heroku-resource-inventory.json schema
│ └── schema-workshop-scenarios.md # scenarios/ + preferences.workshop contract
│
├── knowledge/design/ # design lookup DATA (pure data, referenced by
│ │ # design.md _knowledge, gated per _when)
│ ├── dyno-eb-sizing.json # Dyno type → Elastic Beanstalk EC2 instance type
│ ├── dyno-fargate-sizing.json # Dyno type → Fargate CPU/memory
│ ├── eks-pod-sizing.json # Dyno type → EKS pod sizing + node selection
│ ├── postgres-rds-sizing.json # Postgres plan → RDS/Aurora sizing
│ ├── redis-elasticache-sizing.json # Redis plan → ElastiCache sizing
│ ├── kafka-msk-sizing.json # Kafka plan → MSK sizing
│ └── fast-path-addons.json # Add-on → AWS deterministic mappings (13+ entries)| Condition | Action |
|---|---|
| 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 ±5-10% accuracy. Use |
| User skips questions or says "use defaults for the rest" | Apply documented defaults for remaining questions. Phase 2 completes either way. |
| Dyno type not in selected compute sizing table | Reject mapping for that formation. Output: "Unsupported dyno type: {type}. Cannot map to target compute service." |
| Add-on not in Fast-Path Table | Mark as "Deferred — specialist engagement". No automated mapping produced. |
us-east-1db.t4g.microreferences/vendored/estimate/complexity-tiers.jsonINTERPRETER.mdworkshopfeedback_kind: sidebarcurrent_phasePlan-share links are GATED OFF. The share landing page () is not yet live (404). Do NOT offer, generate, or present a share link at any sidebar. The share-link spec is preserved inhttps://aws.amazon.com/startups/migrate/connectStep 3 (itself gated) for when the page ships; restoring the share prompts here is the un-gating change.references/phases/feedback/feedback-collect.md
estimate-assemble.mdcurrent_phase: estimateworkshop-assemble.mdreferences/phases/workshop/workshop.mdphases.feedback"pending"Would you like to share quick feedback? (5 optional questions +
anonymized usage data — never resource names, file paths, or
account IDs)
[A] Yes, share feedback
[B] No thanks, continue to Generatereferences/phases/feedback/feedback.mdphases.feedback"completed"phases.feedback"completed"current_phase == "estimate"phases.estimate == "completed"phases.workshop"pending""in_progress""pending"estimate-assemble.md"in_progress"references/phases/workshop/workshop.mdphases.workshop == "completed"references/phases/workshop/workshop.md_re_entry_guardphases.feedback"pending""completed"