Last reviewed: April 9, 2025
🛠️ Troubleshooting Deployment Issues
Even with a well-defined deployment model, Managed Application provisioning can occasionally fail due to Azure platform behavior or transient conditions.
This page outlines common causes, how to interpret failures, and how to retry provisioning using a script-based approach.
📘 In this article:
⚠️ Common Deployment Issues
Managed Application deployments can fail for a variety of reasons, including:
-
💥 Regional Capacity Limits
Some services (e.g., Cosmos DB, App Service) may be unavailable in certain regions due to quota constraints. -
⚠️ Transient Platform Errors
Occasional cold starts, DNS resolution issues, or service timeouts may interrupt deployment unexpectedly. -
⛓️ Dependency Propagation Delays
Entra ID App Registrations, Private DNS Zones, or User-Assigned Managed Identities may not be fully available immediately. -
🪝 Third-Party Integration Timing
Pipelines, webhooks, and Microsoft Graph calls may occasionally hit retry or timeout scenarios.
💡 If your deployment fails with a
ProvisioningState = Failed
, check the Managed Application resource in the Azure Portal to review the error(s).
🔁 Retrying a Failed Deployment
The Managed Application must reach ProvisioningState = Succeeded
to complete an ArchTechLytics deployment. If provisioning fails due to regional capacity or transient platform issues, you can retry provisioning by issuing a PUT
request to the Azure Resource Manager (ARM) API.
Step 1: Retrieve Managed Application Metadata
You’ll need to collect key values from your existing (failed) Managed Application instance before issuing a retry request. These values will be used in the HTTP request body.
🔎 Using the Azure Portal
- Go to the Resource Group that contains the Managed Application (not the managed resource group).
- Click on the Managed Application (Type:
Microsoft.Solutions/applications
). - In the Overview tab, note the following:
- Resource ID
- Region
- Managed Resource Group ID
- Open the JSON View (top-right of the Overview tab).
- Extract the following properties for use in the retry script:
location
plan
(name, product, publisher, version)properties.managedResourceGroupId
properties.parameters
properties.publisherTenantId
properties.authorizations
Step 2: Resubmit Application for Provisioning
There are multiple ways to resubmit the provisioning request. Choose the method that matches your tooling preference.
🔁 Option 1 – PowerShell
Use the following PowerShell script to re-initiate provisioning. Replace the placeholder values with the ones you retrieved via the Azure Portal in Step 1.
$token = Get-AzAccessToken
$url = "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Solutions/applications/<managedAppName>?api-version=2021-07-01"
$body = @{
location = "<location>"
kind = "MarketPlace"
plan = @{
name = "<planName>"
product = "<productName>"
publisher = "<publisherId>"
version = "<version>"
}
properties = @{
managedResourceGroupId = "<full-managed-rg-id>"
parameters = @{
location = @{ value = "<region>" }
notificationEmail = @{ value = "<your-email>" }
tenantDefaultDomainName = @{ value = "<your-tenant>.onmicrosoft.com" }
virtualNetworkAddressSpace = @{ value = "10.0.0.0/16" }
webSubnetPrefix = @{ value = "10.0.1.0/24" }
privateEndpointsSubnetPrefix = @{ value = "10.0.2.0/27" }
dataSubnetPrefix = @{ value = "10.0.3.0/24" }
mgmtSubnetPrefix = @{ value = "10.0.4.0/26" }
integrationSubnetPrefix = @{ value = "10.0.5.0/27" }
}
publisherTenantId = "<publisher-tenant-id>"
authorizations = @(
@{
principalId = "<principal-1-guid>"
roleDefinitionId = "<role-def-id-1>"
},
@{
principalId = "<principal-2-guid>"
roleDefinitionId = "<role-def-id-2>"
}
)
managementMode = "Managed"
customerSupport = @{
contactName = "<placeholder>"
email = "<placeholder>"
phone = "<placeholder>"
}
supportUrls = @{
publicAzure = "<placeholder>"
}
}
}
$jsonBody = $body | ConvertTo-Json -Depth 10
Invoke-RestMethod -Uri $url -Method Put -Headers @{
"Authorization" = "Bearer $($token.Token)"
"Content-Type" = "application/json"
} -Body $jsonBody
🔁 Option 2 – Azure CLI (az rest)
Save the JSON body from above to a file called body.json, then run:
az rest --method put \
--uri "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Solutions/applications/<managedAppName>?api-version=2021-07-01" \
--body "@body.json"
You can retrieve your access token using:
az account get-access-token --resource https://management.azure.com
🔁 Option 3 – cURL
If you prefer curl
, use this format (requires the same JSON body file and access token):
curl -X PUT "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Solutions/applications/<managedAppName>?api-version=2021-07-01" \
-H "Authorization: Bearer <your-access-token>" \
-H "Content-Type: application/json" \
-d @body.json