Skip to content

Gap-9: Container Apps Migrate (F → A) — ECS/Fargate + Cloud Run migration guides#1634

Closed
paulyuk wants to merge 3 commits into
mainfrom
pass-equity-gap-9
Closed

Gap-9: Container Apps Migrate (F → A) — ECS/Fargate + Cloud Run migration guides#1634
paulyuk wants to merge 3 commits into
mainfrom
pass-equity-gap-9

Conversation

@paulyuk

@paulyuk paulyuk commented Apr 1, 2026

Copy link
Copy Markdown
Member

Closes #1617 | Parent: #1608 | ⚠️ Depends on #1633 (Gap-8) for SKILL.md trigger changes

5 migration reference files for Container Apps. Adds ECS/Fargate→Container Apps and Cloud Run→Container Apps guides with service mapping tables, assessment templates, and code migration guidance.

Starting assessment — domain experts should review.

…p-9)

Add cross-cloud migration support for Container Apps:
- ecs-to-container-apps.md — AWS ECS/Fargate migration
- cloud-run-to-container-apps.md — GCP Cloud Run migration
- assessment.md — Container-specific assessment template
- code-migration.md — Dockerfile optimization, YAML conversion
- global-rules.md — Container migration rules

Closes #1617
Parent: #1608

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@paulyuk
paulyuk requested a review from saikoumudi as a code owner April 1, 2026 17:36
Copilot AI review requested due to automatic review settings April 1, 2026 17:36

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds migration reference documentation for moving container workloads from AWS ECS/Fargate and GCP Cloud Run to Azure Container Apps, plus general rules and phased guidance (assessment + code migration).

Changes:

  • Added global migration rules for Container Apps, including confirmation and identity-first guidance.
  • Added AWS ECS/Fargate → Container Apps and GCP Cloud Run → Container Apps migration guides with mapping tables and example manifests.
  • Added assessment and code-migration phase references, including report templates and Dockerfile/YAML patterns.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
plugin/skills/azure-cloud-migrate/references/services/container-apps/global-rules.md Defines cross-phase rules (confirmation policy, identity-first auth, ACA specifics, output directory).
plugin/skills/azure-cloud-migrate/references/services/container-apps/ecs-to-container-apps.md ECS/Fargate to Container Apps service/resource mapping plus YAML and operational guidance.
plugin/skills/azure-cloud-migrate/references/services/container-apps/code-migration.md Code/config migration phase steps, Dockerfile optimization guidance, and YAML patterns.
plugin/skills/azure-cloud-migrate/references/services/container-apps/cloud-run-to-container-apps.md Cloud Run to Container Apps mapping, YAML examples, jobs mapping, and key differences.
plugin/skills/azure-cloud-migrate/references/services/container-apps/assessment.md Assessment phase checklist and a fixed-format assessment report template.

@github-actions

github-actions Bot commented Apr 1, 2026

Copy link
Copy Markdown
Contributor
Details# 🔍 Token Analysis Report

@github-copilot-for-azure/scripts@1.0.0 tokens
node --import tsx src/tokens/cli.ts compare --base origin/main --head HEAD --markdown

fatal: path 'plugin/skills/azure-cloud-migrate/references/services/container-apps/assessment.md' exists on disk, but not in 'origin/main'
fatal: path 'plugin/skills/azure-cloud-migrate/references/services/container-apps/cloud-run-to-container-apps.md' exists on disk, but not in 'origin/main'
fatal: path 'plugin/skills/azure-cloud-migrate/references/services/container-apps/code-migration.md' exists on disk, but not in 'origin/main'
fatal: path 'plugin/skills/azure-cloud-migrate/references/services/container-apps/ecs-to-container-apps.md' exists on disk, but not in 'origin/main'
fatal: path 'plugin/skills/azure-cloud-migrate/references/services/container-apps/global-rules.md' exists on disk, but not in 'origin/main'

📊 Token Change Report

Comparing origin/mainHEAD

Summary

Metric Value
📈 Total Change +7,526 tokens (+694%)
Before 1,085 tokens
After 8,611 tokens
Files Changed 6

Changed Files

File Before After Change
plugin/skills/azure-cloud-migrate/references/services/container-apps/cloud-run-to-container-apps.md - 1,927 +1927
plugin/skills/azure-cloud-migrate/references/services/container-apps/ecs-to-container-apps.md - 1,839 +1839
plugin/skills/azure-cloud-migrate/references/services/container-apps/assessment.md - 1,419 +1419
plugin/skills/azure-cloud-migrate/references/services/container-apps/code-migration.md - 1,400 +1400
plugin/skills/azure-cloud-migrate/references/services/container-apps/global-rules.md - 755 +755
plugin/skills/azure-cloud-migrate/SKILL.md 1,085 1,271 +186 (+17%)

