Adicionar flexibilidade ao seu modelo do Azure Resource Manager com as funções de modelos
Neste cenário, quer tornar a implementação do seu modelo do Azure Resource Manager (ARM) em diferentes ambientes o mais simples possível. Um dos pontos de discórdia é a criação de um nome exclusivo para a conta de armazenamento do Azure.
Para resolver este problema, decide criar uma expressão com as funções de modelos do Resource Manager.
O que são funções de modelos do Resource Manager?
As funções de modelos do Resource Manager acrescentam flexibilidade ao seu modelo do Resource Manager, permitindo obter dinamicamente os valores durante a implementação.
Para entender as funções, primeiro tem de entender as expressões. As expressões são valores avaliados quando o modelo é implementado. Eles começam e terminam com colchetes e podem retornar uma cadeia de []
caracteres, inteiro, booleano, matriz ou objeto.
No módulo anterior deste caminho de aprendizagem, você já trabalhou com expressões em seu modelo do Gerenciador de Recursos. Por exemplo, utilizou:
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
A expressão é o valor do atributo defaultValue:
. Repare que esta expressão contém a função do modelo do Resource Manager resourceGroup()
. Essa função retorna informações sobre o grupo de recursos no qual esse modelo está sendo implantado. .location
obtém uma propriedade do objeto devolvido pela função. As funções permitem-lhe construir dinamicamente os valores de que precisa.
Como trabalho com funções de modelos do Resource Manager?
Existem algumas regras a seguir ao trabalhar com funções:
Utilizar plicas ao transmitir uma cadeia de valor para uma função. Eis um exemplo:
concat('storage',uniqueString(resourceGroup().id))
. A função éconcat
, e a cadeia de caracteres que você está passando para a função é'storage'
.Para trabalhar com valores literais nas funções de modelos, precisa de carateres de escape. O caráter de escape depende do caráter a que se aplica.
Para definir uma propriedade como nula, pode utilizar
null
ou[json('null')]
. A função JSON devolve um objeto vazio quando nulo como parâmetro."stringValue": null, "objectValue": "[json('null')]"
O Resource Manager fornece diversas funções de modelos do Resource Manager. As funções estão listadas em grupos baseados no tipo:
- Funções de matriz para trabalhar com matrizes. Por exemplo,
first
elast
. - Funções de comparação para efetuar comparações nos seus modelos. Por exemplo,
equals
egreater
. - Funções de data para trabalhar com datas. Por exemplo,
utcNow
edateTimeAdd
. - Funções de valores de implementação para obter valores de secções do modelo e valores relacionados com a implementação. Por exemplo,
environment
eparameters
. - Funções lógicas para trabalhar com condições lógicas. Por exemplo,
if
enot
. - Funções numéricas para trabalhar com números inteiros. Por exemplo,
max
emod
. - Funções de objetos para trabalhar com objetos. Por exemplo,
contains
elength
. - Funções de recursos para obter valores de recursos. Por exemplo,
resourceGroup
esubscription
. - Funções de cadeias para trabalhar com cadeias. Por exemplo,
length
estartsWith
.
Como utilizar várias funções numa expressão?
Pode utilizar várias funções de modelos em conjunto para criar as suas próprias expressões. Neste cenário, precisa de criar uma expressão que crie um nome exclusivo para cada grupo de recursos, ao combinar uma entrada de prefixo e adicionar um código hash do ID do grupo de recursos. Esta expressão resulta em nomes de conta de armazenamento como dev2hu6fktr577wh
e staging5his8hgr67tt5
. Pode utilizar quatro funções para construir este valor de cadeia. Por exemplo:
"[toLower(concat('Storage',uniqueString(resourceGroup().id)))]"
Vamos analisar esta expressão.
Começando com concat, essa função usa qualquer número de argumentos e pode aceitar cadeias de caracteres ou matrizes para os parâmetros. Aqui, utiliza-se uma cadeia literal "Storage"
e concatena-se a mesma com o resultado de outra função, uniqueString. A função uniqueString
cria uma cadeia de código hash determinista com base nos parâmetros. Nesta expressão, está a criar um código hash do ID de grupo de recursos atual com outra função, resourceGroup.
Aqui está o resultado do que discutimos até agora:
Para cumprir as convenções de nomenclatura, esta cadeia tem de estar toda em minúsculas. Aqui, adicione a função toLower como função externa.
A cadeia resultante assemelha-se a: