Udostępnij przez


Usuwanie błędów dotyczących zasobów nadrzędnych

W tym artykule opisano błąd ParentResourceNotFound, który może pojawić się podczas wdrażania zasobu zależnego od zasobu nadrzędnego. Błąd występuje podczas wdrażania zasobów przy użyciu pliku Bicep lub szablonu usługi Azure Resource Manager (szablon usługi ARM).

Objaw

Gdy wdrażasz zasób, który jest podrzędnym względem innego zasobu, możesz otrzymać następujący błąd:

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

Przyczyna

Gdy jeden zasób jest elementem podrzędnym do innego zasobu, przed utworzeniem zasobu podrzędnego musi istnieć zasób nadrzędny. Nazwa zasobu podrzędnego definiuje połączenie z zasobem nadrzędnym. Nazwa zasobu podrzędnego ma format <parent-resource-name>/<child-resource-name>. Na przykład usługa SQL Database może być zdefiniowana jako:

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

Aby uzyskać więcej informacji na temat zasobów nadrzędnych i podrzędnych Bicep, zobacz Ustaw nazwę i typ dla zasobów podrzędnych w Bicep.

Jeśli wdrożysz serwer i bazę danych w tym samym szablonie, ale nie określisz zależności od serwera, wdrożenie bazy danych może rozpocząć się przed wdrożeniem serwera. Powoduje to niepowodzenie wdrożenia bazy danych z powodu błędu ParentResourceNotFound .

Jeśli zasób nadrzędny już istnieje i nie został wdrożony w tym samym szablonie, pojawi się błąd ParentResourceNotFound, gdy Resource Manager nie może skojarzyć zasobu podrzędnego z zasobem nadrzędnym. Ten błąd może wystąpić, gdy zasób podrzędny nie jest w poprawnym formacie. Lub jeśli zasób podrzędny jest wdrażany w grupie zasobów innej niż grupa zasobów dla zasobu nadrzędnego.

Rozwiązanie 1. Wdrożone w tym samym szablonie

Aby rozwiązać ten błąd podczas wdrażania zasobów nadrzędnych i podrzędnych w tym samym szablonie, użyj zależności.

W tym przykładzie użyto zasobu podrzędnego zagnieżdżonego wewnątrz zasobu nadrzędnego, co tworzy zależność. Element podrzędny pobiera typ zasobu i wersję interfejsu API z zasobu nadrzędnego.

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

Aby uzyskać więcej informacji na temat zależności, zobacz Deklaracja zasobu w aplikacji Bicep.

Rozwiązanie 2: Wdrożone w różnych szablonach

Aby rozwiązać ten błąd, gdy zasób nadrzędny został wdrożony w innym szablonie, nie ustawiaj zależności. Zamiast tego należy wdrożyć element podrzędny w tej samej grupie zasobów i podać nazwę zasobu nadrzędnego.

W tym przykładzie użyto istniejącego słowa kluczowego, aby odwołać się do elementu nadrzędnego wdrożonego w osobnym pliku. Zasób podrzędny parent używa elementu i nazwy symbolicznej zasobu nadrzędnego.

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
}