@github-copilot-for-azure/scripts@1.0.0 tokens
node --import tsx src/tokens/cli.ts check --markdown

📊 Token Limit Check Report

Checked: 736 files
Exceeded: 105 files

⚠️ Files Exceeding Token Limits

File Tokens Limit Over By
.github/skills/analyze-skill-issues/SKILL.md 2109 500 +1609
.github/skills/analyze-test-run/SKILL.md 2471 500 +1971
.github/skills/file-test-bug/SKILL.md 628 500 +128
.github/skills/sensei/README.md 3531 2000 +1531
.github/skills/sensei/SKILL.md 3026 500 +2526
.github/skills/sensei/references/EXAMPLES.md 3701 2000 +1701
.github/skills/sensei/references/LOOP.md 4169 2000 +2169
.github/skills/sensei/references/SCORING.md 4299 2000 +2299
.github/skills/skill-authoring/SKILL.md 839 500 +339
.github/skills/vally-eval/SKILL.md 1764 500 +1264
plugin/skills/airunway-aks-setup/SKILL.md 1025 500 +525
plugin/skills/appinsights-instrumentation/SKILL.md 937 500 +437
plugin/skills/azure-ai/SKILL.md 820 500 +320
plugin/skills/azure-aigateway/SKILL.md 1261 500 +761
plugin/skills/azure-aigateway/references/policies.md 2342 2000 +342
plugin/skills/azure-cloud-migrate/SKILL.md 1271 500 +771
plugin/skills/azure-cloud-migrate/references/services/container-apps/cloudrun-deployment-guide.md 2029 2000 +29
plugin/skills/azure-cloud-migrate/references/services/container-apps/deployment-guide.md 2458 2000 +458
plugin/skills/azure-cloud-migrate/references/services/container-apps/fargate-deployment-guide.md 2587 2000 +587
plugin/skills/azure-cloud-migrate/references/services/container-apps/spring-deployment-guide.md 3871 2000 +1871
plugin/skills/azure-cloud-migrate/references/services/functions/lambda-to-functions.md 2600 2000 +600
plugin/skills/azure-cloud-migrate/references/services/functions/runtimes/javascript.md 2181 2000 +181
plugin/skills/azure-compliance/SKILL.md 1188 500 +688
plugin/skills/azure-compute/SKILL.md 821 500 +321
plugin/skills/azure-compute/workflows/essential-machine-management/references/emm-enable-flow.md 2344 2000 +344
plugin/skills/azure-compute/workflows/vm-troubleshooter/vm-troubleshooter.md 2509 2000 +509
plugin/skills/azure-deploy/SKILL.md 1645 500 +1145
plugin/skills/azure-deploy/references/pre-deploy-checklist.md 4692 2000 +2692
plugin/skills/azure-deploy/references/recipes/azd/errors.md 4004 2000 +2004
plugin/skills/azure-deploy/references/troubleshooting.md 2038 2000 +38
plugin/skills/azure-diagnostics/SKILL.md 1423 500 +923
plugin/skills/azure-enterprise-infra-planner/SKILL.md 911 500 +411
plugin/skills/azure-enterprise-infra-planner/references/constraints/compute-apps.md 2022 2000 +22
plugin/skills/azure-hosted-copilot-sdk/SKILL.md 1332 500 +832
plugin/skills/azure-kubernetes/SKILL.md 2634 500 +2134
plugin/skills/azure-kubernetes/azure-kubernetes-automatic-readiness/SKILL.md 3690 500 +3190
plugin/skills/azure-kusto/SKILL.md 2152 500 +1652
plugin/skills/azure-messaging/SKILL.md 821 500 +321
plugin/skills/azure-prepare/SKILL.md 3333 500 +2833
plugin/skills/azure-prepare/references/aspire.md 4617 2000 +2617
plugin/skills/azure-prepare/references/plan-template.md 2560 2000 +560
plugin/skills/azure-prepare/references/recipes/azd/aspire.md 2275 2000 +275
plugin/skills/azure-prepare/references/recipes/azd/terraform.md 3555 2000 +1555
plugin/skills/azure-prepare/references/research.md 2274 2000 +274
plugin/skills/azure-prepare/references/resources-limits-quotas.md 3322 2000 +1322
plugin/skills/azure-prepare/references/security.md 2147 2000 +147
plugin/skills/azure-prepare/references/services/functions/bicep.md 3043 2000 +1043
plugin/skills/azure-prepare/references/services/functions/templates/recipes/composition.md 2813 2000 +813
plugin/skills/azure-prepare/references/services/functions/terraform.md 3404 2000 +1404
plugin/skills/azure-quotas/SKILL.md 3006 500 +2506
plugin/skills/azure-quotas/references/commands.md 2644 2000 +644
plugin/skills/azure-reliability/SKILL.md 5922 500 +5422
plugin/skills/azure-reliability/references/configure-multi-region.md 4729 2000 +2729
plugin/skills/azure-reliability/references/services/app-service/reliability.md 2591 2000 +591
plugin/skills/azure-resource-lookup/SKILL.md 1367 500 +867
plugin/skills/azure-resource-visualizer/SKILL.md 2122 500 +1622
plugin/skills/azure-storage/SKILL.md 1228 500 +728
plugin/skills/azure-upgrade/SKILL.md 1542 500 +1042
plugin/skills/azure-upgrade/references/languages/java/INSTRUCTION.md 2893 2000 +893
plugin/skills/azure-upgrade/references/languages/java/package-specific/com.microsoft.azure.management.md 2428 2000 +428
plugin/skills/azure-upgrade/references/languages/java/templates/PLAN_TEMPLATE.md 2411 2000 +411
plugin/skills/azure-upgrade/references/languages/java/templates/PROGRESS_TEMPLATE.md 2315 2000 +315
plugin/skills/azure-upgrade/references/languages/java/templates/SUMMARY_TEMPLATE.md 2190 2000 +190
plugin/skills/azure-upgrade/references/services/functions/automation.md 3463 2000 +1463
plugin/skills/azure-upgrade/references/services/functions/consumption-to-flex.md 2773 2000 +773
plugin/skills/azure-validate/SKILL.md 950 500 +450
plugin/skills/entra-agent-id/SKILL.md 4001 500 +3501
plugin/skills/entra-app-registration/SKILL.md 2070 500 +1570
plugin/skills/entra-app-registration/references/api-permissions.md 2545 2000 +545
plugin/skills/entra-app-registration/references/cli-commands.md 2211 2000 +211
plugin/skills/entra-app-registration/references/console-app-example.md 2752 2000 +752
plugin/skills/entra-app-registration/references/oauth-flows.md 2375 2000 +375
plugin/skills/microsoft-foundry/SKILL.md 5729 500 +5229
plugin/skills/microsoft-foundry/finetuning/SKILL.md 1375 500 +875
plugin/skills/microsoft-foundry/foundry-agent/create/create-hosted.md 7619 2000 +5619
plugin/skills/microsoft-foundry/foundry-agent/create/quick-start-hosted.md 5050 2000 +3050
plugin/skills/microsoft-foundry/foundry-agent/create/references/foundry-tool-catalog.md 10921 2000 +8921
plugin/skills/microsoft-foundry/foundry-agent/create/references/local-run.md 2122 2000 +122
plugin/skills/microsoft-foundry/foundry-agent/create/references/toolbox-reference.md 2913 2000 +913
plugin/skills/microsoft-foundry/foundry-agent/create/references/tools.md 2159 2000 +159
plugin/skills/microsoft-foundry/foundry-agent/create/references/use-toolbox-in-hosted-agent.md 4591 2000 +2591
plugin/skills/microsoft-foundry/foundry-agent/deploy/deploy.md 5009 2000 +3009
plugin/skills/microsoft-foundry/foundry-agent/eval-datasets/eval-datasets.md 2863 2000 +863
plugin/skills/microsoft-foundry/foundry-agent/eval-datasets/references/generate-seed-dataset.md 2212 2000 +212
plugin/skills/microsoft-foundry/foundry-agent/eval-datasets/references/trace-to-dataset.md 4325 2000 +2325
plugin/skills/microsoft-foundry/foundry-agent/invocations-ws/invocations-ws.md 2636 2000 +636
plugin/skills/microsoft-foundry/foundry-agent/invocations-ws/references/invocations-ws-protocol.md 2009 2000 +9
plugin/skills/microsoft-foundry/foundry-agent/invoke/invoke.md 2581 2000 +581
plugin/skills/microsoft-foundry/foundry-agent/observe/observe.md 3856 2000 +1856
plugin/skills/microsoft-foundry/foundry-agent/observe/references/continuous-eval.md 3855 2000 +1855
plugin/skills/microsoft-foundry/foundry-agent/observe/references/evaluate-step.md 2175 2000 +175
plugin/skills/microsoft-foundry/foundry-agent/observe/references/evaluation-suite-generation.md 3134 2000 +1134
plugin/skills/microsoft-foundry/foundry-agent/trace/references/kql-templates.md 2701 2000 +701
plugin/skills/microsoft-foundry/models/deploy-model/SKILL.md 1805 500 +1305
plugin/skills/microsoft-foundry/models/deploy-model/capacity/SKILL.md 1739 500 +1239
plugin/skills/microsoft-foundry/models/deploy-model/customize/SKILL.md 2235 500 +1735
plugin/skills/microsoft-foundry/models/deploy-model/customize/references/customize-workflow.md 3335 2000 +1335
plugin/skills/microsoft-foundry/models/deploy-model/preset/SKILL.md 1226 500 +726
plugin/skills/microsoft-foundry/models/deploy-model/preset/references/preset-workflow.md 5534 2000 +3534
plugin/skills/microsoft-foundry/project/create/create-foundry-project.md 2258 2000 +258
plugin/skills/microsoft-foundry/quota/quota.md 2288 2000 +288
plugin/skills/microsoft-foundry/quota/references/capacity-planning.md 2080 2000 +80
plugin/skills/microsoft-foundry/references/agent-metadata-contract.md 2217 2000 +217
plugin/skills/microsoft-foundry/references/sdk/foundry-sdk-py.md 2162 2000 +162
plugin/skills/python-appservice-deploy/SKILL.md 688 500 +188

