Exercício – Adicionar parâmetros e saídas ao seu modelo do Azure Resource Manager

Concluído

Neste exercício, vai adicionar um parâmetro para definir o nome de conta de armazenamento do Azure durante a implementação. Em seguida, você adiciona um parâmetro para definir quais SKUs de conta de armazenamento são permitidos e define qual usar para essa implantação. Você também adiciona utilidade ao modelo do Azure Resource Manager (modelo ARM) adicionando uma saída que pode ser usada posteriormente no processo de implantação.

Criar parâmetros para o modelo do Resource Manager

Aqui, torna o seu modelo do Resource Manager mais flexível ao adicionar parâmetros que poderão ser definidos no runtime. Crie um parâmetro para o valor storageName.

  1. No arquivo azuredeploy.json no Visual Studio Code, atualize "parameters":{}, para que fique como:

    "parameters": {
      "storageName": {
        "type": "string",
        "minLength": 3,
        "maxLength": 24,
        "metadata": {
          "description": "The name of the Azure storage resource"
        }
      }
    },
    

    Para formatar o arquivo JSON corretamente, pressione Alt+Shift+F.

  2. Utilize o novo parâmetro no bloco resources nos valores name e displayName. O arquivo inteiro se parece com este exemplo de código:

    {
      "$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,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2025-01-01",
          "name": "[parameters('storageName')]",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Standard_LRS"
          }
        }
      ],
      "outputs": {}
    }
    
  3. Guarde o ficheiro.

Implementar o modelo do Resource Manager parametrizado

Aqui, pode alterar o nome da implementação para refletir melhor o que esta implementação faz e preencher um valor para o novo parâmetro.

Execute os seguintes comandos da CLI do Azure no terminal. Esse script é idêntico ao que você usou anteriormente, exceto que o nome da implantação foi alterado. Insira um valor exclusivo para o storageName parâmetro. Ele deve ser globalmente exclusivo no Azure, conter de 3 a 24 caracteres e incluir apenas letras minúsculas, números e hífenes. Pode reutilizar o nome único que criou na unidade anterior; se você fizer isso, o Azure atualizará o recurso existente em vez de criar um novo.

templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
DeploymentName="addnameparameter-"$today

az deployment group create \
  --name $DeploymentName \
  --template-file $templateFile \
  --parameters storageName={your-unique-name}

Execute os seguintes comandos do Azure PowerShell no terminal. Esse script é idêntico ao usado anteriormente, exceto que o nome da implantação foi alterado. Insira um valor exclusivo para o storageName parâmetro. Ele deve ser globalmente exclusivo no Azure, conter de 3 a 24 caracteres e incluir apenas letras minúsculas, números e hífenes. Pode reutilizar o nome único que criou na unidade anterior; se você fizer isso, o Azure atualizará o recurso existente em vez de criar um novo.

