Generated banner for Azure Upgrade
Generated logo for Azure Upgrade

Azure Upgrade

MicrosoftOfficialCreated by Microsoft

  • Skill
  • Workflow
  • Cloud and DevOps
  • MIT
  • Low risk
  • Has scripts

From the author

Assess and upgrade Azure workloads between plans, tiers, or SKUs, or modernize Azure SDK dependencies in source code. WHEN: upgrade Consumption to Flex Consumption, upgrade Azure Functions plan, change hosting plan, function app SKU, migrate App Service to Container Apps, modernize legacy Azure Java SDKs (com.microsoft.azure to com.azure), migrate Azure Cache for Redis (ACR/ACRE) to Azure Managed Redis (AMR).
— the description by Microsoft

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

Azure Upgrade provides a structured, automated approach to upgrading Azure resources and modernizing source code dependencies. It supports complex transitions such as moving Azure Functions from Consumption to Flex Consumption, migrating various Redis cache tiers to Azure Managed Redis, and refactoring legacy Java applications from the deprecated com.microsoft.azure SDKs to the modern com.azure ecosystem. The skill enforces safety through pre-migration assessments, explicit user confirmation for destructive actions, and idempotent automation scripts, ensuring that original workloads remain intact until the new configuration is fully validated.

What it does

  • Assesses Azure workloads for upgrade readiness across plans, tiers, and SKUs.
  • Automates the migration of Azure Functions from Consumption to Flex Consumption.
  • Modernizes legacy Java applications by replacing deprecated com.microsoft.azure SDKs with modern com.azure equivalents.
  • Facilitates the migration of Azure Cache for Redis (ACR/ACRE) to Azure Managed Redis (AMR).
  • Generates detailed migration status reports and maintains artifact isolation.
  • Provides a safe, gated workflow requiring user approval for all resource creation and configuration changes.

When to use it

  • When you need to upgrade your Azure Functions hosting plan to a more performant or cost-effective tier.
  • When your Java project relies on deprecated Azure SDKs and requires modernization to supported libraries.
  • When migrating existing Redis cache instances to the newer Azure Managed Redis service.
  • When you need a repeatable, documented process for changing Azure resource SKUs or hosting plans.

Advantages

  • Reduces manual effort and risk during complex infrastructure and code migrations.
  • Ensures safety by requiring explicit user approval for all destructive or state-changing operations.
  • Maintains high availability by keeping original resources running until the new ones are validated.
  • Promotes security best practices by encouraging the use of managed identities over connection strings.
  • Provides clear, step-by-step guidance for both infrastructure upgrades and source-code refactoring.

Usage examples

“Upgrade my function app from Consumption to Flex Consumption”
The agent will identify the current plan, assess compatibility, and guide you through the migration steps to the Flex Consumption plan.
“Migrate my Java project from com.microsoft.azure to com.azure”
The agent will inventory legacy dependencies, provide a migration plan, and assist in updating your build files and source code imports.
“Migrate my Redis cache to AMR”
The agent will assess your current Redis configuration and execute the migration path to Azure Managed Redis.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/microsoft/azure-upgrade/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip azure-upgrade.zip -d .agents/skills

Documentation by Microsoft

Azure Upgrade

This skill handles assessment and automated upgrades of existing Azure workloads from one Azure service, hosting plan, or SKU to another — all within Azure. This includes plan/tier upgrades (e.g. Consumption → Flex Consumption), cross-service migrations (e.g. App Service → Container Apps), and SKU changes. It also covers Azure SDK for Java source-code modernization (e.g. legacy Java com.microsoft.azure.* → modern com.azure.*). This is NOT for cross-cloud migration — use azure-cloud-migrate for that.

Triggers

User IntentExample Prompts
Upgrade Azure Functions plan"Upgrade my function app from Consumption to Flex Consumption"
Discover Functions upgrade candidates"What Consumption Function Apps do I have that can be upgraded to Flex Consumption?"
Change hosting tier"Move my function app to a better plan"
Assess upgrade readiness"Is my function app ready for Flex Consumption?"
Automate plan migration"Automate the steps to upgrade my Functions plan"
Modernize legacy Azure Java SDK"Migrate legacy Azure SDKs for Java", "Upgrade legacy Azure Java SDK", "Migrate my Java project from com.microsoft.azure to com.azure"
Migrate Azure Cache for Redis (ACR/OSS) to Azure Managed Redis (AMR)"Migrate my Redis cache to AMR", "ACR to AMR", "OSS to AMR", "Upgrade my Premium P2 cache to Managed Redis", "Pick an AMR SKU", "Convert my Redis IaC template to AMR"
Migrate Azure Cache for Redis Enterprise (ACRE) to Azure Managed Redis (AMR)"Migrate my Enterprise_E10 cache to AMR", "ACRE to AMR", "Update my ACRE IaC template for AMR", "Migrate EnterpriseFlash to AMR", "Migrate my geo-replicated Enterprise Redis"

Rules

  1. Follow phases in order. Skip or defer work only when the selected scenario explicitly permits it, and record the reason in the migration status.

  2. Generate an assessment before any upgrade operations

  3. Load the scenario reference and follow its rules

  4. Use mcp_azure_mcp_get_azure_bestpractices and mcp_azure_mcp_documentation MCP tools

  5. Destructive actions require ask_user — global-rules

  6. Always confirm the target plan/SKU with the user before proceeding

  7. Propose a name for any new resource (default: <source>-<target-suffix>, e.g. <source>-flex for Flex Consumption migrations) and announce the proposed name to the user before creating it so they can override without a blocking prompt. Same pattern applies to other newly-created resources (storage accounts, App Insights, etc.) — see the scenario reference for service-specific defaults.

  8. Windows Consumption → Flex source-change gate: treat the source app as read-only by default. Immediately before every command that would change its settings, triggers, state, deployment, bindings, or existence, use ask_user to describe the exact change and obtain explicit approval. Approval is action-specific and cannot be reused for later source changes.

  9. Never delete or stop the original app without explicit user confirmation

  10. Keep approval-gated workflows moving: after each completed step, immediately perform the next read-only preflight. If the next action requires approval, invoke ask_user in the same turn — never stop after merely announcing the next step and wait for the user to re-engage.

  11. All automation scripts must be idempotent and resumable

Upgrade Scenarios

SourceTargetReference
Azure Functions Consumption Plan (Linux)Azure Functions Flex Consumption Planworkflow.md
Azure Functions Consumption Plan (Windows)Azure Functions Flex Consumption Planworkflow.md
Legacy Azure Java SDK (com.microsoft.azure.*)Modern Azure Java SDK (com.azure.*)languages/java/README.md
Azure Cache for Redis (ACR/OSS) Basic/Standard/PremiumAzure Managed Redis (AMR)services/redis/redis-to-amr.md
Azure Cache for Redis Enterprise (ACRE) / Enterprise FlashAzure Managed Redis (AMR)services/redis/redis-to-amr.md

Functions Consumption-to-Flex routing: For a named app, inspect its Azure platform and load only the matching Linux or Windows workflow. For subscription-wide discovery, evaluate both platforms: use az functionapp flex-migration list for Linux and the Windows workflow's manual discovery and compatibility checks for Windows. Label Windows results as candidates until per-app code compatibility is assessed.

SDK upgrade scenarios (e.g. Java legacy → modern) run a source-code modernization flow that is distinct from Azure service/plan/SKU upgrades: follow the scenario reference, not the Steps below.

No matching scenario? Use mcp_azure_mcp_documentation and mcp_azure_mcp_get_azure_bestpractices tools to research the upgrade path.

MCP Tools

ToolPurpose
mcp_azure_mcp_get_azure_bestpracticesGet Azure best practices for the target service
mcp_azure_mcp_documentationLook up Azure documentation for upgrade scenarios
mcp_azure_mcp_appserviceQuery App Service and Functions plan details
mcp_azure_mcp_applicationinsightsVerify monitoring configuration

Steps

  1. Identify — Determine the source and target Azure plans/SKUs. Ask user to confirm.

  2. Assess — Analyze existing app for upgrade readiness → load scenario reference (e.g., workflow.md)

  3. Pre-migrate — Collect settings, identities, configs from the existing app

  4. Upgrade — Execute the automated upgrade steps (create new resources, migrate settings, deploy code)

  5. Validate — Use the checks defined by the selected scenario: verify target resource state, applicable HTTP endpoints and non-HTTP triggers, and monitoring. If access restrictions or unavailable test resources prevent execution, record validation as deferred — never relax security automatically or report functional success.

  6. Ask User — Offer performance validation and IaC updates. Offer source cleanup only when the selected scenario confirms production cutover and all cleanup prerequisites are complete.

  7. Hand off to azure-validate for deep validation or azure-deploy for CI/CD setup

Track progress in <UPGRADE_DIR>/upgrade-status.md — see Artifact Output Policy for path resolution.

References

Next

After upgrade is validated, hand off to:

  • azure-validate — for thorough post-upgrade validation

  • azure-deploy — if the user wants to set up CI/CD for the new app

Files

references/services/functions/consumption-to-flex/linux/workflow.md

Consumption Plan to Flex Consumption Plan Upgrade

Source: Azure Functions Consumption Plan (Y1/Dynamic) on Linux Target: Azure Functions Flex Consumption Plan (FC1/FlexConsumption) Platform: Linux → Linux. For a Windows Consumption source, use the Windows workflow. Docs: Linux migration guide

Why Upgrade?

  • Faster cold starts — always-ready instances mean functions respond more quickly

  • Better scaling — per-function scaling and concurrency controls

  • Virtual network support — connect to private networks and use private endpoints

  • Active investment — Flex Consumption is where new features land first

What to Expect

  1. Your code stays the same — no rewriting required if on a supported language version

  2. You'll create a new app alongside the existing one

  3. New app runs in the same resource group with access to the same dependencies

  4. You control the timing — test thoroughly before switching over

Platform Notes

  • Linux Consumption is being retired September 30, 2028

  • Azure CLI provides automated migration commands: az functionapp flex-migration list and az functionapp flex-migration start

  • The flex-migration commands handle assessment, app creation, and most configuration migration automatically

  • Deployment packages are in squashfs format stored in scm-releases blob container

Prerequisites

  • Azure CLI v2.77.0+

  • resource-graph extension: az extension add --name resource-graph

  • jq tool for JSON processing

  • Owner or Contributor role in the resource group

  • Permissions to create and manage function apps, storage accounts, App Insights resources, and managed identity role assignments

Compatibility Requirements

Supported Language Stacks
Stack IDLanguageSupported?
dotnet-isolated.NET (isolated worker model)✅ Yes
nodeJavaScript/TypeScript✅ Yes
javaJava✅ Yes
pythonPython✅ Yes
powershellPowerShell✅ Yes
dotnet.NET (in-process model)❌ No — must migrate to isolated first
customCustom handlers✅ Yes
Known Limitations (Flex Consumption)
FeatureStatusImpact
Deployment slots❌ Not supportedRearchitect to use separate apps
TLS/SSL certificates⚠️ Site-scoped certificates in previewRe-add certificates after migration, verify the per-app limits, and update code that loads certificates to use Linux file paths
Blob trigger (polling)❌ Only EventGrid sourceConvert LogsAndContainerScan → EventGrid
Azure Government❌ Not availableCannot migrate yet

Upgrade Phases

Phase 1: Assessment

Run all checks from assessment.md. Use the automated eligibility check:

# Automated eligibility check — scans all Linux Consumption apps
az functionapp flex-migration list

This returns eligible_apps and ineligible_apps arrays with specific reasons for any incompatibilities. For detailed manual checks, see automation.md.

