Definir o nome e o tipo para recursos subordinados

Os recursos subordinados são recursos que existem apenas no contexto de outro recurso. Por exemplo, uma extensão de máquina virtual não pode existir sem uma máquina virtual. O recurso de extensão é um subordinado da máquina virtual.

Cada recurso principal aceita apenas determinados tipos de recursos como recursos subordinados. O tipo de recurso para o recurso subordinado inclui o tipo de recurso para o recurso principal. Por exemplo, Microsoft.Web/sites/config e Microsoft.Web/sites/extensions são ambos recursos subordinados do Microsoft.Web/sites. Os tipos de recursos aceites são especificados no esquema de modelo do recurso principal.

Num modelo de Resource Manager do Azure (modelo arm), pode especificar o recurso subordinado dentro do recurso principal ou fora do recurso principal. Os valores fornecidos para o nome do recurso e o tipo de recurso variam consoante o recurso subordinado esteja definido dentro ou fora do recurso principal.

Dica

Recomendamos o Bicep porque oferece as mesmas capacidades que os modelos do ARM e a sintaxe é mais fácil de utilizar. Para saber mais, veja recursos subordinados.

Dentro do recurso principal

O exemplo seguinte mostra o recurso subordinado incluído na propriedade resources do recurso principal.

"resources": [
  {
    <parent-resource>
    "resources": [
      <child-resource>
    ]
  }
]

Os recursos subordinados só podem ser definidos com cinco níveis de profundidade.

Quando definido no tipo de recurso principal, formatará os valores de tipo e nome como um único segmento sem barras.

"type": "{child-resource-type}",
"name": "{child-resource-name}",

O exemplo seguinte mostra uma rede virtual e com uma sub-rede. Repare que a sub-rede está incluída na matriz de recursos da rede virtual. O nome está definido como Sub-rede1 e o tipo está definido como sub-redes. O recurso subordinado é marcado como dependente do recurso principal porque o recurso principal tem de existir antes de o recurso subordinado poder ser implementado.

"resources": [
  {
    "type": "Microsoft.Network/virtualNetworks",
    "apiVersion": "2022-11-01",
    "name": "VNet1",
    "location": "[parameters('location')]",
    "properties": {
      "addressSpace": {
        "addressPrefixes": [
          "10.0.0.0/16"
        ]
      }
    },
    "resources": [
      {
        "type": "subnets",
        "apiVersion": "2022-11-01",
        "name": "Subnet1",
        "dependsOn": [
          "VNet1"
        ],
        "properties": {
          "addressPrefix": "10.0.0.0/24"
        }
      }
    ]
  }
]

O tipo de recurso completo ainda Microsoft.Network/virtualNetworks/subnetsé . Não fornece Microsoft.Network/virtualNetworks/ porque é assumido a partir do tipo de recurso principal.

O nome do recurso subordinado está definido como Sub-rede1 , mas o nome completo inclui o nome principal. Não fornece a VNet1 porque é assumida a partir do recurso principal.

Recurso principal externo

O exemplo seguinte mostra o recurso subordinado fora do recurso principal. Poderá utilizar esta abordagem se o recurso principal não estiver implementado no mesmo modelo ou se quiser utilizar a cópia para criar mais do que um recurso subordinado.

"resources": [
  {
    <parent-resource>
  },
  {
    <child-resource>
  }
]

Quando definido fora do recurso principal, formatará os valores de tipo e nome com barras para incluir o tipo e o nome principais.

"type": "{resource-provider-namespace}/{parent-resource-type}/{child-resource-type}",
"name": "{parent-resource-name}/{child-resource-name}",

O exemplo seguinte mostra uma rede virtual e uma sub-rede que estão definidas ao nível da raiz. Repare que a sub-rede não está incluída na matriz de recursos da rede virtual. O nome está definido como VNet1/Subnet1 e o tipo está definido como Microsoft.Network/virtualNetworks/subnets. O recurso subordinado é marcado como dependente do recurso principal porque o recurso principal tem de existir antes de o recurso subordinado poder ser implementado.

"resources": [
  {
    "type": "Microsoft.Network/virtualNetworks",
    "apiVersion": "2022-11-01",
    "name": "VNet1",
    "location": "[parameters('location')]",
    "properties": {
      "addressSpace": {
        "addressPrefixes": [
          "10.0.0.0/16"
        ]
      }
    }
  },
  {
    "type": "Microsoft.Network/virtualNetworks/subnets",
    "apiVersion": "2022-11-01",
    "name": "VNet1/Subnet1",
    "dependsOn": [
      "VNet1"
    ],
    "properties": {
      "addressPrefix": "10.0.0.0/24"
    }
  }
]

Passos seguintes