在 Resource Manager 模板中设置子资源的名称和类型

创建模板时,需频繁地包括与父资源相关的子资源。 例如,模板可能包括 SQL Server 和数据库。 SQL Server 是父资源,数据库是子资源。

子资源类型的格式为: {resource-provider-namespace}/{parent-resource-type}/{child-resource-type}

子资源名称的格式为: {parent-resource-name}/{child-resource-name}

但是,在模板中指定资源类型和名称的方式并不相同,具体取决于该资源是嵌套在父资源中,还是独立存在于顶级目录中。 本主题演示如何使用这两种方法。

构造对资源的完全限定引用时,组合类型和名称段的顺序并不只是将这两者串联。 而是,在命名空间后面,使用类型/名称对的序列(从最不具体到最具体):

{resource-provider-namespace}/{parent-resource-type}/{parent-resource-name}[/{child-resource-type}/{child-resource-name}]*

例如:

Microsoft.Compute/virtualMachines/myVM/extensions/myExt 正确,Microsoft.Compute/virtualMachines/extensions/myVM/myExt 不正确

嵌套式子资源

若要定义子资源,最简单的方式是将其嵌套在父资源中。 以下示例演示了嵌套在 SQL Server 中的 SQL 数据库。

{
  "name": "exampleserver",
  "type": "Microsoft.Sql/servers",
  "apiVersion": "2014-04-01",
  ...
  "resources": [
    {
      "name": "exampledatabase",
      "type": "databases",
      "apiVersion": "2014-04-01",
      ...
    }
  ]
}

对于子资源,类型设置为 databases,但其完整资源类型是 Microsoft.Sql/servers/databases。 不提供 Microsoft.Sql/servers/ 是因为它取自父资源类型。 子资源名称设置为 exampledatabase ,但完整名称包括父名称。 不提供 exampleserver 是因为它取自父资源。

顶级子资源

可以定义顶级子资源。 使用此方法的前提是:父资源未在同一模板中部署,或者你需要使用 copy 创建多个子资源。 使用此方法时,必须提供完整的资源类型,并将父资源名称包括在子资源名称中。

{
  "name": "exampleserver",
  "type": "Microsoft.Sql/servers",
  "apiVersion": "2014-04-01",
  "resources": [ 
  ],
  ...
},
{
  "name": "exampleserver/exampledatabase",
  "type": "Microsoft.Sql/servers/databases",
  "apiVersion": "2014-04-01",
  ...
}

数据库是服务器的子资源,即使二者是在模板的同一级别定义的。

后续步骤