이 문서에서는 부모 리소스에 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
}