As Azure grows and resources continue to improve, Microsoft will continuously retire old and outdated resources. Any resources not migrated by the retirement date may stop working as Microsoft shuts down the endpoints on which they run. Below is a list of all resources that will be retired within the next six months.
| Date | Retiring Resource | Feature/Version | New Resource | Migration Plan |
| 2025-06-17 | Azure Kubernetes Service | Ubuntu 18.04 | Ubuntu 22.04 | Upgrade |
| 2025-06-30 | Azure SQL | Connector v1 Operations | Connector v2 Operations | Migrate |
| 2025-06-30 | SAP HANA Large Instances (HLIs) | Entire Service | Azure Virtual Machines | Migrate |
| 2025-08-31 | Application Gateway | TLS 1.0/1.1 | TLS 1.2 | Update |
| 2025-08-31 | Azure SQL DB | TLS 1.0/1.1 | TLS 1.2 | Update |
| 2025-08-31 | Azure IoT Hub | TLS 1.0/1.1 | TLS 1.2 | Update |
| 2025-08-31 | Azure SQL Managed Instance | TLS 1.0/1.1 | TLS 1.2 | Update |
| 2025-08-31 | Azure Cosmos DB | TLS 1.0/1.1 | TLS 1.2 | Update |
| 2025-08-31 | Azure Database for MySQL Flexible Server | TLS 1.0/1.1 | TLS 1.2 | Update |
| 2025-09-01 | Azure Machine Learning | Data Drift | Model Monitor | MIgrate |
| 2025-09-15 | Azure Monitor | Azure Activity Logs | Diagnostic Settings | Migrate |
| 2025-09-19 | Azure Database for MariaDB | Entire Service | Azure Database for MySQL Flexible Server | Migrate |
| 2025-09-26 | Azure Purview | Data Sharing | Microsoft Fabric | Transition |
| 2025-09-30 | Azure Disks | Unmanaged Disks | Managed Disks | Migrate |
| 2025-09-30 | Azure Load Balancer | Basic Load Balancer | Standard Load Balancer | Upgrade |
| 2025-09-30 | Public IP Address | Basic SKU | Standard SKU | Upgrade |
| 2025-09-30 | Azure SQL | Microsoft.SQL 2014-04-01 stable APIs | Microsoft.SQL 2021-11-01 stable APIs | Transition |
| 2025-09-30 | Azure Functions | Proxy Support | N/A | Transition |
| 2025-09-30 | Azure Monitor | ITSM connector for ServiceNow Alerts & Events | N/A | Transition |
| 2025-09-30 | Azure Batch | Low Priority VMs | Spot VMs | Transition |
| 2025-09-30 | Application Insights | API Key | Entra authentication | Update |
| 2025-09-30 | Azure Machine Learning | CLI v1 | CLI v2 | Upgrade |
| 2025-09-30 | Azure Service Map | Entire Service | Azure Monitor VM Insights | Migrate |
| 2025-09-30 | Application Insights | Java 2.x SDK | Java 3x SDK | Upgrade |
| 2025-09-30 | Virtual Machines | Default Outbound Access | Explicit Outbound Methods | Transition |
| 2025-09-30 | Azure DB for MySQL | MySQL v5.7 | MySQL v8 | Upgrade |
| 2025-09-30 | VPN Gateway | Standard & High-Performance SKUs | Newer SKUs | Upgrade |
| 2025-09-30 | Azure vFXT | Entire Service | N/A | Transition |
| 2025-09-30 | Azure HPC Cache | Entire Service | N/A | Transition |
| 2025-09-30 | Virtual Machines | Standard_NC6s_v3, Standard_NC12s_v3 & Standard_NC24s_v3 | Newer series | Upgrade |
| 2025-09-30 | Microsoft Defender for Cloud | Microsoft Actions & Compliance offerings | N/A | Transition |
| 2025-09-30 | Azure Batch Pools | Default Outbound Access | Explicit Outbound Methods | Transition |
| 2025-09-30 | Azure Batch | NCv3-series VMs | Newer series | Upgrade |
| 2025-09-30 | Speech | Speaker Recognition | Nuance Gatekeeper or similar | Transition |
| 2025-09-30 | Azure Maps | Data Registry API 2023-06-01 | N/A | Transition |
| 2025-09-30 | Azure Maps | Creator Service APIs V2 & 2023-03-01-preview | N/A | Transition |
| 2025-09-30 | Azure SQL Edge | Entire Service | Other SQL editions | Migrate |
| 2025-09-30 | Azure Remote Rendering | Entire Service | N/A | Transition |
| 2025-09-30 | Speech | Intent Recognition | Speech Recognition | Transition |
| 2025-09-30 | Azure Maps | Spatial APIs V1 & 2022-08-01 | N/A | Transition |
| 2025-10-01 | Cognitive Services | Language Understanding (LUIS) | Cognitive Service for Language | Migrate |
| 2025-10-01 | Azure Monitor | Log Analytics alert API | Scheduled Query Rules API | Upgrade |
| 2025-10-01 | App Service | Python 3.9 | Python 3.10 or higher | Upgrade |
| 2025-10-07 | Azure Synapse Analytics | Data Explorer | Eventhouse (Microsoft Fabric) | Transition |
| 2025-10-31 | Azure Functions | Python 3.9 | Python 3.10 or higher | Upgrade |
| 2025-11-01 | Azure Storage | TLS 1.0/1.1 | TLS 1.2 | Update |
| 2025-11-09 | Azure Database for PostgreSQL | FlexibleServers- Version 11 | FlexibleServers- Version 1 or higher | Upgrade |
| 2025-12-31 | App Service | PHP 8.1 | PHP 8.4 | Upgrade |
**Updated 6/5/2025**
There are several ways to determine if your environment is running these retiring resources.
Microsoft will send out emails regularly with information about resources in your tenant that are being retired. It will include a list of resources affected, information about what is being retired, and a plan to transition to the latest version of each resource.

