Adicionar flexibilidade ao seu modelo do Azure Resource Manager usando parâmetros e saídas

Concluído

Na última unidade, você criou um modelo do Azure Resource Manager (ARM) e adicionou uma conta de armazenamento do Azure a ele. Você dever ter notado que há um problema com seu modelo. O nome da conta de armazenamento é embutido em código. Você só pode usar esse modelo para implantar a mesma conta de armazenamento a cada vez. Para implantar uma conta de armazenamento com um nome diferente, você precisaria criar um modelo, o que não é um modo prático de automatizar suas implantações. O SKU da conta de armazenamento também é embutido em código, o que significa que não é possível variar o tipo de conta de armazenamento para ambientes diferentes. Lembre-se de que, em nosso cenário, cada implantação poderá ter um tipo diferente de conta de armazenamento. É possível tornar seu modelo mais reutilizável adicionando um parâmetro ao SKU da conta de armazenamento.

Nesta unidade, você aprenderá sobre as seções de parâmetros e saídas do modelo.

Parâmetros de modelo do ARM

Parâmetros de modelo do ARM permitem personalizar a implantação fornecendo valores personalizados para um determinado ambiente. Por exemplo, passe valores diferentes com base no fato de estar implantando em um ambiente para desenvolvimento, teste, produção ou outros. O modelo anterior usa o SKU Standard_LRS da conta de armazenamento. É possível reutilizar esse modelo para outras implantações que criam uma conta de armazenamento, tornando o nome do SKU da conta de armazenamento um parâmetro. Depois passe o nome do SKU que deseja usar nessa implantação específica quando o modelo for implantado. Essa etapa pode ser feita na linha de comando ou usando um arquivo de parâmetro.

Na seção parameters do modelo, especifique quais valores você pode inserir ao implantar os recursos. O limite de parâmetros em um modelo é 256. As definições de parâmetro podem usar a maioria das funções de modelo.

As propriedades disponíveis para um parâmetro são:

"parameters": {
  "<parameter-name>": {
    "type": "<type-of-parameter-value>",
    "defaultValue": "<default-value-of-parameter>",
    "allowedValues": [
      "<array-of-allowed-values>"
    ],
    "minValue": <minimum-value-for-int>,
    "maxValue": <maximum-value-for-int>,
    "minLength": <minimum-length-for-string-or-array>,
    "maxLength": <maximum-length-for-string-or-array-parameters>,
    "metadata": {
      "description": "<description-of-the-parameter>"
    }
  }
}

Os tipos de parâmetros permitidos são:

  • string
  • secureString
  • integers
  • boolean
  • object
  • secureObject
  • array

Recomendações para usar parâmetros

Use parâmetros para configurações que variam de acordo com o ambiente, por exemplo, SKU, tamanho ou capacidade. Também use parâmetros para nomes de recursos que você deseja especificar a fim de facilitar a identificação ou para estar em conformidade com as convenções internas de nomenclatura. Forneça uma descrição para cada parâmetro e use valores padrão sempre que possível.

Por motivos de segurança, nunca codifique ou forneça valores padrão para nomes de usuário e/ou senhas em modelos. Sempre use parâmetros para nomes de acessadores e senhas (ou segredos). Use secureString para todas as senhas e segredos. Se você passar dados confidenciais em um objeto JSON, use o tipo secureObject. Os parâmetros de modelo com secureString ou secureObject não podem ser lidos nem coletados após a implantação do recurso.

Usar parâmetros em um modelo do ARM

Na seção de parâmetros do modelo do ARM, especifique os parâmetros que você pode inserir ao implantar os recursos. O limite de parâmetros em um modelo é 256.

Aqui está um exemplo de um arquivo de modelo com um parâmetro para a SKU da conta de armazenamento definida na seção parameters do modelo. É possível fornecer um padrão para o parâmetro a ser usado caso nenhum valor seja especificado na execução.

"parameters": {
  "storageAccountType": {
    "type": "string",
    "defaultValue": "Standard_LRS",
    "allowedValues": [
      "Standard_LRS",
      "Standard_GRS",
      "Standard_ZRS",
      "Premium_LRS"
    ],
    "metadata": {
      "description": "Storage Account type"
    }
  }
}

Depois, use o parâmetro na definição de recurso. A sintaxe é [parameters('name of the parameter')]. Você usará a função parameters. Você aprenderá mais sobre as funções no próximo módulo.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-04-01",
    "name": "learntemplatestorage123",
    "location": "[resourceGroup().location]",
    "sku": {
      "name": "[parameters('storageAccountType')]"
    },
    "kind": "StorageV2",
    "properties": {
      "supportsHttpsTrafficOnly": true
    }
  }
]

Ao implantar o modelo, você pode fornecer um valor para o parâmetro. Observe a última linha no seguinte comando:

templateFile="azuredeploy.json"
az deployment group create \
  --name testdeployment1 \
  --template-file $templateFile \
  --parameters storageAccountType=Standard_LRS

Saídas do modelo do ARM

Na seção de saídas do modelo do ARM, é possível especificar os valores que serão retornados após uma implantação bem-sucedida. Aqui estão os elementos que compõem a seção de saídas.

"outputs": {
  "<output-name>": {
    "condition": "<boolean-value-whether-to-output-value>",
    "type": "<type-of-output-value>",
    "value": "<output-value-expression>",
    "copy": {
      "count": <number-of-iterations>,
      "input": <values-for-the-variable>
    }
  }
}
Elemento Descrição
Nome de saída Deve ser um identificador JavaScript válido.
condition é um valor booliano que indica se esse valor de saída será retornado (opcional). Quando for true, o valor será incluído na saída para a implantação. Quando for false, o valor de saída será ignorado para essa implantação. Quando não for especificado, o valor padrão será true.
tipo o tipo do valor de saída.
value uma expressão de linguagem do modelo avaliada e retornada como valor de saída (opcional).
copy é usado para retornar mais de um valor para uma saída (opcional).

Usar saídas em um modelo do ARM

Veja um exemplo de como gerar os pontos de extremidade da conta de armazenamento:

"outputs": {
  "storageEndpoint": {
    "type": "object",
    "value": "[reference('learntemplatestorage123').primaryEndpoints]"
  }
}

Observe a parte reference da expressão. Essa função obtém o estado de runtime da conta de armazenamento.

Implantar um modelo do ARM novamente

Lembre-se de que os modelos do ARM são idempotentes. Isso significa que é possível implantar o modelo no mesmo ambiente novamente. Além disso, caso nada tenha sido alterado no modelo, nada será alterado no ambiente. No entanto, caso haja uma alteração no modelo (como a alteração de um valor de parâmetro), somente essa alteração será implantada. O modelo poderá conter todos os recursos necessários para sua solução do Azure e será possível executar um modelo com segurança novamente. Os recursos serão criados apenas se ainda não existirem e atualizados somente se houver uma alteração.