다음을 통해 공유


부모 리소스에 대한 오류 해결

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

증상

자식인 리소스를 다른 리소스에 배포하는 경우 다음 오류가 발생할 수 있습니다.

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 .

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

솔루션 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
}