Consider moving content to references/ subdirectories.


Automated token analysis. See skill authoring guidelines for best practices.

@simonjj

simonjj commented Apr 3, 2026

Copy link
Copy Markdown
Contributor

Hi — from the ACA team's perspective, we'd recommend preferring PRs #1534 (AWS Fargate → ACA) and #1567 (GCP Cloud Run → ACA) over the migration content in this PR once the outstanding review issues on those PRs are addressed.

Those PRs provide standalone, independently testable migration skills with full end-to-end playbooks (assessment → image migration → deployment → validation), bash + PowerShell parity, error handling, and tests — whereas the reference additions here are more supplementary mapping tables without actionable deployment workflows.

We're actively working on fixing the review feedback on #1534 and #1567 and will update those PRs accordingly. The non-migration Gap PRs (#1636, #1637, #1642) from this split are being assessed independently.

cc @simonjj

@jongio jongio left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Container Apps migration references follow the established functions/ pattern well, but they aren't connected to the skill - causing both CI failures and making the content unreachable.

Blocking: SKILL.md not updated (root cause of both CI failures)

  1. metadata.version is still 1.0.1 - needs a bump (e.g., 1.1.0 for new scenarios). This causes the "Skill Structure" failure.
  2. The Migration Scenarios table (line 27) only lists Lambda->Functions. Add rows for ECS/Fargate -> Container Apps and Cloud Run -> Container Apps with links to the scenario docs.
  3. The Steps section (lines 38-39) hardcodes links to functions/assessment.md and functions/code-migration.md - these need to be scenario-aware or duplicated for Container Apps. The Rules section (line 21) also only links functions/global-rules.md.
  4. All 5 new files have zero inbound links from SKILL.md, so the "Markdown References" check flags them as orphaned. The fix: add the scenario rows above, then ensure assessment.md and code-migration.md link to their respective scenario files (like the functions pattern does with lambda-to-functions.md).

