Skip to content

Gap-4: Functions Operate (B → A) — Hosting plan guide + cold start playbook - #1638

Open
Paul Yuknewicz (paulyuk) wants to merge 6 commits into
mainfrom
pass-equity-gap-4
Open

Gap-4: Functions Operate (B → A) — Hosting plan guide + cold start playbook#1638
Paul Yuknewicz (paulyuk) wants to merge 6 commits into
mainfrom
pass-equity-gap-4

Conversation

@paulyuk

Copy link
Copy Markdown
Member

Closes #1612 | Parent: #1608

2 files: hosting-plans.md (Consumption vs Flex vs Premium vs Dedicated comparison matrix), cold-start.md (mitigation strategies per plan).

Starting assessment — domain experts should review.

…p-4)

Closes #1612 | Parent: #1608
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

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 reference documentation for Azure Functions hosting plan selection and cold-start mitigation, aimed at helping readers choose a plan and reduce latency.

Changes:

  • Introduces a hosting plan comparison matrix, pricing notes, and decision flow.
  • Adds cold start impact guidance and mitigation strategies (including CLI/Bicep examples).

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 6 comments.

File Description
plugin/skills/azure-prepare/references/services/functions/hosting-plans.md New hosting plan comparison, cost model summary, and decision criteria.
plugin/skills/azure-prepare/references/services/functions/cold-start.md New cold start mitigation playbook with plan-by-plan strategies and infra examples.

Comment thread plugin/skills/azure-prepare/references/services/functions/hosting-plans.md Outdated
Comment thread plugin/skills/azure-prepare/references/services/functions/hosting-plans.md Outdated
Comment thread plugin/skills/azure-prepare/references/services/functions/cold-start.md Outdated
Comment thread plugin/skills/azure-prepare/references/services/functions/cold-start.md Outdated
@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-prepare/references/services/functions/cold-start.md' exists on disk, but not in 'origin/main'
fatal: path 'plugin/skills/azure-prepare/references/services/functions/hosting-plans.md' exists on disk, but not in 'origin/main'

📊 Token Change Report

Comparing origin/mainHEAD

Summary

Metric Value
📈 Total Change +1,994 tokens (+63%)
Before 3,145 tokens
After 5,139 tokens
Files Changed 3

Changed Files

File Before After Change
plugin/skills/azure-prepare/references/services/functions/hosting-plans.md - 988 +988
plugin/skills/azure-prepare/references/services/functions/cold-start.md - 986 +986
plugin/skills/azure-prepare/SKILL.md 3,145 3,165 +20 (+1%)

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

📊 Token Limit Check Report

Checked: 727 files
Exceeded: 100 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/SKILL.md 856 500 +356
.github/skills/skill-authoring/SKILL.md 839 500 +339
.github/skills/vally-eval/SKILL.md 1757 500 +1257
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 1085 500 +585
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 762 500 +262
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-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 3165 500 +2665
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 2196 2000 +196
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 3994 500 +3494
plugin/skills/entra-app-registration/SKILL.md 2058 500 +1558
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 6166 500 +5666
plugin/skills/microsoft-foundry/finetuning/SKILL.md 1375 500 +875
plugin/skills/microsoft-foundry/foundry-agent/azd-guidance/references/azd-ai-cli.md 2129 2000 +129
plugin/skills/microsoft-foundry/foundry-agent/create/create-hosted.md 7101 2000 +5101
plugin/skills/microsoft-foundry/foundry-agent/create/quick-start-hosted.md 5246 2000 +3246
plugin/skills/microsoft-foundry/foundry-agent/create/references/foundry-tool-catalog.md 10891 2000 +8891
plugin/skills/microsoft-foundry/foundry-agent/create/references/local-run.md 2252 2000 +252
plugin/skills/microsoft-foundry/foundry-agent/create/references/toolbox-reference.md 3137 2000 +1137
plugin/skills/microsoft-foundry/foundry-agent/create/references/tools.md 2359 2000 +359
plugin/skills/microsoft-foundry/foundry-agent/create/references/use-toolbox-in-hosted-agent.md 4288 2000 +2288
plugin/skills/microsoft-foundry/foundry-agent/deploy/deploy.md 4897 2000 +2897
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 2652 2000 +652
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/routine/routine.md 2032 2000 +32
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 2283 2000 +283
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.