$templateFile="azuredeploy.json"
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="addnameparameter-"+"$today"
New-AzResourceGroupDeployment `
  -Name $deploymentName `
  -TemplateFile $templateFile `
  -storageName {your-unique-name}

Verificar a implementação

  1. Quando a implantação terminar, volte para o portal do Azure em seu navegador. Vá para o seu grupo de recursos e veja que agora há 3 implantações bem-sucedidas. Selecione esta ligação.

    Repare as três implementações se encontram na lista.

  2. Explore a implantação addnameparameter como fez anteriormente.

Adicionar outro parâmetro que limite os valores permitidos

Aqui, vai utilizar parâmetros para limitar os valores permitidos num parâmetro.

  1. Adicione um novo parâmetro nomeado storageSKU à parameters seção do arquivo azuredeploy.json .

    // This is the allowed values for an Azure storage account
    "storageSKU": {
       "type": "string",
       "defaultValue": "Standard_LRS",
       "allowedValues": [
         "Standard_LRS",
         "Standard_GRS",
         "Standard_RAGRS",
         "Standard_ZRS",
         "Premium_LRS",
         "Premium_ZRS",
         "Standard_GZRS",
         "Standard_RAGZRS"
       ]
     }
    

    A primeira linha é um comentário. Os modelos ARM suportam comentários // e /* */.

  2. Atualize os recursos para usar o storageSKU parâmetro. Se você aproveitar o IntelliSense no Visual Studio Code, essa etapa será mais fácil.

    "sku": {
         "name": "[parameters('storageSKU')]"
       }
    

    O arquivo inteiro se parece com este exemplo de código:

    {
      "$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,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        },
        "storageSKU": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "allowedValues": [
            "Standard_LRS",
            "Standard_GRS",
            "Standard_RAGRS",
            "Standard_ZRS",
            "Premium_LRS",
            "Premium_ZRS",
            "Standard_GZRS",
            "Standard_RAGZRS"
          ]
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2025-01-01",
          "name": "[parameters('storageName')]",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "[parameters('storageSKU')]"
          }
        }
      ],
      "outputs": {}
    }
    
  3. Guarde o ficheiro.

Implementar o modelo do Resource Manager

Aqui, pode implementar com sucesso através de um parâmetro storageSKU que está na lista permitida. Em seguida, tente implantar o modelo usando um storageSKU parâmetro que não esteja na lista de permissões. A segunda implantação falha conforme o esperado.

  1. Implante o modelo executando os seguintes comandos. Preencha o parâmetro storageName com um nome exclusivo. Ele deve ser globalmente exclusivo no Azure, conter de 3 a 24 caracteres e incluir apenas letras minúsculas, números e hífenes. Pode reutilizar o nome único que criou na unidade anterior; se você fizer isso, o Azure atualizará o recurso existente em vez de criar um novo.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_GRS storageName={your-unique-name}
    

    Aguarde pela conclusão da implementação. Esta implementação será concluída com êxito conforme esperado. Sua lista de valores permitidos impede que os usuários do modelo passem valores de parâmetro que não funcionam para o recurso. Vamos ver o que acontece quando fornece um SKU inválido.

  2. Execute os seguintes comandos para implementar o modelo com um parâmetro que não é permitido. Aqui, você alterou o storageSKU parâmetro para Basic. Preencha o parâmetro storageName com um nome exclusivo. Ele deve ser globalmente exclusivo no Azure, conter de 3 a 24 caracteres e incluir apenas letras minúsculas, números e hífenes. Pode reutilizar o nome único que criou na unidade anterior; se você fizer isso, o Azure atualizará o recurso existente em vez de criar um novo.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Basic storageName={your-unique-name}
    

    Esta implementação irá falhar. Repare no erro.

    Captura de tela da janela Terminal mostrando o erro de validação de implantação.

  1. Implante o modelo executando os seguintes comandos. Preencha o parâmetro storageName com um nome exclusivo. Ele deve ser globalmente exclusivo no Azure, conter de 3 a 24 caracteres e incluir apenas letras minúsculas, números e hífenes. Pode reutilizar o nome único que criou na unidade anterior; se você fizer isso, o Azure atualizará o recurso existente em vez de criar um novo.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_GRS
    

    Aguarde pela conclusão da implementação. Esta implementação será concluída com êxito conforme esperado. Sua lista de valores permitidos impede que os usuários do modelo passem valores de parâmetro que não funcionam para o recurso. Vamos ver o que acontece quando fornece um SKU inválido.

  2. Execute os seguintes comandos para implementar o modelo com um parâmetro que não é permitido. Aqui, você alterou o storageSKU parâmetro para Basic. Preencha o parâmetro storageName com um nome exclusivo. Ele deve ser globalmente exclusivo no Azure, conter de 3 a 24 caracteres e incluir apenas letras minúsculas, números e hífenes. Pode reutilizar o nome único que criou na unidade anterior; se você fizer isso, o Azure atualizará o recurso existente em vez de criar um novo.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Basic
    

    Esta implementação irá falhar. Repare no erro.

    Captura de tela da janela Terminal mostrando o erro de validação de implantação.

Adicionar saída ao modelo do Resource Manager

Aqui, pode adicionar à secção outputs do modelo ARM da saída os pontos finais do recurso da conta de armazenamento.

  1. No arquivo azuredeploy.json no Visual Studio Code, atualize "outputs":{}, para que ele se pareça com:

    "outputs": {
      "storageEndpoint": {
        "type": "object",
        "value": "[reference(parameters('storageName')).primaryEndpoints]"
      }
    }
    
  2. Guarde o ficheiro.

Implementar o modelo ARM com uma saída

Aqui, implementará o modelo e verá a saída dos pontos finais como JSON. Tem de preencher o parâmetro storageName com um nome exclusivo. Ele deve ser globalmente exclusivo no Azure, conter de 3 a 24 caracteres e incluir apenas letras minúsculas, números e hífenes. Pode reutilizar o nome único que criou na unidade anterior; se você fizer isso, o Azure atualizará o recurso existente em vez de criar um novo.

  1. Implante o modelo executando os seguintes comandos. Certifique-se de substituir {seu-nome-exclusivo} por uma cadeia de caracteres exclusiva para você.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addoutputs-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_LRS storageName={your-unique-name}
    

    Repare na saída.

    Captura de tela da janela Terminal mostrando a saída dos pontos de extremidade primários como JSON.

  1. Implante o modelo executando os seguintes comandos. Certifique-se de substituir {seu-nome-exclusivo} por uma cadeia de caracteres exclusiva para você.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addOutputs-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_LRS
    

    Repare na saída.

    Captura de tela da janela Terminal mostrando a saída dos pontos de extremidade primários como JSON.

Verificar a implementação da saída

No portal do Azure, acesse a sua implantação addOutputs. Também pode localizar lá a sua saída.

Captura de ecrã do portal do Azure a mostrar a seleção de saída no menu esquerdo.