Technical issues to fix:

  • assessment.md step 7 mentions mapping volumes to "Azure Files or managed disks." Container Apps doesn't support managed disks - it supports Azure Files mounts and ephemeral storage. The report template (section 6) correctly says "Azure Files / Ephemeral" so just fix the step text to match.
  • Both ecs-to-container-apps.md and cloud-run-to-container-apps.md map source log-writer roles (roles/logging.logWriter / CloudWatch Logs) to Monitoring Metrics Publisher. That role is for publishing metrics, not logs. Container Apps auto-collects stdout/stderr via Log Analytics - no specific RBAC role is needed for application logging.
  • cloud-run-to-container-apps.md is at 2,080 tokens (80 over the 2,000 limit). Trimming the duplicate ACR import section (already in code-migration.md) would bring it under.

Process: @simonjj's comment notes PRs #1534/#1567 are preferred by the ACA team for migration content. Worth clarifying whether this PR is complementary (mapping tables + assessment templates) or competing before investing in the fixes above.

@github-actions

Copy link
Copy Markdown
Contributor

This PR has been automatically closed because it has unresolved review comments and no new commits in the last 28 days.

If you would still like to merge these changes, please:

  1. Resolve all outstanding review comments
  2. Reopen this PR

Thank you for your contribution!

@github-actions github-actions Bot closed this May 31, 2026
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@paulyuk

paulyuk commented Jul 4, 2026

