Explorar os componentes de modelo
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]"
}
}