Saiba mais sobre os modelos do Conjunto de Dimensionamento de Máquinas Virtuais
Os modelos do Azure Resource Manager são uma ótima maneira de implementar grupos de recursos relacionados. Esta série de tutoriais mostra como criar um modelo de conjunto de dimensionamento básico e como modificar este modelo de acordo com vários cenários. Todos os exemplos são provenientes deste repositório do GitHub.
Este modelo destina-se a ser simples. Para obter exemplos mais completos de modelos de conjuntos de dimensionamento, veja o repositório do GitHub Modelos de Início Rápido do Azure e procure pastas que contenham a cadeia vmss
.
Se já estiver familiarizado com a criação de modelos, pode avançar para a secção "Passos seguintes" para ver como modificar este modelo.
Definir $schema e contentVersion
Primeiro, defina $schema
e contentVersion
no modelo. O $schema
elemento define a versão da linguagem de modelo e é utilizado para realce de sintaxe do Visual Studio e funcionalidades de validação semelhantes. O contentVersion
elemento não é utilizado pelo Azure. Em vez disso, ajuda-o a controlar a versão do modelo.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
"contentVersion": "1.0.0.0",
}
Definir parâmetros
Em seguida, defina dois parâmetros adminUsername
e adminPassword
. Os parâmetros são valores que especificar no momento da implementação. O adminUsername
parâmetro é simplesmente um string
tipo, mas como adminPassword
é um segredo, dê-lhe o tipo securestring
. Posteriormente, estes parâmetros são transmitidos para a configuração do conjunto de dimensionamento.
"parameters": {
"adminUsername": {
"type": "string"
},
"adminPassword": {
"type": "securestring"
}
},
Definir variáveis
Resource Manager modelos também lhe permitem definir variáveis para serem utilizadas mais tarde no modelo. O exemplo não utiliza variáveis, pelo que o objeto JSON está vazio.
"variables": {},
Definir recursos
Segue-se a secção recursos do modelo. Aqui, pode definir o que realmente pretende implementar. Ao contrário parameters
de e variables
(que são objetos JSON), resources
é uma lista JSON de objetos JSON.
"resources": [
...
]
Todos os recursos requerem type
as propriedades , name
, apiVersion
e location
. O primeiro recurso deste exemplo tem o tipo Microsoft.Network/virtualNetwork, name myVnet
e apiVersion 2018-11-01
. (Para encontrar a versão mais recente da API para um tipo de recurso, veja a referência de modelo do Azure Resource Manager.)
{
"type": "Microsoft.Network/virtualNetworks",
"name": "myVnet",
"apiVersion": "2018-11-01",
}
Especificar localização
Para especificar a localização da rede virtual, utilize uma função de modelo Resource Manager. Esta função tem de estar entre aspas e parênteses retos como: "[<template-function>]"
. Neste caso, utilize a resourceGroup
função . Não aceita argumentos e devolve um objeto JSON com metadados sobre o grupo de recursos no qual esta implementação está a ser implementada. O grupo de recursos é definido pelo utilizador no momento da implementação. Em seguida, este valor é indexado neste objeto JSON com .location
para obter a localização do objeto JSON.
"location": "[resourceGroup().location]",
Especificar propriedades de rede virtual
Cada recurso Resource Manager tem a sua própria properties
secção para configurações específicas do recurso. Neste caso, especifique que a rede virtual deve ter uma sub-rede com o intervalo 10.0.0.0/16
de endereços IP privados . Um conjunto de dimensionamento está sempre contido numa sub-rede. Não pode abranger sub-redes.
{
"properties": {
"addressSpace": {
"addressPrefixes": [
"10.0.0.0/16"
]
},
"subnets": [
{
"name": "mySubnet",
"properties": {
"addressPrefix": "10.0.0.0/16"
}
}
]
}
},
Adicionar lista dependsOn
Além das propriedades necessárias type
, name
, apiVersion
e location
, cada recurso pode ter uma lista opcional dependsOn
de cadeias. Esta lista especifica que outros recursos desta implementação têm de ser concluídos antes de implementar este recurso.
Neste caso, existe apenas um elemento na lista, a rede virtual do exemplo anterior. Especifique esta dependência porque o conjunto de dimensionamento precisa que a rede exista antes de criar VMs. Desta forma, o conjunto de dimensionamento pode fornecer a estas VMs endereços IP privados do intervalo de endereços IP especificado anteriormente nas propriedades de rede. O formato de cada cadeia na lista dependsOn é <type>/<name>
. Utilize o mesmo type
e name
utilizado anteriormente na definição de recurso de rede virtual.
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"name": "myScaleSet",
"apiVersion": "2019-03-01",
"location": "[resourceGroup().location]",
"dependsOn": [
"Microsoft.Network/virtualNetworks/myVnet"
],
...
}
Especificar propriedades do conjunto de dimensionamento
Os conjuntos de dimensionamento têm muitas propriedades para personalizar as VMs no conjunto de dimensionamento. Para obter uma lista completa destas propriedades, veja a referência do modelo. Neste tutorial, são definidas apenas algumas propriedades frequentemente utilizadas.
Fornecer o tamanho e a capacidade da VM
O conjunto de dimensionamento precisa de saber qual o tamanho da VM a criar ("nome do sku") e quantas dessas VMs deve criar ("capacidade de sku"). Para ver que tamanhos de VM estão disponíveis, veja a documentação Tamanhos de VM.
"sku": {
"name": "Standard_A1",
"capacity": 2
},
Escolher o tipo de atualizações
O conjunto de dimensionamento também precisa de saber como lidar com atualizações no conjunto de dimensionamento. Atualmente, existem três opções, Manual
, Rolling
e Automatic
. Para obter mais informações sobre as diferenças entre os dois, veja a documentação sobre como atualizar um conjunto de dimensionamento.
"properties": {
"upgradePolicy": {
"mode": "Manual"
},
}
Escolher o sistema operativo da VM
O conjunto de dimensionamento precisa de saber que sistema operativo colocar nas VMs. Aqui, crie as VMs com uma imagem do Ubuntu 16.04-LTS totalmente corrigida.
"virtualMachineProfile": {
"storageProfile": {
"imageReference": {
"publisher": "Canonical",
"offer": "UbuntuServer",
"sku": "16.04-LTS",
"version": "latest"
}
},
}
Especificar computerNamePrefix
O conjunto de dimensionamento implementa várias VMs. Em vez de especificar cada nome de VM, especifique computerNamePrefix
. O conjunto de dimensionamento acrescenta um índice ao prefixo de cada VM, para que os nomes das VMs tenham o formulário <computerNamePrefix>_<auto-generated-index>
.
No fragmento seguinte, utilize os parâmetros de antes para definir o nome de utilizador e a palavra-passe do administrador para todas as VMs no conjunto de dimensionamento. Este processo utiliza a parameters
função de modelo. Esta função utiliza uma cadeia de carateres que especifica o parâmetro a referenciar e produz o valor desse parâmetro.
"osProfile": {
"computerNamePrefix": "vm",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]"
},
Especificar a configuração da rede VM
Por fim, especifique a configuração de rede para as VMs no conjunto de dimensionamento. Neste caso, só precisa de especificar o ID da sub-rede criada anteriormente. Isto indica ao conjunto de dimensionamento para colocar as interfaces de rede nesta sub-rede.
Pode obter o ID da rede virtual que contém a sub-rede com a função de resourceId
modelo. Esta função utiliza o tipo e o nome de um recurso e devolve o identificador completamente qualificado desse recurso. Este ID tem o formulário: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/<resourceProviderNamespace>/<resourceType>/<resourceName>
No entanto, o identificador da rede virtual não é suficiente. Indique a sub-rede específica na qual as VMs do conjunto de dimensionamento devem estar. Para tal, concatene /subnets/mySubnet
para o ID da rede virtual. O resultado é o ID completamente qualificado da sub-rede. Efetue esta concatenação com a concat
função , que recebe uma série de cadeias e devolve a concatenação.
"networkProfile": {
"networkInterfaceConfigurations": [
{
"name": "myNic",
"properties": {
"primary": "true",
"ipConfigurations": [
{
"name": "myIpConfig",
"properties": {
"subnet": {
"id": "[concat(resourceId('Microsoft.Network/virtualNetworks', 'myVnet'), '/subnets/mySubnet')]"
}
}
}
]
}
}
]
}
Passos seguintes
Pode seguir a documentação do Azure Resource Manager para implementar o modelo anterior.
Pode iniciar esta série de tutoriais a partir do artigo de modelo de conjunto de dimensionamento básico.
Pode ver como modificar o modelo de conjunto de dimensionamento básico para implementar o conjunto de dimensionamento numa rede virtual existente.
Pode ver como modificar o modelo de conjunto de dimensionamento básico para implementar o conjunto de dimensionamento com uma imagem personalizada.
Pode ver como modificar o modelo de conjunto de dimensionamento básico para implementar um conjunto de dimensionamento do Linux com o dimensionamento automático baseado no convidado.
Para obter mais informações sobre conjuntos de dimensionamento, consulte a página de descrição geral do conjunto de dimensionamento.