Resolve errors for parent resources

This article describes the ParentResourceNotFound error you might get when deploying a resource that's dependent on a parent resource. The error occurs when you deploy resources with a Bicep file or Azure Resource Manager template (ARM template).

Symptom

When you deploy a resource that's a child to another resource, you might receive the following error:

Code=ParentResourceNotFound,
Message=Can not perform requested operation on nested resource. Parent resource 'exampleserver' not found."

Cause

When one resource is a child to another resource, the parent resource must exist before the child resource is created. The name of the child resource defines the connection with the parent resource. The name of the child resource is in the format <parent-resource-name>/<child-resource-name>. For example, a SQL Database might be defined as:

resource sqlDatabase 'Microsoft.Sql/servers/databases@2022-02-01-preview' = {
  name: '${sqlServerName}/${databaseName}'
  ...
}

For more information about Bicep parent and child resources, see Set name and type for child resources in Bicep.

If you deploy the server and the database in the same template, but don't specify a dependency on the server, the database deployment might start before the server has deployed. That causes the database deployment to fail with the ParentResourceNotFound error.

If the parent resource already exists and isn't deployed in the same template, you get the ParentResourceNotFound error when Resource Manager can't associate the child resource with a parent. This error might happen when the child resource isn't in the correct format. Or if the child resource is deployed to a resource group that's different than the resource group for parent resource.

Solution 1: Deployed in same template

To resolve this error when parent and child resources are deployed in the same template, use a dependency.

This example uses a nested child resource within the parent resource and that creates the dependency. The child gets the resource type and API version from the parent resource.

resource sqlServer 'Microsoft.Sql/servers@2022-02-01-preview' = {
  name: sqlServerName
  properties: {
    ...
  }
  resource sqlDatabase 'databases' = {
    name: databaseName
    ...
  }
}

For more information about dependencies, see Resource declaration in Bicep.

Solution 2: Deployed in different templates

To resolve this error when the parent resource was deployed in a different template, don't set a dependency. Instead, deploy the child to the same resource group and provide the name of the parent resource.

This example uses the existing keyword to reference a parent that was deployed in a separate file. The child resource uses the parent element and the parent resource's symbolic name.

param location string = resourceGroup().location
param sqlServerName string
param databaseName string

resource sqlServer 'Microsoft.Sql/servers@2022-02-01-preview' existing = {
  name: sqlServerName
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2022-02-01-preview' = {
  parent: sqlServer
  name: databaseName
  location: location
}