Tutorial: Adicionar parâmetros ao modelo do ARM
No tutorial anterior, aprendeu a adicionar uma conta de armazenamento do Azure ao modelo e a implementá-la. Neste tutorial, vai aprender a melhorar o modelo do Azure Resource Manager (modelo arm) ao adicionar parâmetros. Esta instrução demora 14 minutos a ser concluída.
Pré-requisitos
Recomendamos que conclua o tutorial sobre recursos, mas não é necessário.
Tem de ter o Visual Studio Code instalado e a trabalhar com a extensão Azure Resource Manager Tools e Azure PowerShell ou a Interface de Command-Line (CLI) do Azure. Para obter mais informações, veja ferramentas de modelo.
Rever modelo
No final do tutorial anterior, o modelo tem o seguinte ficheiro JSON:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "{provide-unique-name}",
"location": "eastus",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
]
}
Poderá reparar que existe um problema com este modelo. O nome da conta de armazenamento está hard-coded. Só pode utilizar este modelo para implementar sempre a mesma conta de armazenamento. Para implementar uma conta de armazenamento com um nome diferente, tem de criar um novo modelo, o que obviamente não é uma forma prática de automatizar as suas implementações.
Tornar o modelo reutilizável
Para tornar o modelo reutilizável, vamos adicionar um parâmetro que pode utilizar para transmitir o nome de uma conta de armazenamento. O ficheiro JSON realçado no exemplo seguinte mostra as alterações no seu modelo. O storageName
parâmetro é identificado como uma cadeia. O nome da conta de armazenamento é todo em minúsculas ou números e tem um limite de 24 carateres.
Copie todo o ficheiro e substitua o modelo pelo respetivo conteúdo.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageName": {
"type": "string",
"minLength": 3,
"maxLength": 24
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "[parameters('storageName')]",
"location": "eastus",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
]
}
Implementar o modelo
Vamos implementar o modelo. O exemplo seguinte implementa o modelo com a CLI do Azure ou o PowerShell. Repare que fornece o nome da conta de armazenamento como um dos valores no comando de implementação. Para o nome da conta de armazenamento, indique o mesmo nome que utilizou no tutorial anterior.
Se ainda não criou o grupo de recursos, veja Criar grupo de recursos. O exemplo pressupõe que define a templateFile
variável para o caminho do ficheiro de modelo, conforme mostrado no primeiro tutorial.
New-AzResourceGroupDeployment `
-Name addnameparameter `
-ResourceGroupName myResourceGroup `
-TemplateFile $templateFile `
-storageName "{your-unique-name}"
Compreender as atualizações de recursos
Depois de implementar uma conta de armazenamento com o mesmo nome que utilizou anteriormente, poderá perguntar-se como é que a reimplementação afeta o recurso.
Se o recurso já existir e não existir nenhuma alteração nas propriedades, não será necessário efetuar mais ações. Se o recurso existir e uma propriedade for alterada, será atualizada. Se o recurso não existir, será criado.
Esta forma de processar atualizações significa que o seu modelo pode incluir todos os recursos de que precisa para uma solução do Azure. Pode reimplementar o modelo com segurança e saber que os recursos mudam ou são criados apenas quando necessário. Se adicionar ficheiros à sua conta de armazenamento, por exemplo, pode reimplementar a conta de armazenamento sem perder os ficheiros.
Personalizar por ambiente
Os parâmetros permitem-lhe personalizar a implementação ao fornecer valores adaptados para um ambiente específico. Pode transmitir valores diferentes, por exemplo, com base no facto de estar a implementar num ambiente de desenvolvimento, teste ou produção.
O modelo anterior implementa sempre uma conta de armazenamento localmente redundante (LRS) padrão Standard_LRS . Poderá querer ter flexibilidade para implementar unidades de manutenção de stock (SKUs) diferentes consoante o ambiente. O exemplo seguinte mostra as alterações para adicionar um parâmetro para sKU. Copie todo o ficheiro e cole-o no seu modelo.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageName": {
"type": "string",
"minLength": 3,
"maxLength": 24
},
"storageSKU": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_RAGRS",
"Standard_ZRS",
"Premium_LRS",
"Premium_ZRS",
"Standard_GZRS",
"Standard_RAGZRS"
]
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "[parameters('storageName')]",
"location": "eastus",
"sku": {
"name": "[parameters('storageSKU')]"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
]
}
O storageSKU
parâmetro tem um valor predefinido. Utilize este valor quando a implementação não o especificar. Também tem uma lista de valores permitidos. Estes valores correspondem aos valores necessários para criar uma conta de armazenamento. Quer que os utilizadores do modelo transmitam SKUs que funcionem.
Reimplementar o modelo
Está pronto para implementar novamente. Uma vez que o SKU predefinido está definido como Standard_LRS, já forneceu um valor de parâmetro.
New-AzResourceGroupDeployment `
-Name addskuparameter `
-ResourceGroupName myResourceGroup `
-TemplateFile $templateFile `
-storageName "{your-unique-name}"
Nota
Se a implementação falhar, utilize o verbose
comutador para obter informações sobre os recursos que estão a ser criados. Utilize o debug
comutador para obter mais informações sobre a depuração.
Para ver a flexibilidade do seu modelo, vamos implementá-lo novamente. Desta vez, defina o parâmetro SKU para armazenamento georredundante padrão (GRS) Standard_GRS. Pode transmitir um novo nome para criar uma conta de armazenamento diferente ou utilizar o mesmo nome para atualizar a sua conta de armazenamento existente. Ambas as opções funcionam.
New-AzResourceGroupDeployment `
-Name usenondefaultsku `
-ResourceGroupName myResourceGroup `
-TemplateFile $templateFile `
-storageName "{your-unique-name}" `
-storageSKU Standard_GRS
Por fim, vamos executar mais um teste e ver o que acontece quando transmite um SKU que não é um dos valores permitidos. Neste caso, testamos o cenário em que o utilizador do modelo considera básico um dos SKUs.
New-AzResourceGroupDeployment `
-Name testskuparameter `
-ResourceGroupName myResourceGroup `
-TemplateFile $templateFile `
-storageName "{your-unique-name}" `
-storageSKU basic
O comando falha ao mesmo tempo com uma mensagem de erro que dá os valores permitidos. O processador ARM encontra o erro antes de a implementação ser iniciada.
Limpar os recursos
Se estiver a avançar para o próximo tutorial, não precisa de eliminar o grupo de recursos.
Se estiver a parar agora, poderá querer limpar os recursos implementados ao eliminar o grupo de recursos.
- Na portal do Azure, selecione Grupo de recursos no menu esquerdo.
- Escreva o nome do grupo de recursos no campo de texto Filtro para qualquer campo...
- Selecione a caixa junto a myResourceGroup e selecione myResourceGroup ou o nome do grupo de recursos.
- Selecione Eliminar grupo de recursos no menu superior.
Passos seguintes
Melhorou o modelo que criou no primeiro tutorial ao adicionar parâmetros. No próximo tutorial, irá aprender sobre as funções de modelo.