Azure SQL private endpoint creation fails with NIC InternalServerError / PutNicOperation in Central US

Henry Wood 20 Reputation points
2026-10-25T14:17:55.65+00:00
Creating a private endpoint for an Azure SQL logical server in Central US repeatedly fails while provisioning its managed network interface.

Initial error:
InternalServerError targeting Microsoft.Network/networkInterfaces/<endpoint-name>-nic
Message: “An error occurred.”

Redeploying the failed endpoint returns:
ReferencedResourceNotProvisioned — the NIC is in Failed state; its last operation was PutNicOperation.

Opening the referenced NIC subsequently returns ResourceNotFound (404).

Configuration:
- Target resource type: Microsoft.Sql/servers
- Target subresource: sqlServer
- Private endpoint subnet: 10.0.1.0/24
- Subnet delegation: None
- Private endpoint network policies: Disabled
- Dynamic private IP allocation
- Microsoft.Network provider: Registered, also re-registered
- App Service integration uses a separate subnet delegated to Microsoft.Web/serverFarms
- Private link connection appears approved, but provisioning fails
- No IP configuration is listed on the failed endpoint

What further diagnostics can identify why NIC provisioning fails? Could this be stale Network Resource Provider state, and is there a self-service recovery procedure?

Latest failure time (UTC): [insert]
Correlation ID: [insert]
Azure Private Link
Azure Private Link

An Azure service that provides private connectivity from a virtual network to Azure platform as a service, customer-owned, or Microsoft partner services.


Answer accepted by question author
Santhosh Kumar RS 80 Reputation points
2026-10-25T14:21:11.2566667+00:00

The symptoms suggest a failure during Azure Network Resource Provider (NRP) NIC provisioning, but they do not conclusively establish stale NRP state.

The key evidence is the initial InternalServerError on Microsoft.Network/networkInterfaces/<endpoint-name>-nic, followed by ReferencedResourceNotProvisioned for PutNicOperation and then ResourceNotFound (404) when retrieving the NIC.

Recommended diagnostics:

Inspect the failed ARM deployment operation and Azure Activity Log for the full error details, timestamp, and correlation ID.

Verify the private endpoint's actual NIC resource ID and determine whether the endpoint still exists or references a missing NIC.

Confirm subnet IP availability, subnet delegation, private endpoint network policies, SQL server resource ID, and the sqlServer target subresource.

Check for overlapping deployments, incomplete deletions, or residual endpoint resources.

Preserve the failure evidence and escalate to Microsoft Azure Support if the NIC continues to disappear without a specific configuration error.

Recovery: Microsoft's documented GET-then-SET approach can help when the failed resource and its configuration remain accessible. It cannot directly repair a NIC that returns 404. Avoid manually recreating the NIC with guessed properties or repeatedly retrying deployments without collecting new evidence.

Ask Microsoft Support to investigate the backend PutNicOperation in Central US and determine whether the NIC creation was rejected, rolled back, or left an inconsistent resource reference.

Conclusion: Stale NRP state is a plausible hypothesis, not a confirmed root cause. The deployment-operation details and correlation ID are essential to distinguishing a service-side failure from a configuration or resource-lifecycle issue.

Was this answer helpful?

1 person found this answer helpful.

2 additional answers

