解决父资源的错误

本文介绍部署依赖于父资源的资源时可能遇到的错误。

症状

在部署的资源是另一个资源的子级时,可能会收到以下错误:

Code=ParentResourceNotFound;
Message=Can not perform requested operation on nested resource. Parent resource 'exampleserver' not found."

原因

如果一个资源是另一个资源的子级,则在创建子资源之前,父资源必须存在。 子资源的名称定义与父资源的连接。 子资源名称采用格式 <parent-resource-name>/<child-resource-name> 例如,SQL 数据库可能定义为:

{
  "type": "Microsoft.Sql/servers/databases",
  "name": "[concat(variables('databaseServerName'), '/', parameters('databaseName'))]",
  ...

如果在同一模板中部署服务器和数据库,但未在服务器上指定依赖关系,则可以在部署服务器之前启动数据库部署。

如果父资源已存在且未部署在同一模板中,则当资源管理器无法将子资源与父资源关联时,会出现此错误。 当子资源的格式不正确,或者子资源部署到与父资源的资源组不同的资源组时,可能会发生此错误。

解决方案

要在同一模板中部署父资源和子资源时解决此错误,请包含依赖关系。

"dependsOn": [
  "[variables('databaseServerName')]"
]

要在父资源先前部署在其他模板中时解决此错误,请不要设置依赖关系。 而是将子资源部署到同一资源组并提供父资源的名称。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "sqlServerName": {
      "type": "string"
    },
    "databaseName": {
      "type": "string"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Sql/servers/databases",
      "apiVersion": "2014-04-01",
      "name": "[concat(parameters('sqlServerName'), '/', parameters('databaseName'))]",
      "location": "[resourceGroup().location]",
      "properties": {
        "collation": "SQL_Latin1_General_CP1_CI_AS",
        "edition": "Basic"
      }
    }
  ],
  "outputs": {}
}

有关详细信息,请参阅定义 Azure 资源管理器模板中部署资源的顺序