Skip to content

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

Open
paulyuk wants to merge 1 commit intomainfrom
pass-equity-gap-9
Open

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

Conversation

@paulyuk
Copy link
Copy Markdown
Member

@paulyuk paulyuk commented Apr 1, 2026

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
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

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.

Comment on lines +7 to +10
| AWS Service | Azure Equivalent |
|-------------|------------------|
| ECS Service | Container App |
| ECS Task Definition | Container App revision template |
Copy link

Copilot AI Apr 1, 2026

Choose a reason for hiding this comment

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

Markdown tables here start rows with ||, which renders as an extra empty first column in common Markdown parsers. Replace leading || with a single | on all table rows in this document (and keep column counts consistent) so the mapping tables render correctly.

Copilot uses AI. Check for mistakes.
Comment on lines +5 to +8
| GCP Service | Azure Equivalent |
|-------------|------------------|
| Cloud Run Service | Container App |
| Cloud Run Revision | Container App revision |
Copy link

Copilot AI Apr 1, 2026

Choose a reason for hiding this comment

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

The mapping tables use || at the start of each row, which creates an unintended blank first column in Markdown. Update these tables to use single leading pipes (| ... | ... |) so they render as 2-column tables.

Copilot uses AI. Check for mistakes.
Comment on lines +56 to +58
| Property | Value |
|----------|-------|
| **Total Services** | <count> |
Copy link

Copilot AI Apr 1, 2026

Choose a reason for hiding this comment

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

Inside the assessment report template, tables also start with ||, which produces an extra blank column. Since this template is marked 'MANDATORY' for users to copy verbatim, it’s important the Markdown renders cleanly—please change table rows to start with a single | throughout the template.

Copilot uses AI. Check for mistakes.
Comment on lines +40 to +47
RUN npm ci --production
COPY . .
RUN npm run build

FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
Copy link

Copilot AI Apr 1, 2026

Choose a reason for hiding this comment

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

This Dockerfile pattern is likely to break for many Node projects because npm ci --production omits devDependencies that are often required for npm run build (e.g., TypeScript, bundlers). A more reliable pattern is to install full dependencies in the build stage, run the build, then install/retain only production dependencies in the runtime stage (or prune dev deps after build).

Suggested change
RUN npm ci --production
COPY . .
RUN npm run build
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist

Copilot uses AI. Check for mistakes.
name: my-api
resources:
cpu: 1.0
memory: 512Mi
Copy link

Copilot AI Apr 1, 2026

Choose a reason for hiding this comment

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

The Container Apps manifest examples elsewhere in this PR use Gi units (e.g., 1Gi, 0.5Gi). 512Mi may not be accepted by the Container Apps ARM/YAML schema depending on tooling/validation path. To avoid copy/paste failures, consider using 0.5Gi (or 1Gi) consistently for resources.memory in Container Apps examples.

Suggested change
memory: 512Mi
memory: 0.5Gi

Copilot uses AI. Check for mistakes.

- Always use `mcp_azure_mcp_get_bestpractices` tool before generating Azure code
- Prefer managed identity over connection strings or API keys
- **Always use the latest stable base images** — check official images for newest GA tags
Copy link

Copilot AI Apr 1, 2026

Choose a reason for hiding this comment

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

This conflicts with the later guidance in code-migration.md recommending fixed/pinned base image tags and avoiding latest. To make the guidance consistent and actionable, rephrase to something like: choose the latest stable version and pin it to an explicit tag/digest (avoid floating tags like latest).

Suggested change
- **Always use the latest stable base images** — check official images for newest GA tags
- **Choose the latest stable base image and pin it to an explicit version tag or digest (avoid floating tags like `latest`)** — check official images for newest GA tags

Copilot uses AI. Check for mistakes.
# Import from ECR (with credentials)
az acr import --name <acr-name> \
--source <account>.dkr.ecr.<region>.amazonaws.com/<image>:<tag> \
--username AWS --password $(aws ecr get-login-password)
Copy link

Copilot AI Apr 1, 2026

Choose a reason for hiding this comment

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

The ECR get-login-password call omits --region, while the ECS guide includes it. Since ECR credentials are region-scoped, this can fail or authenticate against an unintended default region. Prefer including --region <region> (or explicitly calling out that AWS_DEFAULT_REGION must be set) to make the command deterministic.

Suggested change
--username AWS --password $(aws ecr get-login-password)
--username AWS --password $(aws ecr get-login-password --region <region>)

Copilot uses AI. Check for mistakes.
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 1, 2026

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,470 tokens (0%)
Before 0 tokens
After 7,470 tokens
Files Changed 5

Changed Files

File Before After Change
plugin/skills/azure-cloud-migrate/references/services/container-apps/cloud-run-to-container-apps.md - 2,080 +2080
plugin/skills/azure-cloud-migrate/references/services/container-apps/ecs-to-container-apps.md - 1,838 +1838
plugin/skills/azure-cloud-migrate/references/services/container-apps/assessment.md - 1,418 +1418
plugin/skills/azure-cloud-migrate/references/services/container-apps/code-migration.md - 1,399 +1399
plugin/skills/azure-cloud-migrate/references/services/container-apps/global-rules.md - 735 +735

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