Sort by: Most helpful
  1. Henry Wood 20 Reputation points
    2026-10-25T14:27:41.6733333+00:00
    I deleted the failed endpoint and performed a clean Azure CLI creation
    with a unique name and --debug, without private DNS integration.
    
    Region: Central US
    Endpoint: pe-18eagles-sql-diag-20261025142531
    Started UTC: 2026-10-25T14:25:32Z
    Failed UTC: 2026-10-25T14:26:06Z
    
    Result:
    - CLI exit code: 1
    - Endpoint provisioningState: Failed
    - SQL connection status: Approved / Auto Approved
    - InternalServerError targets the automatically generated endpoint NIC.
    - Error message remains “An error occurred.”
    
    Correlation request IDs captured during creation:
    0028b7d7-f6ad-4103-bf1d-e7161a9492f1
    6af8833a-1dd1-4467-8f14-b6198838f727
    a379b52d-353e-4a90-a210-4a67978c7db9
    7bbda54f-7b9c-45cf-afc6-61034c95fb87
    
    These IDs came from multiple requests; I have retained the full debug
    log so Microsoft can identify the relevant creation/polling request.
    
    I don’t have a technical support plan. Can a Microsoft moderator
    arrange a backend investigation or provide further self-service
    diagnostics for this reproducible NIC provisioning failure?
    

    Was this answer helpful?

    0 comments No comments

  2. AI answer

    2026-10-25T14:19:06.4366667+00:00

    Because the endpoint repeatedly reaches Failed with no IP configuration and its managed NIC disappears, delete the failed private endpoint, wait until it is absent from the control plane, and perform one clean creation under a new name with debug logging; if that also fails, escalate it as a likely service-side provisioning failure with the UTC timestamp and correlation ID.

    1. Capture the failing Network Resource Provider operation

    Use Azure CLI 2.50 or later and an identity with Network Contributor on both the private-endpoint resource group and the VNet/subnet. Run a fresh creation with a new endpoint and connection name:

    az network private-endpoint create \
      --subscription "$SUBSCRIPTION_ID" \
      --resource-group "$RESOURCE_GROUP" \
      --name "$NEW_PE_NAME" \
      --vnet-name "$VNET_NAME" \
      --subnet "$SUBNET_NAME" \
      --private-connection-resource-id "$SQL_SERVER_RESOURCE_ID" \
      --group-id sqlServer \
      --connection-name "$NEW_CONNECTION_NAME" \
      --debug 2>&1 | tee pe-create-debug.log
    

    Record from the output:

    • The complete ARM error JSON.
    • x-ms-correlation-request-id from the response headers.
    • The operation start and failure times in UTC.
    • Whether the create call fails immediately or is initially accepted and later transitions to Failed.

    --debug, rather than only --verbose, is needed to expose the correlation-request header. A create that is accepted and subsequently fails requires the remaining dependency checks even when the top-level message is only InternalServerError.^1^

    Also inspect Azure portal → Resource group → Deployments → failed deployment → Operation details. Deployment history contains each resource operation, its error, and the deployment correlation ID.^2^

    2. Rule out a leftover endpoint or control-plane delete race

    You have already ruled out subnet delegation, private-endpoint network policies, and provider registration, so do not repeat those changes. Check for a failed, deleting, or hidden name collision:

    az network private-endpoint show \
      -g "$RESOURCE_GROUP" -n "$OLD_PE_NAME" \
      --query "{name:name,state:provisioningState,nic:networkInterfaces[0].id}" -o json
    
    az network private-endpoint list \
      -g "$RESOURCE_GROUP" \
      --query "[].{name:name,state:provisioningState,nic:networkInterfaces[0].id}" -o table
    

    If the old endpoint exists, delete it and poll until show returns not found before creating the new name:

    az network private-endpoint delete \
      -g "$RESOURCE_GROUP" -n "$OLD_PE_NAME"
    
    az network private-endpoint wait \
      -g "$RESOURCE_GROUP" -n "$OLD_PE_NAME" --deleted
    

    A rapid delete/re-create can encounter a leftover control-plane object even after it stops appearing in normal listings. Using a new endpoint name distinguishes that condition from a repeatable NIC allocation failure.^1^

    3. Check the remaining documented creation gates

    Confirm Central US is advertised for privateEndpoints in this subscription:

    az provider show \
      --namespace Microsoft.Network \
      --subscription "$SUBSCRIPTION_ID" \
      --query "{state:registrationState,locations:resourceTypes[?resourceType=='privateEndpoints'].locations|[0]}" \
      -o json
    

    registrationState must be Registered, and the returned locations must include Central US. Also examine the full error for limit, quota, cap, exceeded, or maximum; those indicate a private-endpoint service limit rather than stale NIC state.^1^

    The approved SQL connection does not prove that the consumer-side endpoint succeeded. A non-Succeeded endpoint is a creation failure, and an empty private IP means its NIC was not successfully provisioned.^3^

    Self-service recovery boundaries

    A fresh PUT can recover a failed Microsoft.Network resource after the underlying problem has cleared. For a private endpoint whose dependent NIC is healthy, use:

    az network private-endpoint update \
      -g "$RESOURCE_GROUP" -n "$PE_NAME"
    

    Alternatively:

    Get-AzPrivateEndpoint -ResourceGroupName "<resource-group>" -Name "<endpoint>" |
      Set-AzPrivateEndpoint
    

    However, that recovery path applies when the private endpoint exists and its dependent NIC is healthy. In this case the NIC is failed and then returns 404, so updating the endpoint is unlikely to repair that missing dependency; delete/re-create is the documented action for a failed endpoint or empty private IP.^4^^3^

    Do not issue Set-AzNetworkInterface against the vanished managed NIC. Microsoft’s general failed-state recovery requires a preceding Get, warns that a bare Set can overwrite settings, and cannot operate when the resource no longer exists.^5^

    Escalation

    If a clean creation under a new name still fails at PutNicOperation, open an Azure support request for Virtual Network / Private Endpoint provisioning and provide:

    • Subscription, resource group, VNet/subnet, region, and SQL server resource ID.
    • New and old private-endpoint names.
    • Exact failure time in UTC.
    • x-ms-correlation-request-id and deployment correlation ID.
    • Complete error JSON and pe-create-debug.log.
    • Deployment operation details showing the failed Microsoft.Network/networkInterfaces write.
    • Output showing the endpoint’s Failed state, empty NIC/IP data, and the subsequent NIC 404.
    • Confirmation that the subnet has no delegation, policies are disabled, and Microsoft.Network is registered.

    There is no supported public self-service procedure in the supplied diagnostics for clearing stale internal Network Resource Provider state. A reproducible fresh-name failure after the documented gates are excluded requires Microsoft to inspect backend traces using the correlation ID.


    References

    1. Troubleshoot private endpoint creation that fails or stalls in Azure ...
    2. View deployment history with Azure Resource Manager
    3. Troubleshoot private endpoint connectivity failures
    4. Azure resource move fails because private endpoint not in Succeeded ...
    5. Troubleshoot Azure Microsoft.Network failed provisioning state
    AI-generated content may be incorrect. Read our transparency notes for more information.

    Was this answer helpful?

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.