Azure Upgrade
MicrosoftOfficialCreated by Microsoft
- Skill
- Workflow
- Cloud and DevOps
- MIT
- Low risk
- Has scripts
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
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/microsoft/azure-upgrade/downloadUnzip 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.*→ moderncom.azure.*). This is NOT for cross-cloud migration — useazure-cloud-migratefor that.
Triggers
| User Intent | Example 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
Follow phases in order. Skip or defer work only when the selected scenario explicitly permits it, and record the reason in the migration status.
Generate an assessment before any upgrade operations
Load the scenario reference and follow its rules
Use
mcp_azure_mcp_get_azure_bestpracticesandmcp_azure_mcp_documentationMCP toolsDestructive actions require
ask_user— global-rulesAlways confirm the target plan/SKU with the user before proceeding
Propose a name for any new resource (default:
<source>-<target-suffix>, e.g.<source>-flexfor 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.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_userto describe the exact change and obtain explicit approval. Approval is action-specific and cannot be reused for later source changes.Never delete or stop the original app without explicit user confirmation
Keep approval-gated workflows moving: after each completed step, immediately perform the next read-only preflight. If the next action requires approval, invoke
ask_userin the same turn — never stop after merely announcing the next step and wait for the user to re-engage.All automation scripts must be idempotent and resumable
Upgrade Scenarios
| Source | Target | Reference |
|---|---|---|
| Azure Functions Consumption Plan (Linux) | Azure Functions Flex Consumption Plan | workflow.md |
| Azure Functions Consumption Plan (Windows) | Azure Functions Flex Consumption Plan | workflow.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/Premium | Azure Managed Redis (AMR) | services/redis/redis-to-amr.md |
| Azure Cache for Redis Enterprise (ACRE) / Enterprise Flash | Azure 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 listfor 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_documentationandmcp_azure_mcp_get_azure_bestpracticestools to research the upgrade path.
MCP Tools
| Tool | Purpose |
|---|---|
mcp_azure_mcp_get_azure_bestpractices | Get Azure best practices for the target service |
mcp_azure_mcp_documentation | Look up Azure documentation for upgrade scenarios |
mcp_azure_mcp_appservice | Query App Service and Functions plan details |
mcp_azure_mcp_applicationinsights | Verify monitoring configuration |
Steps
Identify — Determine the source and target Azure plans/SKUs. Ask user to confirm.
Assess — Analyze existing app for upgrade readiness → load scenario reference (e.g., workflow.md)
Pre-migrate — Collect settings, identities, configs from the existing app
Upgrade — Execute the automated upgrade steps (create new resources, migrate settings, deploy code)
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.
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.
Hand off to
azure-validatefor deep validation orazure-deployfor CI/CD setup
Track progress in <UPGRADE_DIR>/upgrade-status.md — see Artifact Output Policy for path resolution.
References
Functions
Redis
Redis (ACR or ACRE) to AMR Migration — routes to dedicated amr-migration-skill (ACR/OSS) or acre-to-amr-migration-skill (Enterprise)
Java SDK Migration Templates
Next
After upgrade is validated, hand off to:
azure-validate— for thorough post-upgrade validationazure-deploy— if the user wants to set up CI/CD for the new app
Files
- ATTRIBUTION.mdAdded by AutoGineer971 B
- LICENSELicence file added by AutoGineer1.1 KiB
- SKILL.md8.7 KiB
- references/global-rules.md4.5 KiB
- references/languages/java/INSTRUCTION.md11.3 KiB
- references/languages/java/README.md3.0 KiB
- references/languages/java/bom-migration/bom-gradle-settings.md6.7 KiB
- references/languages/java/bom-migration/bom-gradle-toml.md2.7 KiB
- references/languages/java/bom-migration/bom-gradle.md5.1 KiB
- references/languages/java/bom-migration/bom-maven.md4.7 KiB
- references/languages/java/bom-migration/bom-migration.md4.2 KiB
- references/languages/java/bom-migration/bom-validation.md1.5 KiB
- references/languages/java/package-specific/com.microsoft.azure.eventprocessorhost.md5.5 KiB
- references/languages/java/package-specific/com.microsoft.azure.management.md9.5 KiB
- references/languages/java/rules/efficiency.md265 B
- references/languages/java/rules/execution-guidelines.md1.0 KiB
- references/languages/java/rules/review-code-changes.md541 B
- references/languages/java/rules/troubleshooting.md2.5 KiB
- references/languages/java/rules/upgrade-strategy.md1.4 KiB
- references/languages/java/rules/upgrade-success-criteria.md686 B
- references/languages/java/scripts/upgrade_bom.pyScript19.6 KiB
- references/languages/java/templates/PLAN_TEMPLATE.md9.4 KiB
- references/languages/java/templates/PROGRESS_TEMPLATE.md9.1 KiB
- references/languages/java/templates/SUMMARY_TEMPLATE.md8.6 KiB
- references/languages/java/workflow/phase-1-precheck.md2.3 KiB
- references/languages/java/workflow/phase-2-plan.md2.9 KiB
- references/languages/java/workflow/phase-3-execute.md2.4 KiB
- references/languages/java/workflow/phase-4-summarize.md1.1 KiB
- references/services/functions/consumption-to-flex/linux/assessment.md4.6 KiB
- references/services/functions/consumption-to-flex/linux/automation.md17.3 KiB
- references/services/functions/consumption-to-flex/linux/workflow.md11.6 KiB
- references/services/functions/consumption-to-flex/windows/assessment.md6.8 KiB
- references/services/functions/consumption-to-flex/windows/automation.md4.1 KiB
- references/services/functions/consumption-to-flex/windows/automation/access-key-copy.md2.5 KiB
- references/services/functions/consumption-to-flex/windows/automation/access-key-strategy.md2.1 KiB
- references/services/functions/consumption-to-flex/windows/automation/app-creation.md16.6 KiB
- references/services/functions/consumption-to-flex/windows/automation/app-settings.md12.0 KiB
- references/services/functions/consumption-to-flex/windows/automation/built-in-authentication.md3.3 KiB
- references/services/functions/consumption-to-flex/windows/automation/cleanup-and-rollback.md3.2 KiB
- references/services/functions/consumption-to-flex/windows/automation/code-deployment.md8.6 KiB
- references/services/functions/consumption-to-flex/windows/automation/configuration-inventory.md7.2 KiB
- references/services/functions/consumption-to-flex/windows/automation/deployment-package.md6.0 KiB
- references/services/functions/consumption-to-flex/windows/automation/discovery-and-assessment.md9.1 KiB
- references/services/functions/consumption-to-flex/windows/automation/networking-and-storage.md3.9 KiB
- references/services/functions/consumption-to-flex/windows/automation/site-and-identity.md5.0 KiB
- references/services/functions/consumption-to-flex/windows/automation/trigger-safety-and-monitoring.md11.8 KiB
- references/services/functions/consumption-to-flex/windows/automation/validation-and-cutover.md9.7 KiB
- references/services/functions/consumption-to-flex/windows/dependency-scan.md13.3 KiB
- references/services/functions/consumption-to-flex/windows/progress-tracking.md5.2 KiB
- references/services/functions/consumption-to-flex/windows/workflow.md27.9 KiB
- references/services/redis/redis-to-amr.md7.5 KiB
- references/workflow-details.md2.1 KiB
references/languages/java/INSTRUCTION.md
Azure SDK Migration Guidelines
Context
The application is identified using legacy Azure SDKs for Java (com.microsoft.azure.*). These libraries reached end of support in 2023. They are not recommended for use in production, should be migrated to the latest Azure SDKs with the latest security patches and new capabilities support.
Follow these steps:
Inventory legacy dependencies: Use tools such as
mvn dependency:treeorgradlew dependenciesto find everycom.microsoft.azure.*SDK and map each one to its modern counterpart undercom.azure.*. Do not rely solely on the root reactor — also grep the entire repository for legacy coordinates so you catch build files that aren't reachable from the root project. Run from the repo root:# Find every file referencing legacy groupIds/artifacts, including CI, samples, parent poms, buildSrc, version catalogs, Dockerfiles, and docs. grep -RIn --exclude-dir={.git,target,build,node_modules,out} \ -E 'com\.microsoft\.azure(\.|:)|microsoft-azure-|azure-eventhubs-eph|azure-keyvault(:|["'\''])' .PowerShell equivalent (run from repo root):
Get-ChildItem -Path . -Recurse -File | Where-Object { $_.FullName -notmatch '(\\|/)(\.git|target|build|node_modules|out)(\\|/)' } | Select-String -Pattern 'com\.microsoft\.azure(\.|:)|microsoft-azure-|azure-eventhubs-eph|azure-keyvault(:|["''])'Commonly overlooked locations:
.ci/**/pom.xml,ci/**, parent/BOM poms,buildSrc/,gradle/libs.versions.toml,settings.gradle(.kts),archetype-resources/, sample sub-modules, Dockerfiles, shell/PowerShell scripts, and README snippets. Every hit must end up on the migration file list.Adopt supported SDKs: Replace the legacy dependencies with their modern equivalents in your
pom.xmlorbuild.gradle, following the migration guide to align feature parity and new SDK names.Update application code: Refactor your code to the builder-based APIs, updated authentication flows (Azure Identity), and modern async or reactive patterns required by the latest SDKs. Add concise comments explaining non-obvious changes.
Test thoroughly: Run unit, integration, and end-to-end tests to validate that the modern SDKs behave as expected, focusing on authentication, retry, and serialization differences.
Migration Guide
Assumption
Project is Maven or Gradle.
Java code is on JDK 8 or above.
Migrate dependencies (Add them to plan guidelines when generating plan)
Immediately load and read BOM Migration Guide before choosing TARGET_AZURE_SDK_BOM_VERSION; do not rely on this summary alone. The guide covers how to determine the latest BOM version, plus Maven, plain Gradle, TOML version catalogs (libs.versions.toml), and programmatic version catalogs (settings.gradle).
When writing the plan's Guidelines section, use only the latest stable azure-sdk-bom resolved by the BOM guide; do not infer it from the project, reuse an existing BOM version, copy a value from examples, or trust model memory. Record it as TARGET_AZURE_SDK_BOM_VERSION = <resolved-version> and use that exact value throughout the migration.
Migrate Java Code
Make a list of source code/maven/gradle files that contains legacy SDK packages. Migrate each of them.
Determine legacy SDK artifacts according to previous files, find suitable migration guides in Package-Specific Migration Guides and follow the guides whenever possible. Record which migration guide URL you used for each legacy package (e.g., in your plan or commit messages), so you can validate against them later.
Do not change the Java
package ...;declaration at the top of each source file, and do not rename or move the source file's directory path to match a new SDK package structure. Keep every.javafile in its original directory; only updateimportstatements and type usages inside the file body. For example, if a file lives insrc/main/java/com/microsoft/azure/eventprocessorhosts/Consumer.javawithpackage com.microsoft.azure.eventprocessorhosts;, it must stay in that exact directory and keep that exact package declaration — even though the modern SDK usescom.azure.messaging.eventhubs.Do not upgrade JDK version, if it is already JDK 8 or above.
If there is test in the project, Java code there also need to be updated.
Package-Specific Source Code Guidelines (Add them to plan guidelines when generating plan)
Use these package-specific references:
Validation
Make sure
Migrated project pass compilation.
All tests pass. Don't silently skip tests.
The plan's
Guidelinessection records the freshly resolved latest stable BOM target exactly asTARGET_AZURE_SDK_BOM_VERSION = <resolved-version>; this value must not remain a placeholder, must not be copied from the original project, and must match the current Azure SDK for Java BOM source of truth at validation time.No legacy SDK dependencies/references exist. This is a hard gate, not a self-assessment — you must prove it by running the commands below from the repo root and showing they return zero hits. Do not declare migration complete until all three return empty:
# 1. Legacy groupId / artifact references in ANY text file (pom.xml, *.gradle, *.gradle.kts, libs.versions.toml, Dockerfile, *.sh, *.md, etc.) grep -RIn --exclude-dir={.git,target,build,node_modules,out} \ -E 'com\.microsoft\.azure(\.|:)|microsoft-azure-|azure-eventhubs-eph|azure-keyvault(:|["'\''])' . # 2. Legacy imports still in Java sources grep -RIn --include='*.java' -E '^\s*import\s+com\.microsoft\.azure\.' . # 3. Every pom.xml and *.gradle(.kts) file in the repo (not just the root reactor) — eyeball each for legacy coordinates find . -type d \( -name .git -o -name target -o -name build -o -name node_modules \) -prune -o \ -type f \( -name 'pom.xml' -o -name '*.gradle' -o -name '*.gradle.kts' -o -name 'libs.versions.toml' \) -printPowerShell equivalent (run from repo root):
# 1. Legacy groupId / artifact references in ANY text file Get-ChildItem -Path . -Recurse -File | Where-Object { $_.FullName -notmatch '(\\|/)(\.git|target|build|node_modules|out)(\\|/)' } | Select-String -Pattern 'com\.microsoft\.azure(\.|:)|microsoft-azure-|azure-eventhubs-eph|azure-keyvault(:|["''])' # 2. Legacy imports still in Java sources Get-ChildItem -Path . -Recurse -File -Filter *.java | Where-Object { $_.FullName -notmatch '(\\|/)(\.git|target|build|node_modules|out)(\\|/)' } | Select-String -Pattern '^\s*import\s+com\.microsoft\.azure\.' # 3. Every pom.xml and *.gradle(.kts) file in the repo — eyeball each for legacy coordinates Get-ChildItem -Path . -Recurse -File -Include 'pom.xml','*.gradle','*.gradle.kts','libs.versions.toml' | Where-Object { $_.FullName -notmatch '(\\|/)(\.git|target|build|node_modules)(\\|/)' } | Select-Object -ExpandProperty FullNamePay special attention to files outside the root Maven/Gradle reactor— e.g.
.ci/**/pom.xml,ci/**,buildSrc/, sample sub-modules, archetype resources — these are frequently missed becausemvn dependency:treeon the root project never visits them.If azure-sdk-bom is used, ensure the BOM version exactly matches the resolved latest stable version recorded in the plan's
Guidelinessection asTARGET_AZURE_SDK_BOM_VERSIONand there are NO explicit version dependencies for Azure libraries that are in azure-sdk-bom. E.g. Instead ofimplementation 'com.azure.resourcemanager:azure-resourcemanager:2.60.0', we should useimplementation 'com.azure.resourcemanager:azure-resourcemanager'. For Azure libraries in azure-sdk-bom, check https://raw.githubusercontent.com/Azure/azure-sdk-for-java/main/sdk/boms/azure-sdk-bom/pom.xml. If the BOM version is missing, or differs from the resolved latest stable version, or individual Azure packages still have explicit versions that should be managed by the BOM, follow the appropriate section in BOM Migration Guide to fix it.Version catalog projects: Follow the BOM Validation Checklist — it covers TOML, programmatic
settings.gradlecatalogs, and plain Gradle.For each migration guide you recorded during migration:
Fetch and read the full content of the guide URL.
Identify the migrated source files that correspond to that guide's package.
Verify the migrated code follows the guide's recommended API replacements, class mappings, authentication patterns, and async/sync conventions.
Fix any deviations — do not just report them.
Package-Specific Migration Guides
Migrate to
com.azure.resourcemanager.**fromcom.microsoft.azure.management.**Migrate to com.azure:azure-messaging-servicebus from com.microsoft.azure:azure-servicebus
Migrate to azure-messaging-eventhubs from azure-eventhubs and azure-eventhubs-eph
Migrate to
azure-messaging-eventgridfrommicrosoft-azure-eventgridStorage Blob Service SDK Migration Guide from 10.x/11.x to 12.x
Storage File Share Service SDK Migration Guide from 8.x to 12.x
Migrate to azure-security-keyvault-secrets from azure-keyvault
Migrate to azure-security-keyvault-certificates from azure-keyvault
Migrate to
azure-ai-documentintelligencefromazure-ai-formrecognizerMigrate to
azure-ai-formrecognizer 4.0.0-beta.1 - abovefromazure-ai-formrecognizer 3.1.x - lowerMigration Guide from Azure OpenAI Java SDK to OpenAI Java SDK
Migrate to azure-monitor-query from azure-loganalytics and azure-applicationinsights-query
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