부모 리소스 오류 해결

이 문서에서는 부모 리소스에 종속된 리소스를 배포할 때 발생할 수 있는 ParentResourceNotFound 오류에 대해 설명합니다. Bicep 파일 또는 Azure Resource Manager 템플릿(ARM 템플릿)을 사용하여 리소스를 배포할 때 오류가 발생합니다.

증상

다른 리소스에 해당 자식 리소스를 배포할 때 다음 오류가 표시될 수 있습니다.

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

원인

한 리소스가 다른 리소스의 자식인 경우 자식 리소스를 만들기 전에 부모 리소스가 있어야 합니다. 자식 리소스의 이름은 부모 리소스와의 연결을 정의합니다. 자식 리소스의 이름은 <parent-resource-name>/<child-resource-name> 형식으로 돼 있습니다. 예를 들어 SQL Database는 다음과 같이 정의될 수 있습니다.

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

Bicep 부모 및 자식 리소스에 대한 자세한 내용은 Bicep에서 자식 리소스의 이름과 종류 설정을 참조하세요.

동일한 템플릿으로 서버 및 데이터베이스를 배포하지만 서버에 대한 종속성을 지정하지 않는 경우 서버가 배포되기 전에 데이터베이스 배포가 먼저 시작될 수 있습니다. 그러면 데이터베이스 배포가 ParentResourceNotFound 오류와 함께 실패합니다.

부모 리소스가 이미 존재하고 동일한 템플릿으로 배포되지 않는 경우 Resource Manager가 부모와 자식 리소스를 연결할 수 없을 때 ParentResourceNotFound 오류가 발생합니다. 이 오류는 자식 리소스가 올바른 형식이 아닌 경우 발생할 수 있습니다. 또는 자식 리소스가 부모 리소스에 대한 리소스 그룹과 다른 리소스 그룹에 배포되는 경우 발생할 수 있습니다.

해결 방법 1: 동일한 템플릿에 배포

부모 및 자식 리소스가 동일한 템플릿으로 배포될 경우 이 오류를 해결하려면 종속성을 사용합니다.

이 예제에서는 부모 리소스 내에서 중첩된 자식 리소스를 사용하며 종속성이 생성됩니다. 자식은 부모 리소스에서 리소스 유형 및 API 버전을 얻습니다.

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

종속성에 대한 자세한 내용은 Bicep의 리소스 선언을 참조하세요.

해결 방법 2: 다양한 템플릿에 배포

부모 리소스를 다른 템플릿으로 배포한 경우 이 오류를 해결하려면 종속성을 설정하지 마세요. 대신, 동일한 리소스 그룹에 자식 리소스를 배포하고 부모 리소스의 이름을 제공합니다.

이 예제에서는 기존 키워드를 사용하여 별도의 파일에 배포된 부모를 참조합니다. 자식 리소스는 parent 요소 및 부모 리소스의 기호 이름을 사용합니다.

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
}