你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍在部署依赖父资源的资源时可能出现的 ParentResourceNotFound
错误。 使用 Bicep 文件或 Azure 资源管理器模板(ARM 模板)部署资源时,会发生此错误。
症状
将子资源部署到另一个资源时,可能会收到以下错误:
Code=ParentResourceNotFound,
Message=Can not perform requested operation on nested resource. Parent resource 'exampleserver' not found."
原因
当一个资源是另一个资源的子资源时,父资源必须在创建子资源之前存在。 子资源的名称定义与父资源的连接。 子资源的名称采用格式 <parent-resource-name>/<child-resource-name>
。 例如,SQL 数据库可能定义为:
resource sqlDatabase 'Microsoft.Sql/servers/databases@2022-02-01-preview' = {
name: '${sqlServerName}/${databaseName}'
...
}
有关 Bicep 父资源和子资源的详细信息,请参阅 Bicep 中为子资源设置名称和类型。
如果在同一模板中部署服务器和数据库,但不指定服务器上的依赖项,则数据库部署可能会在部署服务器之前启动。 这会导致数据库部署失败,并出现 ParentResourceNotFound
错误。
如果父资源已存在且未部署在同一模板中,则资源管理器无法将子资源与父资源关联时会出现 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
}