Explorar os componentes de modelo

Concluído

Os modelos do Azure Resource Manager são escritos em JSON, que permite exibir dados armazenados como um objeto (como a máquina virtual) em um texto.

Um documento JSON é basicamente uma coleção de pares chave-valor. Cada chave é uma cadeia de caracteres e os valores podem ser:

  • Uma cadeia de caracteres.
  • Um número.
  • Uma expressão booliana.
  • Uma lista de valores.
  • Um objeto (uma coleção de outros pares chave-valor).

Um modelo do Resource Manager pode conter seções expressas usando a notação JSON, mas não estão relacionadas à linguagem JSON em si:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "",
    "parameters": {  },
    "variables": {  },
    "functions": [  ],
    "resources": [  ],
    "outputs": {  }
}

Vamos examinar cada uma dessas seções com um pouco mais de detalhes.

Parâmetros

Esta seção é onde você especifica quais valores são configuráveis quando o modelo é executado.

Por exemplo, você pode permitir que os usuários do modelo definam um nome de usuário, uma senha ou um domínio.

Veja um exemplo que ilustra dois parâmetros: um para o nome de usuário de uma VM (máquina virtual) e outro para a senha:

"parameters": {
  "adminUsername": {
    "type": "string",
    "metadata": {
      "description": "Username for the Virtual Machine."
    }
  },
  "adminPassword": {
    "type": "securestring",
    "metadata": {
      "description": "Password for the Virtual Machine."
    }
  }
}

Variáveis

É nesta seção que você define os valores que serão usados em todo o modelo.

As variáveis podem ajudar a facilitar a manutenção de seus modelos.

Por exemplo, você pode definir um nome de conta de armazenamento uma vez como uma variável e depois usar essa variável em todo o modelo.

Se o nome da conta de armazenamento for alterado, você só precisará atualizar a variável uma vez.

Veja um exemplo que ilustra algumas variáveis que descrevem os recursos de rede de uma VM:

"variables": {
  "nicName": "myVMNic",
  "addressPrefix": "10.0.0.0/16",
  "subnetName": "Subnet",
  "subnetPrefix": "10.0.0.0/24",
  "publicIPAddressName": "myPublicIP",
  "virtualNetworkName": "MyVNET"
}

Funções

É nesta seção que você define os procedimentos que não desejará repetir em todo o modelo.

Assim como as variáveis, as funções podem ajudar a facilitar a manutenção de seus modelos.

Veja um exemplo que cria uma função para criar um nome exclusivo a ser usado ao criar recursos que têm requisitos de nomenclatura globalmente exclusivos:

"functions": [
  {
    "namespace": "contoso",
    "members": {
      "uniqueName": {
        "parameters": [
          {
            "name": "namePrefix",
            "type": "string"
          }
        ],
        "output": {
          "type": "string",
          "value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],

Recursos

É nesta seção que você define os recursos do Azure que compõem a sua implantação.

Veja um exemplo que cria um recurso de endereço IP público:

{
  "type": "Microsoft.Network/publicIPAddresses",
  "name": "[variables('publicIPAddressName')]",
  "location": "[parameters('location')]",
  "apiVersion": "2018-08-01",
  "properties": {
    "publicIPAllocationMethod": "Dynamic",
    "dnsSettings": {
      "domainNameLabel": "[parameters('dnsLabelPrefix')]"
    }
  }
}

Aqui, o tipo de recurso é Microsoft.Network/publicIPAddresses.

O name é lido na seção de variáveis e a location, ou a região do Azure, é lida na seção de parameters.

Já que tipos de recursos podem ser alterados ao longo do tempo, apiVersion refere-se à versão do tipo de recurso que você deseja usar.

À medida que os tipos de recursos evoluem, você pode modificar os modelos para trabalhar com os recursos mais recentes.

Saídas

É nesta seção que você define todas as informações que desejará receber quando o modelo for executado.

Por exemplo, talvez você queira receber o endereço IP ou o FQDN (nome de domínio totalmente qualificado) da VM, as informações que você não saberá até que a implantação seja executada.

Veja aqui um exemplo que ilustra uma saída chamada hostname.

O valor de FQDN é lido nas configurações de endereço IP público da VM:

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
  }
}