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, coloque o cursor dentro das chaves no atributo parameters. Tem a seguinte aparência: "parameters":{},

  2. Selecione Introduzir e, em seguida, introduza par. Verá uma lista de fragmentos relacionados. Escolha new-parameter, que adiciona um parâmetro genérico ao modelo. Este exemplo é parecido com este:

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

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

    "parameters": {
      "storageName": {
        "type": "string",
        "minLength": 3,
        "maxLength": 24,
        "metadata": {
          "description": "The name of the Azure storage resource"
        }
      }
    },
    
  5. 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": "2023-05-01",
          "name": "[parameters('storageName')]",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Standard_LRS"
          }
        }
      ],
      "outputs": {}
    }
    
  6. 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. Este fragmento é o código que utilizou anteriormente, mas o nome da implementação foi alterado. Preencha o parâmetro storageName com um nome exclusivo. Não se esqueça de que o nome tem de ser exclusivo em todo o Azure. Pode utilizar o nome exclusivo que criou 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 seguintes comandos do Azure PowerShell no terminal. Este fragmento é o código que utilizou anteriormente, mas o nome da implementação foi alterado. Preencha o parâmetro storageName com um nome exclusivo. Não se esqueça de que o nome tem de ser exclusivo em todo o Azure. Pode utilizar o nome exclusivo que criou 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}

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 implementaçã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. Coloque o cursor após a chaveta de fecho do parâmetro storageName. Adicione uma vírgula e prima Enter.

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

  3. Altere o novo parâmetro generic 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 esse 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 este parâmetro.

    Captura de ecrã do ficheiro azuredeploy.json a mostrar o comentário Estes são os valores permitidos para uma conta de armazenamento do Azure na linha que precede o parâmetro storageSKU.

    Os modelos ARM suportam comentários // e /* */.

  5. Atualize resources (recursos) para utilizar o parâmetro storageSKU. 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": "2023-05-01",
          "name": "[parameters('storageName')]",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "[parameters('storageSKU')]"
          }
        }
      ],
      "outputs": {}
    }
    
  6. 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. Não se esqueça de que o nome tem de ser exclusivo em todo o Azure. Pode utilizar o nome exclusivo que criou na última secçã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}
    

    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, alterou o parâmetro storageSKU para Basic. Preencha o parâmetro storageName com um nome exclusivo. Não se esqueça de que o nome tem de ser exclusivo em todo o Azure. Pode utilizar o nome exclusivo que criou na última secçã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}
    

    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. Não se esqueça de que o nome tem de ser exclusivo em todo o Azure. Pode utilizar o nome exclusivo que criou na última secçã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
    

    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, alterou o parâmetro storageSKU para Basic. Preencha o parâmetro storageName com um nome exclusivo. Não se esqueça de que o nome tem de ser exclusivo em todo o Azure. Pode utilizar o nome exclusivo que criou na última secçã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
    

    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, coloque o cursor dentro das chaves no atributo "outputs":{},outputs .

  2. Prima Enter e, em seguida, enter out. Você obtém uma lista de trechos relacionados. Selecione nova saída. 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]". Esta expressão é a que descrevemos na unidade anterior que obtém os dados do ponto final. Como especificamos o objeto como o tipo, ele retorna o objeto no formato JSON.

    "outputs": {
      "storageEndpoint": {
        "type": "object",
        "value": "[reference(parameters('storageName')).primaryEndpoints]"
      }
    
  4. 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. Não se esqueça de que o nome tem de ser exclusivo em todo o Azure. Pode utilizar o nome exclusivo que criou na última secção. Nesse caso, o Azure atualiza o recurso em vez de criar um novo.

  1. Implante o modelo executando os seguintes comandos. Confirme que substitui {your-unique-name} por uma cadeia exclusiva para si.

    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. Confirme que substitui {your-unique-name} por uma cadeia exclusiva para si.

    $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, aceda à implementaçã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.