Phase 2: Pre-migration (Collect Everything)

Collect all settings and configurations from the existing app before creating the new one. See Step-by-step scripts in automation.md:

  1. Collect app settings

  2. Collect application configurations (CORS, custom domains, HTTP version, TLS, client certs, etc.)

  3. Identify managed identities and RBAC role assignments

  4. Identify built-in authentication settings

  5. Review inbound access restrictions

  6. Get the code deployment package (if source code not in version control)

Phase 3: Create Flex Consumption App

Run the automated migration command from automation.md — Step 4.

The flex-migration start command automatically:

  • Assesses your source app for Flex Consumption compatibility

  • Creates a new function app in the Flex Consumption plan

  • Migrates app settings, identity assignments, storage mounts, CORS, custom domains, and access restrictions

💡 Use Microsoft Entra ID + managed identities instead of connection strings when creating the new app.

Identity-First Configuration (Functions)

Enterprise subscriptions commonly enforce policies blocking local auth. Configure identity-based access:

  • Storage accounts: Use AzureWebJobsStorage__credential, __clientId, and service-specific URIs (__blobServiceUri, __queueServiceUri, __tableServiceUri)

  • Application Insights: Use APPLICATIONINSIGHTS_AUTHENTICATION_STRING with Authorization=AAD

  • When using User Assigned Managed Identity, pass managedIdentityClientId explicitly

Phase 4: Verify and Configure the New App

The flex-migration start command handles most configuration. Verify the results and manually configure anything it doesn't cover (see automation.md):

  1. Verify migrated app settings, identities, custom domains

  2. Configure built-in authentication (if used — not auto-migrated)

  3. Configure scale and concurrency settings (if custom values needed)

  4. Enable Application Insights monitoring

Phase 5: Deploy Code

⚠️ Code is NOT automatically migrated. The new app is created with config only — you must deploy code separately.

Use ask_user to present these options:

Your new Flex Consumption app <NEW_APP_NAME> has been created and configured. Now we need to deploy your function code. How would you like to proceed?

  1. Update CI/CD pipeline — I'll help you update your Azure Pipelines or GitHub Actions workflow to target the new app

  2. Deploy from local project — I'll run func azure functionapp publish <NEW_APP_NAME> from your project directory

  3. Deploy existing package — I'll deploy the package we downloaded earlier from the original app

After user selects an option, execute the corresponding deployment method from automation.md — Step 5.

⚠️ After deployment, triggers immediately start processing. Review mitigation strategies for your trigger types.

After successful deployment, inform the user:

Code deployed! Next steps to consider:

  • The original app is still running — keep it as rollback for a few days

  • Update any clients/pipelines to point to the new URL

  • Enable HTTPS-only and managed identity on the new app for better security

  • Do not delete the original app until production traffic and every production trigger have completed cutover and target validation