@jongio Jon Gallant (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 CI checks are failing that block merge:

  1. Skill Structure - azure-prepare was modified but metadata.version wasn't bumped (currently 1.1.8). Bump it in plugin/skills/azure-prepare/SKILL.md.

  2. Markdown References - Both new files aren't linked from the reference chain. Add links to plugin/skills/azure-prepare/references/services/functions/README.md in the References section (similar to how triggers.md, bicep.md, etc. are linked there).

Beyond the Copilot bot's 6 comments (all valid - especially the SnapStart/AWS catch and the decision tree 10-vs-30 min inconsistency), a couple more items:

  • The Container Apps cold-start Bicep snippet (~line 117 in cold-start.md) is just a scale: block without resource context. Every other plan's example shows a full resource declaration. Wrap this in a Microsoft.App/containerApps resource, or at minimum note it goes inside template.scale.

  • The functions README.md already has a hosting plans table (lines 43-59) that overlaps with the new hosting-plans.md. Once linked, consider slimming the README table to a brief pointer to avoid two sources of truth drifting apart.

Content-wise, the plan comparison matrix and cold start playbook cover the key decision factors well. Good separation into two focused files.

Comment thread plugin/skills/azure-prepare/references/services/functions/cold-start.md Outdated
@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 30, 2026
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@paulyuk

Copy link
Copy Markdown
Member Author

Reopened and pushed b4721e9 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-4 Functions Operate.

@jongio Jon Gallant (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.

Fix commit b4721e9 addresses the prior review feedback. The Container Apps Bicep now shows a full resource declaration, the decision tree threshold is consistent with the matrix, and Java guidance is Azure-specific.

One remaining observation on the decision tree logic (inline below). The unrelated eval CI failure is in azure-compute, not this PR.

…nux-only)

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

Copy link
Copy Markdown
Member Author

Note on the red eval check: it's a pre-existing main-branch failure, not from this PR. vally's --strict orphan-files walk flags four azure-compute/references/* files that are only reached via ../../references/ links it doesn't follow. Fixed separately in #2744 so this PR stays in-scope. Every other check is green.

The az functionapp update --set path used
functionAppConfig.runtime.scale.alwaysReady, which does not exist in the
Flex Consumption schema; always-ready lives under
functionAppConfig.scaleAndConcurrency (as the Bicep block already shows).
The wrong path silently fails to configure always-ready instances.

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

@jongio Jon Gallant (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.

Both incremental fixes verified:

  • The scaleAndConcurrency.alwaysReady CLI path now matches the Bicep resource property structure (the previous runtime.scale.alwaysReady path doesn't exist in the ARM schema for Flex Consumption apps).
  • The decision tree correctly gates the budget/bursty branch on OS. Windows workloads can't use Flex Consumption (Linux-only), so routing them to Premium EP1 is the right call for bursty + VNet on Windows.

The eval CI failure is a pre-existing main branch issue (azure-compute orphan-file detection), not from this PR.

My CHANGES_REQUESTED from April is stale. All blocking items have been addressed. A maintainer should dismiss that review or I need to re-review with APPROVE to unblock. Four requested reviewers (RickWinter, wbreza, tmeschter, kvenkatrajan) are still pending.

@paulyuk

Copy link
Copy Markdown
Member Author

Hi Jon Gallant (@jongio), back after the July 4th weekend here on the first business day. This one is ready for a re-review. All of your prior comments have been addressed and the threads are resolved, so could you re-review and dismiss the stale changes-requested? The only red check is the pre-existing repo-wide eval failure, which #2744 fixes. Thanks!

@jongio Jon Gallant (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.

Node.js 20 reached upstream EOL (April 2026). The Bicep example should use Node 22 (current LTS, supported on Flex Consumption) so the template doesn't teach a stale runtime from day one.

Everything else from my prior reviews remains addressed. The PR is ready from my perspective once the Node version is updated.

Comment thread plugin/skills/azure-prepare/references/services/functions/cold-start.md Outdated
@paulyuk

Copy link
Copy Markdown
Member Author

Hi Jon Gallant (@jongio), first business day back after the July 4th weekend. I've addressed all your earlier comments and resolved the threads, so this is ready for a re-review. Could you take another pass and dismiss the stale changes-requested if it looks good? The only red check is the pre-existing repo-wide eval failure, already fixed on main by the vally 0.7.0 update (#2759), so it just needs a re-run. I'll rebase to clear the merge conflict as well. Thanks!

Paul Yuknewicz and others added 2 commits July 16, 2026 20:47
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

@wbreza Wallace Breza (wbreza) 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.

Solid, well-organized hosting guidance that incorporates prior review feedback; several plan limits and CLI/Bicep snippets need correcting against current Azure Functions docs before merge.

What stood out

  • Prior feedback addressed — Node 22 runtime, the jsonc fence, the OS-gated decision tree, Azure-specific Java guidance, and the wrapped Container Apps resource all landed in later rounds.
  • Accuracy gaps vs current docs — a handful of plan limits, instance sizings, and CLI/Bicep snippets diverge from current Microsoft Learn and would misdirect readers.

Top issues

  • [F-001] Flex Consumption max execution shown as 30 min, but 30 is the default and not the ceiling — plugin/skills/azure-prepare/references/services/functions/hosting-plans.md:14
  • [F-002] Deployment-slot counts are wrong (Premium is 3, not 20) — plugin/skills/azure-prepare/references/services/functions/hosting-plans.md:13
  • [F-004] Container Apps Bicep uses Microsoft.App/containerApps instead of the Functions-on-ACA Microsoft.Web/sites resource — plugin/skills/azure-prepare/references/services/functions/cold-start.md:92

Cross-cutting

  • [C-001] Several documented facts diverge from current Microsoft Learn (docs) — slot counts, the Flex timeout, Flex instance sizing, and the Premium/always-ready CLI commands need reconciling against 2026 docs across both new files.

| **VNet integration** | ❌ | ✅ | ✅ | ✅ (Standard+) | ✅ |
| **Private endpoints** | ❌ | ✅ | ✅ | ✅ (Standard+) | ✅ |
| **Deployment slots** | Win: 1 / Linux: ❌ | ❌ | ✅ 20 | ✅ 5-20 | Via revisions |
| **Max execution (min)** | 10 | 30 | Unlimited | Unlimited | Unlimited |

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.

[F-001] [correctness] The Max execution row lists Flex Consumption as 30, but 30 minutes is the default timeout, not the ceiling. Flex Consumption supports long-running executions well beyond 30 min (into hours), unlike the legacy Consumption plan (hard cap 10 min). The decision tree at line 40 (Execution time > 30 min? -> Premium or Dedicated) inherits this error and steers long-running workloads away from Flex, which is frequently the better fit. Reflect the default-vs-max distinction here and fix the decision tree accordingly.

Suggested change
| **Max execution (min)** | 10 | 30 | Unlimited | Unlimited | Unlimited |
| **Max execution (min)** | 10 | 30 default / unbounded | Unlimited | Unlimited | Unlimited |

Ref: https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#function-app-timeout-duration

| **Scale to zero** | ✅ | ✅ | ❌ (≥1) | ❌ | ✅ |
| **VNet integration** | ❌ | ✅ | ✅ | ✅ (Standard+) | ✅ |
| **Private endpoints** | ❌ | ✅ | ✅ | ✅ (Standard+) | ✅ |
| **Deployment slots** | Win: 1 / Linux: ❌ | ❌ | ✅ 20 | ✅ 5-20 | Via revisions |

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.

[F-002] [correctness] The deployment-slot counts are inaccurate: Premium supports 3 slots including production (not 20); Windows Consumption supports 2 (production + 1 staging), not 1; and Dedicated is 1-20 depending on the App Service tier (Basic = 1), not 5-20. The 20 value looks like the Dedicated maximum mistakenly applied to the Premium column.

Suggested change
| **Deployment slots** | Win: 1 / Linux: ❌ || ✅ 20 | ✅ 5-20 | Via revisions |
| **Deployment slots** | 2 (Windows) / ❌ Linux || 3 | 1-20 | Via revisions |

Ref: https://learn.microsoft.com/en-us/azure/azure-functions/functions-deployment-slots

Premium plans include pre-warmed instances by default. Set minimum always-on instances:

```bash
az functionapp plan update -n $PLAN -g $RG --min-elastic-worker-count 2

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.

[F-003] [correctness] --min-elastic-worker-count is not a valid parameter for az functionapp plan update; the command fails with "unrecognized arguments". The correct flag for the Elastic Premium minimum instance count is --min-instances (alias --number-of-workers). --max-burst on the following line is correct.

Suggested change
az functionapp plan update -n $PLAN -g $RG --min-elastic-worker-count 2
az functionapp plan update -n $PLAN -g $RG --min-instances 2

Ref: https://learn.microsoft.com/en-us/cli/azure/functionapp/plan#az-functionapp-plan-update

Comment on lines +92 to +104
resource containerApp 'Microsoft.App/containerApps@2024-03-01' = {
name: appName
location: location
properties: {
managedEnvironmentId: environment.id
template: {
scale: {
minReplicas: 1
maxReplicas: 10
}
}
}
}

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.

[F-004] [correctness] This section documents Container Apps as an Azure Functions hosting option (hosting-plans.md: "Functions runs as a container with KEDA-based scaling"), but the Bicep declares a raw Microsoft.App/containerApps resource. Deploying it produces a plain Container App with no Functions host — it will not run a function app. Functions on Container Apps uses a Microsoft.Web/sites resource with kind functionapp,linux,container,azurecontainerapps and a managedEnvironmentId; set the minimum instance count via siteConfig.minimumElasticInstanceCount. Replace the resource type accordingly.
Ref: https://learn.microsoft.com/en-us/azure/azure-functions/functions-infrastructure-as-code?pivots=container-apps

| Plan | SKU Name | vCPU | Memory |
|------|----------|------|--------|
| Consumption | Y1 | Shared | 1.5 GB |
| Flex Consumption | FC1 | 1-4 | 2-4 GB |

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.

[F-005] [correctness] The Flex Consumption instance sizing is off. Flex offers instance memory sizes of 512 MB, 2 GB, and 4 GB, mapping to roughly 0.25, 1, and 2 vCPU — so the range is 0.25-2 vCPU / 512 MB-4 GB, not "1-4 vCPU / 2-4 GB". Note 4 GB corresponds to 2 cores (not 4), and the 512 MB tier is missing.

Suggested change
| Flex Consumption | FC1 | 1-4 | 2-4 GB |
| Flex Consumption | FC1 | 0.25-2 | 0.5-4 GB |

Ref: https://learn.microsoft.com/en-us/azure/azure-functions/flex-consumption-plan#instance-memory

| Dedicated | S1 | 1 | 1.75 GB |
| Dedicated | P1v3 | 2 | 8 GB |

> ⚠️ **Warning:** Switching between Consumption/Flex and Premium/Dedicated requires creating a new function app. There is no in-place plan change between serverless and non-serverless SKUs. See `azure-upgrade` for migration guidance.

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.

[F-006] [correctness] This is overstated for Windows. Migrating between the Consumption and Premium plans on Windows is supported in place via Azure CLI — no new function app required. The "must create a new app" constraint applies to Linux and to Flex Consumption. Qualify the statement so Windows users are not told to recreate their app unnecessarily.
Ref: https://learn.microsoft.com/en-us/azure/azure-functions/functions-premium-plan#migrate-between-a-consumption-and-a-premium-plan

Comment on lines +45 to +47
az functionapp update -n $APP -g $RG \
--set functionAppConfig.scaleAndConcurrency.alwaysReady[0].name=http \
--set functionAppConfig.scaleAndConcurrency.alwaysReady[0].instanceCount=1

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.

[F-007] [maintainability] Setting always-ready instances by patching the ARM array with --set ...alwaysReady[0] is undocumented and fragile: indexing by [0] overwrites whatever occupies that slot, so on an app that already has always-ready groups this can silently drop existing entries. The supported, merge-safe command is az functionapp scale config always-ready set.

Suggested change
az functionapp update -n $APP -g $RG \
--set functionAppConfig.scaleAndConcurrency.alwaysReady[0].name=http \
--set functionAppConfig.scaleAndConcurrency.alwaysReady[0].instanceCount=1
# Set always-ready instances
az functionapp scale config always-ready set -g $RG -n $APP --settings http=1

Ref: https://learn.microsoft.com/en-us/azure/azure-functions/flex-consumption-how-to#set-always-ready-instance-counts


| Feature | Consumption (Y1) | Flex Consumption (FC1) | Premium (EP1-EP3) | Dedicated (B1-P3v3) | Container Apps |
|---------|:-:|:-:|:-:|:-:|:-:|
| **Max scale (instances)** | 200 | 1000 | 100 | 10-30 | 300 |

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.

[F-008] [correctness] Container Apps max scale is understated. The Functions-on-Container-Apps maximum instance count is 300-1000 (300 is the portal default; up to 1000 is configurable subject to quota), so a flat 300 undercounts the ceiling for high-throughput workloads.

Suggested change
| **Max scale (instances)** | 200 | 1000 | 100 | 10-30 | 300 |
| **Max scale (instances)** | 200 | 1000 | 100 | 10-30 | 300-1000 |

Ref: https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#scale

@paulyuk

Copy link
Copy Markdown
Member Author

Hi Jon Gallant (@jongio), first business day back after the July 4th holiday. This one is ready for re-review. Everything you flagged has been addressed and all threads are resolved, so could you re-review and dismiss the stale changes-requested? The only red check is the pre-existing repo-wide eval failure, unrelated to this PR. Thanks!

@paulyuk

Copy link
Copy Markdown
Member Author

Hi Jon Gallant (@jongio), first business day back after the July 4th break. Everything you flagged here is addressed and all the threads are resolved, so this is ready for a re-review. When you have a moment, could you take another pass and dismiss the stale changes-requested? The only red check is the pre-existing repo-wide eval failure, which is unrelated to these changes.

@diberry

Copy link
Copy Markdown

No description provided.

@paulyuk

Copy link
Copy Markdown
Member Author

Hi Jon Gallant (@jongio), this is ready for a re-review. Everything you flagged has been addressed and all the threads are resolved, so the changes-requested is now stale. Could you take another pass and dismiss it or re-approve? The only red check is the pre-existing repo-wide eval failure, which is unrelated to this PR. Today is the first business day after the July 4th holiday, so putting it back on your radar. Thanks!

@paulyuk

Copy link
Copy Markdown
Member Author

Jon Gallant (@jongio), this is ready for re-review. All prior comments are addressed and threads resolved. Could you re-review and dismiss the stale changes-requested review? The only red check is the pre-existing repo-wide eval failure, fixed by #2744. Today is the first business day after the July 4th holiday.

@paulyuk

Copy link
Copy Markdown
Member Author

Jon Gallant (@jongio) This is ready for re-review. All prior comments are addressed and threads are resolved. The only red check is the pre-existing repo-wide eval failure, addressed by #2744. Following up after the July 4th holiday. Could you re-review and dismiss the stale changes-requested when you have a chance?

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-4: Functions Operate (B → A) — Hosting plan guide, cold start playbook, slots

6 participants