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

Concluído

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

Criar parâmetros para o modelo do ARM

Aqui, você torna seu modelo do ARM mais flexível adicionando parâmetros que podem ser definidos no runtime. Crie um parâmetro para o valor de storageName.

  1. No arquivo azuredeploy.json no Visual Studio Code, coloque o cursor dentro das chaves no atributo parameters. Ela tem esta aparência: "parameters":{},

  2. Selecione Inserir e insira par. Você verá uma lista de snippets de código relacionados. Escolha new-parameter, que adiciona um parâmetro genérico ao modelo. Ela será semelhante a este exemplo:

     "parameters": {
        "parameter1": {
        "type": "string",
        "metadata": {
            "description": "description"
        }
      }
    },
    
  3. Altere o parâmetro de parameter1 para storageName e deixe o tipo como uma cadeia. Adicione um valor minLength de 3 e um valor maxLength de 24. Adicione o valor de descrição O nome do recurso de armazenamento do Azure.

  4. O bloco de parâmetros deve agora se parecer com este exemplo:

    "parameters": {
      "storageName": {
        "type": "string",
        "minLength": 3,
        "maxLength": 24,
        "metadata": {
          "description": "The name of the Azure storage resource"
        }
      }
    },
    
  5. Use o novo parâmetro no bloco de 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": "2023-05-01",
          "name": "[parameters('storageName')]",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Standard_LRS"
          }
        }
      ],
      "outputs": {}
    }
    
  6. Salve o arquivo.

Implantar o modelo do ARM com parâmetros

Aqui, você altera o nome da implantação para refletir melhor o que essa implantação faz e preenche um valor para o novo parâmetro.

Execute os comandos da CLI do Azure a seguir no terminal. Esse snippet é o mesmo código usado anteriormente, porém o nome da implantação será alterado. Preencha com um nome exclusivo para o parâmetro storageName. Lembre-se de que esse nome deverá ser exclusivo em todo o Azure. É possível usar o nome exclusivo criado na última unidade. Nesse caso, o Azure atualiza o recurso 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 comandos do Azure PowerShell a seguir no terminal. Esse snippet é o mesmo código usado anteriormente, porém o nome da implantação será alterado. Preencha com um nome exclusivo para o parâmetro storageName. Lembre-se de que esse nome deverá ser exclusivo em todo o Azure. É possível usar o nome exclusivo criado na última unidade. Nesse caso, o Azure atualiza o recurso 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}

Verifique sua implantação

  1. Quando a implantação for concluída, volte para o portal do Azure no navegador. Vá para o grupo de recursos e veja que agora há Três Implantações Bem-Sucedidas. Selecione esse link.

    Observe que todas as três implantações estão na lista.

  2. Explore a implantação addnameparameter, conforme feito anteriormente.

Adicione outro parâmetro que limita os valores permitidos

Use aqui parâmetros para limitar os valores permitidos para um parâmetro.

  1. Coloque o cursor após a chave de fechamento do parâmetro storageName. Adicione uma vírgula e selecione Inserir.

  2. Novamente, insira par e selecione new-parameter.

  3. Altere o novo parâmetro genérico para o seguinte código:

    "storageSKU": {
       "type": "string",
       "defaultValue": "Standard_LRS",
       "allowedValues": [
         "Standard_LRS",
         "Standard_GRS",
         "Standard_RAGRS",
         "Standard_ZRS",
         "Premium_LRS",
         "Premium_ZRS",
         "Standard_GZRS",
         "Standard_RAGZRS"
       ]
     }
    

    Aqui, você está listando os valores que este parâmetro permite. Se o modelo for executado com um valor que não é permitido, a implantação falhará.

  4. Adicione um comentário a esse parâmetro.

    Captura de tela do arquivo azuredeploy.json mostrando o comentário Estes são os valores permitidos para uma conta de armazenamento do Azure na linha anterior ao parâmetro storageSKU.

    Os modelos do ARM são compatíveis com os comentários // e /* */.

  5. Atualize os recursos para usar o parâmetro storageSKU. Se você usufruir do IntelliSense no Visual Studio Code, esta etapa ficará 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": "2023-05-01",
          "name": "[parameters('storageName')]",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "[parameters('storageSKU')]"
          }
        }
      ],
      "outputs": {}
    }
    
  6. Salve o arquivo.