📊 Token Limit Check Report

Checked: 529 files
Exceeded: 70 files

⚠️ Files Exceeding Token Limits

File Tokens Limit Over By
.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 2382 500 +1882
.github/skills/sensei/references/EXAMPLES.md 3707 2000 +1707
.github/skills/sensei/references/LOOP.md 4181 2000 +2181
.github/skills/sensei/references/SCORING.md 3927 2000 +1927
.github/skills/skill-authoring/SKILL.md 817 500 +317
plugin/skills/appinsights-instrumentation/SKILL.md 908 500 +408
plugin/skills/azure-ai/SKILL.md 817 500 +317
plugin/skills/azure-aigateway/SKILL.md 1258 500 +758
plugin/skills/azure-aigateway/references/policies.md 2342 2000 +342
plugin/skills/azure-cloud-migrate/references/services/container-apps/cloud-run-to-container-apps.md 2080 2000 +80
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 1185 500 +685
plugin/skills/azure-compute/SKILL.md 755 500 +255
plugin/skills/azure-compute/workflows/vm-recommender/vm-recommender.md 2393 2000 +393
plugin/skills/azure-compute/workflows/vm-troubleshooter/references/cannot-connect-to-vm.md 7308 2000 +5308
plugin/skills/azure-cost-optimization/SKILL.md 3900 500 +3400
plugin/skills/azure-deploy/SKILL.md 1562 500 +1062
plugin/skills/azure-diagnostics/SKILL.md 1132 500 +632
plugin/skills/azure-diagnostics/aks-troubleshooting/networking.md 2147 2000 +147
plugin/skills/azure-diagnostics/aks-troubleshooting/node-issues.md 2003 2000 +3
plugin/skills/azure-enterprise-infra-planner/SKILL.md 991 500 +491
plugin/skills/azure-enterprise-infra-planner/references/constraints/compute-apps.md 2022 2000 +22
plugin/skills/azure-hosted-copilot-sdk/SKILL.md 608 500 +108
plugin/skills/azure-kubernetes/SKILL.md 2266 500 +1766
plugin/skills/azure-kusto/SKILL.md 2149 500 +1649
plugin/skills/azure-messaging/SKILL.md 967 500 +467
plugin/skills/azure-prepare/SKILL.md 2607 500 +2107
plugin/skills/azure-prepare/references/aspire.md 2991 2000 +991
plugin/skills/azure-prepare/references/plan-template.md 2559 2000 +559
plugin/skills/azure-prepare/references/recipes/azd/terraform.md 3012 2000 +1012
plugin/skills/azure-prepare/references/resources-limits-quotas.md 3322 2000 +1322
plugin/skills/azure-prepare/references/security.md 2092 2000 +92
plugin/skills/azure-prepare/references/services/functions/bicep.md 3065 2000 +1065
plugin/skills/azure-prepare/references/services/functions/templates/SPEC-composable-templates.md 6187 2000 +4187
plugin/skills/azure-prepare/references/services/functions/templates/recipes/composition.md 4649 2000 +2649
plugin/skills/azure-prepare/references/services/functions/terraform.md 3358 2000 +1358
plugin/skills/azure-quotas/SKILL.md 3445 500 +2945
plugin/skills/azure-quotas/references/commands.md 2644 2000 +644
plugin/skills/azure-resource-lookup/SKILL.md 1279 500 +779
plugin/skills/azure-resource-visualizer/SKILL.md 2054 500 +1554
plugin/skills/azure-storage/SKILL.md 1180 500 +680
plugin/skills/azure-upgrade/SKILL.md 1001 500 +501
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 906 500 +406
plugin/skills/entra-app-registration/SKILL.md 2068 500 +1568
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 2870 500 +2370
plugin/skills/microsoft-foundry/foundry-agent/create/create.md 3016 2000 +1016
plugin/skills/microsoft-foundry/foundry-agent/deploy/deploy.md 5511 2000 +3511
plugin/skills/microsoft-foundry/foundry-agent/eval-datasets/eval-datasets.md 2342 2000 +342
plugin/skills/microsoft-foundry/foundry-agent/eval-datasets/references/trace-to-dataset.md 4268 2000 +2268
plugin/skills/microsoft-foundry/foundry-agent/observe/observe.md 2547 2000 +547
plugin/skills/microsoft-foundry/foundry-agent/trace/references/kql-templates.md 2701 2000 +701
plugin/skills/microsoft-foundry/models/deploy-model/SKILL.md 1640 500 +1140
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/quota/quota.md 2129 2000 +129
plugin/skills/microsoft-foundry/quota/references/capacity-planning.md 2029 2000 +29
plugin/skills/microsoft-foundry/references/sdk/foundry-sdk-py.md 2162 2000 +162

Consider moving content to references/ subdirectories.


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

@simonjj
Copy link
Copy Markdown

simonjj commented Apr 3, 2026

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

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

3 participants