Resolver erros dos recursos principais
Este artigo descreve o ParentResourceNotFound
erro que poderá obter ao implementar um recurso dependente de um recurso principal. O erro ocorre quando implementa recursos com um ficheiro Bicep ou um modelo de Resource Manager do Azure (modelo arm).
Sintoma
Ao implementar um recurso subordinado noutro recurso, poderá receber o seguinte erro:
Code=ParentResourceNotFound,
Message=Can not perform requested operation on nested resource. Parent resource 'exampleserver' not found."
Causa
Quando um recurso é subordinado a outro recurso, o recurso principal tem de existir antes de o recurso subordinado ser criado. O nome do recurso subordinado define a ligação com o recurso principal. O nome do recurso subordinado está no formato <parent-resource-name>/<child-resource-name>
. Por exemplo, um Base de Dados SQL pode ser definido como:
resource sqlDatabase 'Microsoft.Sql/servers/databases@2022-02-01-preview' = {
name: '${sqlServerName}/${databaseName}'
...
}
Para obter mais informações sobre os recursos principais e subordinados do Bicep, veja Definir nome e tipo para recursos subordinados no Bicep.
Se implementar o servidor e a base de dados no mesmo modelo, mas não especificar uma dependência no servidor, a implementação da base de dados poderá ser iniciada antes de o servidor ser implementado. Isto faz com que a implementação da base de dados falhe com o ParentResourceNotFound
erro.
Se o recurso principal já existir e não estiver implementado no mesmo modelo, receberá o ParentResourceNotFound
erro quando Resource Manager não consegue associar o recurso subordinado a um elemento principal. Este erro pode ocorrer quando o recurso subordinado não está no formato correto. Ou se o recurso subordinado for implementado num grupo de recursos diferente do grupo de recursos do recurso principal.
Solução 1: implementado no mesmo modelo
Para resolver este erro quando os recursos principais e subordinados são implementados no mesmo modelo, utilize uma dependência.
Este exemplo utiliza um recurso subordinado aninhado no recurso principal e cria a dependência. O subordinado obtém o tipo de recurso e a versão da API a partir do recurso principal.
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, veja Declaração de recursos no Bicep.
Solução 2: implementada em modelos diferentes
Para resolver este erro quando o recurso principal foi implementado num modelo diferente, não defina uma dependência. Em vez disso, implemente o menor no mesmo grupo de recursos e forneça o nome do recurso principal.
Este exemplo utiliza a palavra-chave existente para referenciar um elemento principal que foi implementado num ficheiro separado. O recurso subordinado utiliza o parent
elemento e o nome simbólico do recurso principal.
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
}