Phase 6: Post-Upgrade Validation
  1. Smoke test — Get the app’s default hostname via az functionapp show --query defaultHostName -o tsv, then hit that URL and confirm it returns a non-error response (HTTP 2xx/4xx, not connection refused or 503). This is the minimum bar before proceeding.

  2. Verify the app is running on Flex Consumption (az functionapp show --query sku)

  3. Test HTTP trigger endpoints (e.g. curl https://<DEFAULT_HOST>/api/<FUNCTION_NAME>)

  4. Capture and compare performance benchmarks

  5. Set up monitoring dashboards

  6. Refine scale/concurrency settings

  7. Update IaC (Bicep/Terraform) to reflect new plan

Phase 7: Cleanup (Optional)
  • Keep the original app for a few days/weeks as rollback

  • Consumption plan charges only for actual usage — low cost to keep idle

  • Offer deletion only after all production clients, DNS/custom domains, and triggers use the target; target execution is verified; no production-readiness work remains deferred; and the source no longer processes production workloads

  • If any condition is incomplete, retain the source and record cleanup as skipped or deferred

  • After every condition passes, use the confirmation and command in automation.md — Step 7

Trigger Migration Risks

Trigger TypeRiskMitigation
Azure Blob storageHighCreate separate container for event-based trigger in new app
Azure Cosmos DBHighCreate dedicated lease container for new app; set StartFromBeginning: false
Azure Event GridMediumRecreate event subscriptions; ensure idempotent functions
Azure Event HubsMediumCreate new consumer group for new app
Azure Service BusHighCreate new topic/queue; update senders; drain original before shutdown
Azure Storage QueueHighCreate new queue; update senders; drain original before shutdown
HTTPLowUpdate clients to target new app URL
TimerLowOffset schedules during cutover to avoid simultaneous execution

IaC Key Differences

PropertyConsumptionFlex Consumption
SKUY1 (Dynamic)FC1 (FlexConsumption)
Plan requiredOptional (auto-created)Required (must be explicit)
OSLinuxLinux only
ConfigurationApp settingsfunctionAppConfig section
StorageWEBSITE_CONTENTSHARE settingdeployment.storage in functionAppConfig

Deprecated Settings (Do NOT Migrate)

These app settings are NOT supported in Flex Consumption and should be filtered out:

  • WEBSITE_USE_PLACEHOLDER_DOTNETISOLATED

  • AzureWebJobsStorage* (replaced by identity-based config)

  • WEBSITE_MOUNT_ENABLED

  • ENABLE_ORYX_BUILD

  • FUNCTIONS_EXTENSION_VERSION (set via functionAppConfig)

  • FUNCTIONS_WORKER_RUNTIME (set via functionAppConfig)

  • FUNCTIONS_WORKER_RUNTIME_VERSION

  • FUNCTIONS_MAX_HTTP_CONCURRENCY

  • FUNCTIONS_WORKER_PROCESS_COUNT

  • FUNCTIONS_WORKER_DYNAMIC_CONCURRENCY_ENABLED

  • SCM_DO_BUILD_DURING_DEPLOYMENT

  • WEBSITE_CONTENTAZUREFILECONNECTIONSTRING

  • WEBSITE_CONTENTOVERVNET

  • WEBSITE_CONTENTSHARE

  • WEBSITE_DNS_SERVER

  • WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT

  • WEBSITE_NODE_DEFAULT_VERSION

  • WEBSITE_RUN_FROM_PACKAGE

  • WEBSITE_SKIP_CONTENTSHARE_VALIDATION

  • WEBSITE_VNET_ROUTE_ALL

  • APPLICATIONINSIGHTS_CONNECTION_STRING (already created in new app)

Troubleshooting

IssueRemediation
Cold start performance issuesReview concurrency settings; check for missing dependencies
Missing bindingsVerify extension bundles; update binding configurations
Permission errorsCheck identity assignments and role permissions
Network connectivityValidate access restrictions and networking settings
Missing App InsightsRecreate the Application Insights connection
App fails to startCheck portal Diagnose & Solve; review App Insights Failures blade
Triggers not processingVerify binding configs, connection strings, consumer groups

Rollback

  1. Obtain immediate confirmation, then restart the source app if it was stopped: az functionapp start --name <SOURCE_APP_NAME> --resource-group <SOURCE_RESOURCE_GROUP>

  2. Redirect clients back to original resources (queues/topics/containers)

  3. Revert DNS or custom domain changes

  4. Obtain separate confirmation before deleting the new Flex Consumption app if needed

References

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs Python

The author says: python3.10+

Security

What our scanner noticed· Low risk

  • Instructions that use the network
  • Scripts that your agent may run

This skill includes scripts that your agent may run. Read them before you use it.

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
Microsoft
Publisher
Microsoft (Official)
Source
microsoft/skills · .github/plugins/azure-skills/skills/azure-upgrade · commit 0696600
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from .github/plugins/azure-skills/LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced
Also distributed in
microsoft/azure-skills

AutoGineer is not affiliated with or endorsed by Microsoft.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download azure-upgrade.zip