Üst kaynaklar için hataları düzeltme
Bu makalede, ParentResourceNotFound
üst kaynağa bağımlı bir kaynağı dağıtırken alabileceğiniz hata açıklanmaktadır. Bir Bicep dosyası veya Azure Resource Manager şablonu (ARM şablonu) ile kaynakları dağıttığınızda hata oluşur.
Belirti
Alt öğe olan bir kaynağı başka bir kaynağa dağıttığınızda aşağıdaki hatayı alabilirsiniz:
Code=ParentResourceNotFound,
Message=Can not perform requested operation on nested resource. Parent resource 'exampleserver' not found."
Nedeni
Bir kaynak başka bir kaynağın alt öğesi olduğunda, alt kaynak oluşturulmadan önce üst kaynağın mevcut olması gerekir. Alt kaynağın adı, üst kaynakla bağlantıyı tanımlar. Alt kaynağın adı biçimindedir <parent-resource-name>/<child-resource-name>
. Örneğin, bir SQL Veritabanı şu şekilde tanımlanabilir:
resource sqlDatabase 'Microsoft.Sql/servers/databases@2022-02-01-preview' = {
name: '${sqlServerName}/${databaseName}'
...
}
Bicep üst ve alt kaynakları hakkında daha fazla bilgi için bkz. Bicep'te alt kaynaklar için ad ve tür ayarlama.
Sunucuyu ve veritabanını aynı şablonda dağıtır ancak sunucuya bağımlılık belirtmezseniz, veritabanı dağıtımı sunucu dağıtılmadan önce başlayabilir. Bu, veritabanı dağıtımının hatayla ParentResourceNotFound
başarısız olmasına neden olur.
Üst kaynak zaten varsa ve aynı şablonda dağıtılmıyorsa, Resource Manager alt kaynağı üst kaynakla ilişkilendiremediğiniz zaman hatayı alırsınızParentResourceNotFound
. Bu hata, alt kaynak doğru biçimde olmadığında oluşabilir. Ya da alt kaynak üst kaynak için kaynak grubundan farklı bir kaynak grubuna dağıtıldıysa.
Çözüm 1: Aynı şablonda dağıtıldı
Üst ve alt kaynaklar aynı şablonda dağıtıldığında bu hatayı çözmek için bir bağımlılık kullanın.
Bu örnekte, üst kaynak içinde iç içe yerleştirilmiş bir alt kaynak kullanılır ve bağımlılık oluşturulur. Alt öğe, üst kaynaktan kaynak türünü ve API sürümünü alır.
resource sqlServer 'Microsoft.Sql/servers@2022-02-01-preview' = {
name: sqlServerName
properties: {
...
}
resource sqlDatabase 'databases' = {
name: databaseName
...
}
}
Bağımlılıklar hakkında daha fazla bilgi için bkz. Bicep'te kaynak bildirimi.
Çözüm 2: Farklı şablonlara dağıtıldı
Üst kaynak farklı bir şablonda dağıtıldığında bu hatayı çözmek için bir bağımlılık ayarlamayın. Bunun yerine, alt öğeyi aynı kaynak grubuna dağıtın ve üst kaynağın adını belirtin.
Bu örnek, ayrı bir dosyada dağıtılan bir üst öğeye başvurmak için mevcut anahtar sözcüğünü kullanır. Alt kaynak öğesini ve üst kaynağın sembolik adını kullanır 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
}