Implantar o modelo do ARM

Aqui, implante com êxito usando um parâmetro storageSKU que está na lista de permissões. Em seguida, tente implantar o modelo usando um storageSKU parâmetro que não está na lista permitida. A segunda implantação falha conforme esperado.

  1. Implante o modelo executando os seguintes comandos. Preencha com um nome exclusivo para o parâmetro storageName. Lembre-se de que esse nome deverá ser exclusivo em todo o Azure. Você pode usar o nome exclusivo criado na última seção. Nesse caso, o Azure atualiza o recurso 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}
    

    Permita que esta implantação seja concluída. Essa implantação é realizada com sucesso conforme o esperado. Sua lista de valores permitidos impede que os usuários do seu modelo passem valores de parâmetro que não funcionam para o recurso. Vejamos o que acontece quando você fornece uma SKU inválida.

  2. Execute os comandos a seguir para implantar o modelo com um parâmetro que não é permitido. Aqui, você alterou o parâmetro storageSKU para Básico. Preencha com um nome exclusivo para o parâmetro storageName. Lembre-se de que esse nome deverá ser exclusivo em todo o Azure. Você pode usar o nome exclusivo criado na última seção. Nesse caso, o Azure atualiza o recurso 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}
    

    Essa implantação falha. Observe o erro.

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

  1. Implante o modelo executando os seguintes comandos. Preencha com um nome exclusivo para o parâmetro storageName. Lembre-se de que esse nome deverá ser exclusivo em todo o Azure. Você pode usar o nome exclusivo criado na última seção. Nesse caso, o Azure atualiza o recurso 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
    

    Permita que esta implantação seja concluída. Essa implantação é realizada com sucesso conforme o esperado. Sua lista de valores permitidos impede que os usuários do seu modelo passem valores de parâmetro que não funcionam para o recurso. Vejamos o que acontece quando você fornece uma SKU inválida.

  2. Execute os comandos a seguir para implantar o modelo com um parâmetro que não é permitido. Aqui, você alterou o parâmetro storageSKU para Básico. Preencha com um nome exclusivo para o parâmetro storageName. Lembre-se de que esse nome deverá ser exclusivo em todo o Azure. Você pode usar o nome exclusivo criado na última seção. Nesse caso, o Azure atualiza o recurso 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
    

    Essa implantação falha. Observe o erro.

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

Adicionar saída ao modelo do ARM

Aqui, adicione à seção outputs do modelo do ARM a fim de gerar os pontos de extremidade para o recurso de conta de armazenamento.

  1. No arquivo azuredeploy.json no Visual Studio Code, coloque o cursor dentro das chaves no atributo saídas "outputs":{},.

  2. Pressione Enter e, em seguida, insira out. Você obtém uma lista de snippets relacionados. Selecione new-output. Ele adiciona uma saída genérica ao modelo que se parece com este exemplo:

    "outputs": {
      "output1": {
        "type": "string",
        "value": "value"
      }
    
  3. Altere "output1" para "storageEndpoint" e, em seguida, altere o valor de type para "object". Altere o valor de value para "[reference(parameters('storageName')).primaryEndpoints]". Essa expressão é aquela que obtém os dados do ponto de extremidade, descritos na unidade anterior. Como especificamos object como o tipo, ele retorna o objeto no formato JSON.

    "outputs": {
      "storageEndpoint": {
        "type": "object",
        "value": "[reference(parameters('storageName')).primaryEndpoints]"
      }
    
  4. Salve o arquivo.

Implantar o modelo do ARM com uma saída

Aqui, você implanta o modelo e vê a saída dos pontos de extremidade como JSON. Você precisa preencher um nome exclusivo para o parâmetro storageName. Lembre-se de que esse nome deverá ser exclusivo em todo o Azure. Você pode usar o nome exclusivo criado na última seção. Nesse caso, o Azure atualiza o recurso em vez de criar um novo.

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

    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}
    

    Observe a saída.

    Captura de tela da janela do 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 sua cadeia de caracteres exclusiva.

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

    Observe a saída.

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

Verifique sua implantação de saída

No portal do Azure, acesse a implantação addOutputs. Você também pode encontrar a saída lá.

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