Before encountering the issue at hand on 2025.04.15, the deployment and publishing process from Visual Studio 2024 to Azure had been straight forward, without glitches, via the use of a unique Service App Plan.
When the number of deployments being published was growing, guided by my own ignorance on the subject matter on how to properly configure Service App Plans, I accidentally created 3 new App Service Plans with the wrong price teer.
I am not complaining, since all the research I have done using Copilot, Azure PowerShell, MSFT Azure Learning series, and guidance from subject-matter experts like you have been an excellent opportunity to explore a little bit deeper the treasure hiding under the covers of the amazing Microsoft AI Technology. I will take my mistake as a learning opportunity, as the old saying goes: “a slip can prevent a fall.”
Before implementing your advice, I deleted the App Services associated with the 3 new App Service Plans.
Sign in to the Azure Portal.
1. Navigate to Resource Groups section.
2. Look for the App Service Plans.
3. Select the App Service Plans you want to delete.
4. Click on the Delete option to remove them.
Here is what I got – The 3 new App Service Plans disappeared in the Portal. It shows only the Unique Service Plan that I have used all along with the Free Price Teer.
![A screenshot of a chatAI-generated content may be incorrect.]
I proceeded to investigate how the deployment of the 3 New Service Plan took place versus the one for the Unique Service Plan with a free Price Teer.
![A screenshot of a computerAI-generated content may be incorrect.]
Here is the template used by Azure to deploy the 3 New Service Plans:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"appService_AzureFLMxxxxTrack8_name": {"type": "String"
},
"appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_location": {
"type": "String"
},
"appServicePlan_AzureFLMxxxxxTrack8Web20250425130308Plan_name": {
"type": "String"
},
"currentStack": {
"type": "String"
},
"appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_skuName": {
"type": "String"
},
"appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_skuTier": {
"type": "String"
},
"appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_skuFamily": {
"type": "String"
},
"appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_skuSize": {
"type": "String"
},
"appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_workerSizeId": {
"type": "Int"
}
},
"resources": [
{
"type": "Microsoft.Web/sites",
"apiVersion": "2023-12-01",
"name": "[parameters('appService_AzureFLMxxxxTrack8_name')]",
"location": "[parameters('appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_location')]",
"dependsOn": [
"[resourceId('Microsoft.Web/serverFarms', parameters('appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_name'))]"
],
"tags": {
"[concat('hidden-related:', resourceId('Microsoft.Web/serverFarms', parameters('appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_name')))]": "empty"
},
"kind": "app",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"name": "[parameters('appService_AzureFLMxxxxTrack8_name')]",
"httpsOnly": true,
"reserved": false,
"serverFarmId": "[resourceId('Microsoft.Web/serverFarms', parameters('appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_name'))]",
"autoGeneratedDomainNameLabelScope": "TenantReuse",
"siteConfig": {
"netFrameworkVersion": "v8.0",
"ftpsState": "FtpsOnly",
"metadata": [
{
"name": "CURRENT_STACK",
"value": "[parameters('currentStack')]"
}
]
}
},
"resources": [
{
"type": "Microsoft.Web/sites/basicPublishingCredentialsPolicies",
"apiVersion": "2022-09-01",
"name": "[concat(parameters('appService_AzureFLMxxxxTrack8_name'), '/scm')]",
"dependsOn": [
"[resourceId('Microsoft.Web/Sites', parameters__('appService_AzureFLMxxxxTrack8_name'))]"__
],
"properties": {
"allow": false
}
},
{
"type": "Microsoft.Web/sites/basicPublishingCredentialsPolicies",
"apiVersion": "2022-09-01",
"name": "[concat(parameters('appService_AzureFLMxxxxTrack8_name'), '/ftp')]",
"dependsOn": [
"[resourceId('Microsoft.Web/Sites', parameters('appService_AzureFLMxxxxTrack8_name'))]"
],
"properties": {
"allow": false
}
}
]
},
{
"type": "Microsoft.Web/serverFarms",
"apiVersion": "2018-02-01",
"name": "[parameters('appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_name')]",
"location": "[parameters('appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_location')]",
"sku": {
"Name": "[parameters('appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_skuName')]",
"Tier": "[parameters('appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_skuTier')]"
},
"kind": "",
"properties": {
"name": "[parameters('appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_name')]",
"workerSize": "[parameters('appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_workerSizeId')]",
"workerSizeId": "[parameters('appServicePlan_AzureFLMxxxxTrack8Web20250425130308Plan_workerSizeId')]",
"numberOfWorkers": "1",
"reserved": false
}
}
]
}
Here is the deployment template using the FREE Price Teer that have allowed me to experience a happy and speedy process to deploy and publish web apps into Azure.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"appService_xxxxNetCore8_name": {
"type": "String"
},
"appServicePlan_RMGxxxxore6AzurePlan_location": {
"type": "String"
},
"appServicePlan_RMGxxxore6AzurePlan_name": {
"type": "String"
},
"appServicePlan_RMGxxxxore6AzurePlan_resourceGroup": {
"type": "String"
},
"currentStack": {
"type": "String"
}
},
"resources": [
{
"type": "Microsoft.Web/sites",
"apiVersion": "2018-02-01",
"name": "[parameters('appService_xxxxtCore8_name')]",
"location": "[parameters('appServicePlan_RMGxxxxore6AzurePlan_location')]",
"tags": {
"[concat('hidden-related:', resourceId(parameters('appServicePlan_RMGxxxxore6AzurePlan_resourceGroup'),'Microsoft.Web/serverFarms', parameters('appServicePlan_RMGxxxxore6AzurePlan_name')))]": "empty"
},
"kind": "app",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"name": "[parameters('appService_xxxxNetCore8_name')]",
"httpsOnly": true,
"reserved": false,
"serverFarmId": "[resourceId(parameters('appServicePlan_RMGxxxxore6AzurePlan_resourceGroup'),'Microsoft.Web/serverFarms', parameters('appServicePlan_RMGxxxxore6AzurePlan_name'))]",
"siteConfig": {
"netFrameworkVersion": "v8.0",
"ftpsState": "FtpsOnly",
"metadata": [
{
"name": "CURRENT_STACK",
"value": "[parameters('currentStack')]"
}
]
}
}
}
]
}
You were absolute right with your recommendation:
Keep in mind that even after deleting the apps within an App Service plan, the plan itself may continue to accrue charges based on its configured pricing tier and number of instances. To avoid ongoing charges, ensure that you delete the App Service plan itself or scale it down to the Free tier.
To understand better the associated costs or if you keep getting charged, you might want to check your billing overview in the Cost Management + Billing section of the Azure Portal
This was the way to verify that the 3 New App Service Plans exist in the portal.
![A screenshot of a computerAI-generated content may be incorrect.]
“Looking for a destination, in this case finding a solution to this cantankerous issue is like driving a car at night. You can see only as far as your headlights, but you can make the whole trip that way.” - E. L. Doctorow
What I would like to learn from this experience is to know the steps required to scale it down to the Free tier. I tried on my own, but unfortunately, I failed with my attempt due to my lack of knowledge in this area.
There were many other things I tried in Azure PowerShell that corroborated the findings I found in the Portal.
By all means, thank you so much again for your commitment to help me finding the solution that might have been impacted to software developers at large around the world.
FLM