Modularizar modelos

Concluído

Ao usar modelos do Azure Resource Manager, é melhor modulariza-los dividindo-os em componentes individuais.

A principal metodologia a ser usada é modelos vinculados.

Isso permite que você divida a solução em componentes de destino e reutilize esses vários elementos entre implantações diferentes.

Modelo vinculado

Adicione um recurso de implantação ao modelo principal para vincular um modelo a outro.

"resources": [
  {
      "apiVersion": "2017-05-10",
      "name": "linkedTemplate",
      "type": "Microsoft.Resources/deployments",
      "properties": {
          "mode": "Incremental",
          <link-to-external-template>
      }
  }
]


Modelo aninhado

Você também pode aninhar um modelo dentro do modelo principal, usar a propriedade template e especificar a sintaxe do modelo.

Isso ajuda um pouco na modularização, mas a divisão dos vários componentes pode resultar em um arquivo principal considerável, pois todos os elementos estão dentro desse único arquivo.

"resources": [
  {
    "apiVersion": "2017-05-10",
    "name": "nestedTemplate",
    "type": "Microsoft.Resources/deployments",
    "properties": {
      "mode": "Incremental",
      "template": {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "resources": [
          {
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[variables('storageName')]",
            "apiVersion": "2015-06-15",
            "location": "West US",
            "properties": {
              "accountType": "Standard_LRS"
            }
          }
        ]
      }
    }
  }
]

Observação

Para modelos aninhados, você não pode usar parâmetros ou variáveis definidas no próprio modelo. Você só pode usar parâmetros e variáveis do modelo principal.

As propriedades que você fornecer para o recurso de implantação vão variar com base na vinculação a um modelo externo ou no aninhamento de um modelo embutido dentro do modelo principal.

Modos de implantações

Ao implantar recursos usando modelos, você tem três opções:

  • validar. Essa opção compila os modelos, valida a implantação, garante que o modelo seja funcional (por exemplo, sem nenhuma dependência circular) e tenha sintaxe correta.
  • modo incremental (padrão). Essa opção só implanta o que está definido no modelo. Ela não remove nem modifica nenhum recurso que não esteja definido no modelo. Por exemplo, se você implantar uma VM por meio do modelo e depois renomear a VM no modelo, a primeira VM implantada permanecerá depois que o modelo for executado novamente. Esse é o modo padrão.
  • modo completo: o Resource Manager exclui os recursos que existem no grupo de recursos, mas que não foram especificados no modelo. Por exemplo, somente os recursos definidos no modelo estarão presentes no grupo de recursos depois que o modelo for implantado. Como melhor prática, use esse modo para ambientes de produção para obter idempotência em seus modelos de implantação.

Em implantações com o PowerShell, para definir o modo de implantação, use o parâmetro Mode, de acordo com o exemplo de modelo aninhado anterior deste tópico.

Observação

Como prática recomendada, use um grupo de recursos por implantação.

Observação

Você só pode usar o modo de implantação incremental para modelos vinculados e aninhados.

Modelo externo e parâmetros externos

Para vincular a um arquivo de parâmetro e o modelo externo, use templateLink e parametersLink.

Ao fazer a vinculação a um modelo, verifique se o serviço do Resource Manager pode acessá-lo.

Por exemplo, você não pode especificar um arquivo local ou um arquivo disponível somente na rede local.

Você só pode fornecer um valor de URI (Uniform Resource Identifier) que inclua HTTP ou HTTPS.

Uma opção é colocar o modelo vinculado em uma conta de armazenamento e usar o URI para esse item.

Você também pode fornecer o parâmetro embutido. No entanto, você não pode usar tanto os parâmetros embutidos quanto um link para um arquivo de parâmetro.

O seguinte exemplo usa o parâmetro templateLink:

  "resources": [
    {
      "name": "linkedTemplate",
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2018-05-01",
      "properties": {
          "mode": "Incremental",
          "templateLink": {
              "uri":"https://linkedtemplateek1store.blob.core.windows.net/linkedtemplates/linkedStorageAccount.json?sv=2018-03-28&sr=b&sig=dO9p7XnbhGq56BO%2BSW3o9tX7E2WUdIk%2BpF1MTK2eFfs%3D&se=2018-12-31T14%3A32%3A29Z&sp=r"
          },
          "parameters": {
              "storageAccountName":{"value": "[variables('storageAccountName')]"},
              "location":{"value": "[parameters('location')]"}
          }
      }
    },


Proteger um modelo externo

Embora o modelo vinculado precise estar disponível externamente, ele não precisa ser disponibilizado para o público.

Nesse caso, você pode adicionar o modelo a uma conta de armazenamento privada acessível somente ao proprietário da conta de armazenamento, criando tokens de SAS (Assinatura de Acesso Compartilhado) para habilitar o acesso durante a implantação.

Você pode adicionar esse token SAS ao URI para o modelo vinculado.

Embora o token seja passado como uma cadeia de caracteres segura, o URI do modelo vinculado, incluindo o token SAS, é registrado nas operações de implantação.

Para limitar a exposição, você também pode definir uma data de expiração para o token.