{"record":{"id":"601e6b7328c01fe9","repo":"microsoft/aspire","slug":"azureprovisioningfailureexception-request-failure-details","errorCode":null,"errorMessage":"AzureProvisioningFailureException (request failure details, location availability)","messagePattern":"AzureProvisioningFailureException \\(request failure details, location availability\\)","errorType":"exception","errorClass":"AzureProvisioningFailureException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Hosting.Azure/Provisioning/Provisioners/BicepProvisioner.cs","lineNumber":739,"sourceCode":"                context,\n                deploymentId,\n                effectiveLocation,\n                deploymentOperationTracker,\n                force: true,\n                statePersistenceCancellationToken).ConfigureAwait(false);\n\n            if (summary.FailedOperations.FirstOrDefault(static operation => operation.FailureDetails is not null)?.FailureDetails is { } failureDetails)\n            {\n                LogProvisioningFailure(resourceLogger, failureDetails);\n                throw new AzureProvisioningFailureException(failureDetails, ex);\n            }\n\n            var requestFailureDetails = AzureProvisioningFailureDetails.FromRequestFailedException(ex, AzureProvisioningFailureDetails.ProvisionOperation);\n            if (requestFailureDetails.IsLocationAvailabilityFailure)\n            {\n                requestFailureDetails = await EnrichFailureDetailsAsync(requestFailureDetails, context, effectiveLocation, cancellationToken).ConfigureAwait(false);\n                LogProvisioningFailure(resourceLogger, requestFailureDetails);\n                throw new AzureProvisioningFailureException(requestFailureDetails, ex);\n            }\n\n            LogProvisioningFailure(resourceLogger, requestFailureDetails);\n            throw;\n        }\n        catch (OperationCanceledException)\n        {\n            if (await TryCancelDeploymentAsync(deployments, deploymentName, resourceLogger, treatMissingOrInactiveAsCanceled: true).ConfigureAwait(false) &&\n                stateSection is not null)\n            {\n                UpdateDeploymentState(stateSection, locationOverride, deploymentId, parameters, outputObj: null, scope, checksum, effectiveLocation, DeploymentStateProvisioningStateCanceled);\n                await deploymentStateManager.SaveSectionAsync(stateSection, statePersistenceCancellationToken).ConfigureAwait(false);\n            }\n\n            throw;\n        }\n        finally\n        {","sourceCodeStart":721,"sourceCodeEnd":757,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Hosting.Azure/Provisioning/Provisioners/BicepProvisioner.cs#L721-L757","documentation":"When the deployment exception has no per-operation FailureDetails, BicepProvisioner builds AzureProvisioningFailureDetails from the RequestFailedException itself. If the details indicate a location availability failure (capacity/sku unavailable in the chosen region), the details are enriched (EnrichFailureDetailsAsync) with region suggestions and then thrown as AzureProvisioningFailureException. This distinguishes region-capacity problems from generic template errors.","triggerScenarios":"ARM request fails with an error whose failure details (FromRequestFailedException) have IsLocationAvailabilityFailure set - e.g. SKU/capacity errors like 'SkuNotAvailable' or zonal capacity errors - during GetOrCreateResourceAsync deployment for the resource's effective location.","commonSituations":"Provisioning resources in a region without capacity (e.g. Premium SKU in a smaller region), restricted subscription not enabled for a region/zonal SKU, or a location that doesn't support the requested SKU family.","solutions":["Switch the resource's region: override the location for the resource (or the whole AppHost) to a region with capacity.","Review the enriched failure details / logs for the suggested alternate regions and pick one.","Request quota or regional access for the SKU if the region is required.","Retry later if it is a transient capacity shortage (capacity errors are often time-limited)."],"exampleFix":"// before\nvar cosmos = builder.AddAzureCosmosDB(\"cosmos\"); // defaults to AppHost location without capacity\n\n// after\nvar cosmos = builder.AddAzureCosmosDB(\"cosmos\").WithAnnotation(new AzureLocationAnnotation(\"westus2\"));","handlingStrategy":"try-catch","validationCode":"// Check the SKU is offered in the target region before deploying\naz vm list-skus --location <region> --size <sku-family> --output table","typeGuard":"static bool IsLocationAvailability(AzureProvisioningFailureException ex) => ex.FailureDetails?.IsLocationAvailabilityFailure == true;","tryCatchPattern":"try\n{\n    await provisioner.GetOrCreateResourceAsync(resource, ct);\n}\ncatch (AzureProvisioningFailureException ex) when (ex.FailureDetails?.IsLocationAvailabilityFailure == true)\n{\n    // pick an alternate region from ex.FailureDetails (enriched with suggestions) and retry once\n}","preventionTips":["Pin known-capacity regions for SKUs your app requires.","Handle the enriched failure details to surface alternate-region suggestions in tooling.","Verify subscription regional access/quota before first deploy to a new region."],"tags":["azure","provisioning","region","capacity"],"backgroundTag":"api-error-response","analyzedSha":"25830f84bd145686607ad00c057b3f84e2e51d43","analyzedAt":"2026-09-16T11:10:06.193Z","contentChangedAt":"2026-09-16T11:10:06.193Z","schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}