Ü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
}