Adicionar flexibilidade ao modelo do Azure Resource Manager através de parâmetros e saídas
Na última unidade, você criou um modelo do Azure Resource Manager (ARM) e adicionou uma conta de armazenamento do Azure a ele. Você pode notar que há um problema com seu modelo. O nome da conta de armazenamento é codificado. Só pode utilizar este modelo para implementar sempre a mesma conta de armazenamento. Para implantar uma conta de armazenamento com um nome diferente, você precisa criar um novo modelo, o que não é uma maneira prática de automatizar suas implantações. O SKU da conta de armazenamento também é codificado, o que significa que você não pode variar o tipo de conta de armazenamento para diferentes ambientes. Lembre-se de que, em nosso cenário, cada implantação pode ter um tipo diferente de conta de armazenamento. Pode tornar o modelo mais reutilizável ao adicionar um parâmetro para o SKU da conta de armazenamento.
Nesta unidade, ficará a saber mais sobre as secções de parâmetros e saídas do modelo.
Parâmetros do modelo ARM
Os parâmetros de modelo ARM permitem personalizar a implantação fornecendo valores adaptados para um ambiente específico. Por exemplo, transmite diferentes valores com base no facto de estar a implementar num ambiente para desenvolvimento, teste, produção ou outros casos. Por exemplo, o modelo anterior utiliza o SKU da conta de armazenamento Standard_LRS. Pode reutilizar este modelo para outras implementações que criam uma conta de armazenamento ao tornar o nome do SKU da conta de armazenamento num parâmetro. Em seguida, pode transmitir o nome do SKU que gostaria para esta implementação em específico quando o modelo é implementado. Pode fazê-lo na linha de comandos ou através de um ficheiro de parâmetros.
parameters
Na seção do modelo, você especifica quais valores pode ser inserido ao implantar os recursos. Está limitado a 256 parâmetros num modelo. As definições de parâmetros podem utilizar a maioria das funções do 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
- objeto
- secureObject
- matriz
Recomendações para a utilização de parâmetros
Use parâmetros para configurações que variam de acordo com o ambiente; por exemplo, SKU, tamanho ou capacidade. Use também parâmetros para nomes de recursos que você deseja especificar para facilitar a identificação ou para cumprir as convenções de nomenclatura internas. Introduza uma descrição para cada parâmetro e utilize valores predefinidos sempre que possível.
Por razões de segurança, nunca codifice ou forneça valores padrão para nomes de usuário e/ou senhas em modelos. Utilize sempre parâmetros para nomes de utilizador e palavras-passe (ou segredos). Utilize secureString para todas as palavras-passe e segredos. Se você passar dados confidenciais em um objeto JSON, use o tipo secureObject . Os parâmetros de modelo com os tipos secureString ou secureObject não podem ser lidos nem recolhidos após a implementação do recurso.
Utilizar parâmetros num modelo ARM
Na seção de parâmetros do modelo ARM, especifique os parâmetros que você pode inserir ao implantar os recursos. Está limitado a 256 parâmetros num modelo.
Aqui está um exemplo de um arquivo de modelo com um parâmetro para a SKU da conta de armazenamento definida na seção do parameters
modelo. Pode introduzir uma predefinição para que o parâmetro seja utilizado se nenhum valor for 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"
}
}
}
Em seguida, utilize o parâmetro na definição de recurso. A sintaxe é [parameters('name of the parameter')]
. Em seguida, ao implantar, você usa a parameters
função. No próximo módulo, você aprenderá mais sobre funções.
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-05-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. Repare na última linha do comando abaixo:
templateFile="azuredeploy.json"
az deployment group create \
--name testdeployment1 \
--template-file $templateFile \
--parameters storageAccountType=Standard_LRS
Saídas do modelo ARM
Na seção de saídas do seu modelo ARM, você pode especificar os valores que são retornados após uma implantação bem-sucedida. Eis os elementos que compõem a secçã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 | Description |
---|---|
nome da saída | tem de ser um identificador JavaScript válido. |
condição | (opcional) um valor booleano que indica se este valor de saída é devolvido. Quando for verdadeiro, o valor é incluído na saída da implementação. Quando for falso, o valor de saída é ignorado nesta implementação. Quando não especificado, o valor predefinido é true. |
type | o tipo de valor de saída. |
valor | (Opcional) Uma expressão de linguagem de modelo a ser avaliada e retornada como um valor de saída. |
cópia | (opcional) serve para devolver mais do que um valor para uma saída. |
Utilizar saídas num modelo ARM
Aqui está um exemplo para gerar os pontos de extremidade da conta de armazenamento:
"outputs": {
"storageEndpoint": {
"type": "object",
"value": "[reference('learntemplatestorage123').primaryEndpoints]"
}
}
Repare na parte reference
da expressão. Esta função obtém o estado de runtime da conta de armazenamento.
Implementar um modelo ARM
Lembre-se de que os modelos ARM são idempotentes, o que significa que você pode implantar o modelo no mesmo ambiente novamente e, se nada mudar no modelo, nada mudará no ambiente. Se for feita uma alteração no modelo (por exemplo, você altera um valor de parâmetro), somente essa alteração será implantada. O modelo pode incluir todos os recursos necessários da solução do Azure, pelo que poderá executar um modelo novamente de forma segura. Os recursos são criados apenas se ainda não existirem e atualizados apenas se houver uma alteração.