Copy link
Copy Markdown
Member Author

Reopened and pushed 69c5593 addressing all outstanding review comments on this PR. Every unresolved thread has been resolved. Validators run locally: frontmatter and references pass, targeted skill tests pass, and the changed files are within token budget (the repo-wide tokens check failures are pre-existing baseline overages on unrelated files, not introduced here). Ready for another look — Gap-9 Container Apps Migrate.

@paulyuk paulyuk closed this Jul 4, 2026
@paulyuk paulyuk reopened this Jul 4, 2026
@paulyuk
paulyuk force-pushed the pass-equity-gap-9 branch from d81d0b4 to 69c5593 Compare July 4, 2026 19:19

@jongio jongio left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remaining question: @simonjj noted PRs #1534 and #1567 provide full end-to-end Container Apps migration playbooks from the ACA team. This PR adds mapping tables and assessment templates. Are these complementary, or does one supersede the other? Merging both without coordination could create conflicting guidance for the same migration scenarios.

All technical issues from my previous review (storage mapping, RBAC role corrections, SKILL.md scenario references, token budget) are addressed in the latest commit.

# Conflicts:
#	plugin/skills/azure-cloud-migrate/SKILL.md
#	tests/azure-cloud-migrate/__snapshots__/triggers.test.ts.snap

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

@jongio jongio left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two routing-ambiguity issues in the scenario table that will confuse the LLM when picking which reference file to load. See inline comments.

| AWS Elastic Beanstalk | Azure App Service | [beanstalk-to-app-service.md](references/services/app-service/beanstalk-to-app-service.md) |
| Heroku | Azure App Service | [heroku-to-app-service.md](references/services/app-service/heroku-to-app-service.md) |
| Google App Engine | Azure App Service | [app-engine-to-app-service.md](references/services/app-service/app-engine-to-app-service.md) |
| AWS ECS/Fargate | Azure Container Apps | [ecs-to-container-apps.md](references/services/container-apps/ecs-to-container-apps.md) |

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This row overlaps with the existing AWS Fargate (ECS) row on line 32. When a user says "migrate my Fargate service," both rows match, pointing to different files (ecs-to-container-apps.md vs fargate-to-container-apps.md with its companion assessment/deployment guides).

Consider either:

  • Consolidating into one row that links to ecs-to-container-apps.md as the primary reference (since it covers both ECS and Fargate), and removing or demoting the old Fargate-specific row to a sub-link.
  • Adding a disambiguation note so the LLM knows ecs-to-container-apps.md is the comprehensive guide while fargate-to-container-apps.md is Fargate-only.

| AWS Fargate (ECS) | Azure Container Apps | [fargate-to-container-apps.md](references/services/container-apps/fargate-to-container-apps.md) ([assessment](references/services/container-apps/fargate-assessment-guide.md), [deployment](references/services/container-apps/fargate-deployment-guide.md)) |
| Kubernetes (GKE/EKS/Self-hosted) | Azure Container Apps | [k8s-to-container-apps.md](references/services/container-apps/k8s-to-container-apps.md) |
| GCP Cloud Run | Azure Container Apps | [cloudrun-to-container-apps.md](references/services/container-apps/cloudrun-to-container-apps.md) |
| GCP Cloud Run | Azure Container Apps | [cloud-run-to-container-apps.md](references/services/container-apps/cloud-run-to-container-apps.md) and [cloudrun-to-container-apps.md](references/services/container-apps/cloudrun-to-container-apps.md) |

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Listing two files with and in a single table cell doesn't give the LLM a clear signal about which to load. It'll likely try to load both, which is redundant if the new cloud-run-to-container-apps.md supersedes the old cloudrun-to-container-apps.md.

If the new file is the comprehensive replacement, point this row to it alone. The existing cloudrun-to-container-apps.md (plus its companion cloudrun-assessment-guide.md and cloudrun-deployment-guide.md) can be referenced as supplementary material or deprecated.

@paulyuk

paulyuk commented Jul 4, 2026

Copy link
Copy Markdown
Member Author

Closing this PR. Since it was authored, the Container Apps team landed comprehensive migration guides on main that already cover these scenarios:

Our ecs-to-container-apps.md and cloud-run-to-container-apps.md directly overlap those, and merging both would create the conflicting guidance and ambiguous routing that @jongio and @simonjj flagged. The Gap-9 goal (Container Apps Migrate → A) is achieved by the ACA team's work, so this PR is redundant. Thanks @deepganguly.

Tracking issue #1608 updated to credit #1534/#1567.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Gap-9: Container Apps Migrate (F → A) — ECS/Fargate + Cloud Run migration guides

4 participants