解決父代資源的錯誤
本文說明當部署相依於父代資源的資源時,可能會發生 ParentResourceNotFound
錯誤。 當您使用 Azure Resource Manager 範本 (ARM 範本) 或 Bicep 檔案部署資源時,會發生此錯誤。
徵狀
當部署是另一個資源的子系資源時,您可能會遇到下列錯誤:
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@2021-05-01-preview' = {
name: '${sqlServerName}/${databaseName}'
...
}
如需關於 Bicep 父代和子系資源的詳細資訊,請參閱在 Bicep 中設定子系資源的名稱和類型。
如果您在相同的範本中部署伺服器和資料庫,但未在伺服器上指定相依性,則可在部署伺服器之前啟動資料庫部署。 這會導致具有 ParentResourceNotFound
錯誤的資料庫部署失敗。
如果父代資源已經存在,但未部署在相同的範本中,當資源管理員無法讓子系資源與父代產生關聯時,您會發生 ParentResourceNotFound
錯誤。 當子系資源的格式不正確時,可能會發生此錯誤。 或者,如果子系資源部署至與父代資源的資源群組不同的資源群組。
解決方案 1 - 部署在相同的範本中
當父代和子系資源部署在相同的範本時,若要解決這個錯誤,請使用相依性。
此範例會使用父代資源內的巢狀子系資源,這資源會建立相依性。 子系資源會從父代資源取得資源類型和 API 版本。
resource sqlServer 'Microsoft.Sql/servers@2021-05-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@2021-05-01-preview' existing = {
name: sqlServerName
}
resource sqlDatabase 'Microsoft.Sql/servers/databases@2021-05-01-preview' = {
parent: sqlServer
name: databaseName
location: location
}