Compartilhar via


Resolva erros de recursos pai

Este artigo descreve o erro ParentResourceNotFound que você pode se obter durante a implantação de um recurso que é dependente de um recurso pai. O erro ocorre quando você implanta recursos com um arquivo Bicep ou modelo do ARM (modelo do Azure Resource Manager).

Sintoma

Ao implantar um recurso que é filho de outro recurso, você pode receber o seguinte erro:

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

Causa

Quando um recurso é filho de outro recurso, o recurso pai deve existir antes da criação do recurso filho. O nome do recurso filho define a conexão com o recurso pai. O formato do nome do recurso filho está no formato <parent-resource-name>/<child-resource-name>. Por exemplo, um Banco de Dados SQL pode ser definido como:

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

Para saber mais sobre recursos pai e filho no Bicep, confira Definir o nome e o tipo de recursos filho no Bicep.

Se você implantar o servidor e o banco de dados no mesmo modelo, mas não especifica uma dependência no servidor, a implantação de banco de dados talvez seja iniciado antes que o servidor tenha sido implantado. Isso faz com que a implantação do banco de dados falhe com o erro ParentResourceNotFound.

Se o recurso pai já existe e não será implantado no mesmo modelo, você receber esse erro ParentResourceNotFound quando o Gerenciador de Recursos não é possível associar o recurso filho com o pai. Esse erro pode acontecer quando o recurso filho não estiver no formato correto. Ou se o recurso filho for implantado em um grupo de recursos diferente do grupo de recursos para o recurso pai.

Solução 1: implantar no mesmo modelo

Para resolver esse erro quando recursos pai e filho são implantados no mesmo modelo, inclua uma dependência.

Este exemplo usa um recurso filho aninhado dentro do recurso pai e isso cria a dependência. O filho obtém o tipo de recurso e a versão da API do recurso pai.

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

Para obter mais informações sobre dependências, consulte Declaração de recursos no Bicep.

Solução 2: implantar em modelos diferentes

Para resolver esse erro quando o recurso pai foi anteriormente implantado em um modelo diferente, você não define uma dependência. Em vez disso, implante o filho no mesmo grupo de recursos e forneça o nome do recurso pai.

Este exemplo usa a palavra-chave existente para fazer referência a um pai que foi implantado em um arquivo separado. O recurso filho usa o parent elemento e o nome simbólico do recurso pai.

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
}