共用方式為


修復父資源的錯誤

本文說明 ParentResourceNotFound 部署相依於父資源的資源時,您可能會遇到的錯誤。 當您使用 Bicep 檔案或 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 錯誤。

如果父資源已經存在且未部署在相同的範本中,則當 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
}