Explore os componentes do modelo
Os modelos do Azure Resource Manager são escritos em JSON, o que permite expressar dados armazenados como um objeto (como uma máquina virtual) em texto.
Um documento JSON é essencialmente uma coleção de pares chave-valor. Cada chave é uma cadeia de caracteres cujos valores podem ser:
- Uma cadeia de caracteres.
- Um número.
- Uma expressão booleana.
- Uma lista de valores.
- Um objeto (que é uma coleção de outros pares chave-valor).
Um modelo do Gerenciador de Recursos pode conter seções que são 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 analisar 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, senha ou nome de domínio.
Aqui está um exemplo que ilustra dois parâmetros: um para o nome de usuário de uma máquina virtual (VMs) e outro para sua senha:
"parameters": {
"adminUsername": {
"type": "string",
"metadata": {
"description": "Username for the Virtual Machine."
}
},
"adminPassword": {
"type": "securestring",
"metadata": {
"description": "Password for the Virtual Machine."
}
}
}
Variáveis
Esta seção é onde você define os valores que são usados em todo o modelo.
As variáveis podem tornar a manutenção dos seus modelos mais fácil.
Por exemplo, você pode definir um nome de conta de armazenamento uma vez como uma variável e, em seguida, 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.
Aqui está um exemplo que ilustra algumas variáveis que descrevem recursos de rede para 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
Esta seção é onde você define procedimentos que não deseja repetir ao longo do modelo.
Tal como as variáveis, as funções podem tornar a manutenção dos seus modelos mais fácil.
Aqui está um exemplo que cria uma função para criar um nome exclusivo para usar 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 secção, pode definir os recursos do Azure que compõem a sua implementação.
Aqui está 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 nome é lido na seção de variáveis e o local, ou região do Azure, é lido na seção de parâmetros.
Devido ao facto de os tipos de recursos poderem mudar ao longo do tempo, apiVersion
refere-se à versão do tipo de recurso que pretende utilizar.
À medida que os tipos de recursos evoluem, você pode modificar seus modelos para trabalhar com os recursos mais recentes.
Resultados
Esta seção é onde você define qualquer informação que gostaria de 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 sua VM, as informações que você não saberá até que a implantação seja executada.
Aqui está um exemplo que ilustra uma saída chamada hostname.
O valor FQDN é lido nas configurações de endereço IP público da VM:
"outputs": {
"hostname": {
"type": "string",
"value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
}
}