Portal
When accessing resources in the portal, Microsoft will show a notification on any resource that is being retired. It may include a link to documentation on transitioning to the latest version and a link to do a step-by-step migration using their wizard.


Azure Advisor
Azure provides a resource called Advisor, which contains a Workbook that compiles a list of all resources announced as retiring. To access this, log into the portal and go to Advisor. On the left panel, select Workbooks. Choose the Service Retirement (Preview) from the list by clicking on it. Here, you can see a list of all resources being retired and any affected resources in your tenant. You can edit and save the Workbook and pin it to a Dashboard for easy access.

CLI
Either Azure CLI or PowerShell can be used to search for resources programmatically. In the below example, the Azure CLI can be used to find all Classic resources.
# Define the tenant ID
$tenantId = "XXXXXXXXXXX"
# Connect to Azure with the specific tenant
az login --tenant $tenantId
# Get all subscriptions in the specified tenant
$subscriptions = az account list --query "[?tenantId=='$tenantId'].{id:id, name:name}" --output json | ConvertFrom-Json
# Initialize array to hold all classic resources across all subscriptions
$allClassicResources = @()
# Loop through each subscription
foreach ($subscription in $subscriptions) {
Write-Output "Processing subscription: $($subscription.name)"
# Set the current subscription context
az account set --subscription $subscription.id
# List classic resources in the current subscription
$classicResources = az resource list --query "[?contains(type, 'Classic')]" --output json | ConvertFrom-Json
# Add subscription ID and name to each resource for context
foreach ($resource in $classicResources) {
$resource | Add-Member -MemberType NoteProperty -Name SubscriptionId -Value $subscription.id
$resource | Add-Member -MemberType NoteProperty -Name SubscriptionName -Value $subscription.name
$allClassicResources += $resource
}
}
# Display the classic resources
if ($allClassicResources.Count -eq 0) {
Write-Output "No classic resources found across all subscriptions."
} else {
Write-Output "Classic resources found across all subscriptions:"
$allClassicResources | ForEach-Object {
Write-Output "Subscription: $($_.SubscriptionName) ($($_.SubscriptionId))"
Write-Output "Name: $($_.name)"
Write-Output "Type: $($_.type)"
Write-Output "Resource Group: $($_.resourceGroup)"
Write-Output "Location: $($_.location)"
Write-Output "---------------------------"
}
}
For more information or any questions, please contact us.