Partilhar via


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.

  1. Na portal do Azure, selecione Grupo de recursos no menu esquerdo.
  2. Escreva o nome do grupo de recursos no campo de texto Filtro para qualquer campo...
  3. Selecione a caixa junto a myResourceGroup e selecione myResourceGroup ou o nome do grupo de recursos.
  4. 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.