Adicionar flexibilidade ao modelo do Azure Resource Manager usando funções de modelo
Neste cenário, você quer tornar a implantação do modelo ARM (Azure Resource Manager) em ambientes diferentes o mais fácil possível. Uma das questões mais complicadas é criar um nome exclusivo para a conta de armazenamento do Azure.
Para resolver esse problema, você decide criar uma expressão usando funções de modelo do ARM.
O que são as funções de modelo ARM?
As funções de modelo ARM adicionam flexibilidade ao modelo ARM ao obterem valores dinamicamente durante a implantação.
Para entender as funções, primeiro você precisa entender as expressões. Expressões são valores que são avaliados quando o modelo é implantado. Eles começam e terminam entre colchetes como [] e podem retornar uma cadeia de caracteres, um inteiro, um booleano, uma matriz ou um objeto.
No módulo anterior deste roteiro de aprendizagem, você já trabalhou com expressões no modelo do Resource Manager. Por exemplo, você usou:
"parameters": {
"___location": {
"type": "string",
"defaultValue": "[resourceGroup().___location]"
}
},
A expressão é o valor do defaultValue: atributo. Observe que essa expressão contém a função resourceGroup(). Essa função retorna informações sobre o grupo de recursos no qual esse modelo está sendo implantado. O .___location recupera uma propriedade do objeto retornado pela função. As funções permitem que você construa os valores necessários dinamicamente.
Como fazer para trabalhar com funções de modelo ARM?
Há algumas regras a serem seguidas quando você trabalha com funções:
Use aspas simples ao passar um valor de cadeia de caracteres para uma função. Aqui está 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 em funções de modelo, você precisa de caracteres de escape. O caractere de escape varia dependendo do que você está escapando.
Para definir uma propriedade como nula, é possível usar
nullou[json('null')]. A função JSON retorna um objeto vazio quando você fornece null como o parâmetro."stringValue": null, "objectValue": "[json('null')]"
O Resource Manager fornece várias funções de modelo do ARM para você. As funções são listadas em grupos com base nos respectivos tipos:
-
Funções de matriz para trabalhar com matrizes. Por exemplo,
firstelast. -
Funções de comparação para fazer comparações em seus modelos. Por exemplo,
equalsegreater. -
Funções de data para manipulação de datas. Por exemplo,
utcNowedateTimeAdd. -
Funções de valor de implantação para obter valores de seções do modelo e valores relacionados à implantação. Por exemplo,
environmenteparameters. -
Funções lógicas para trabalhar com condições lógicas. Por exemplo,
ifenot. -
Funções numéricas para trabalhar com inteiros. Por exemplo,
maxemod. -
Funções de objeto para trabalhar com objetos. Por exemplo,
containselength. -
Funções de recurso para obter valores de recurso. Por exemplo,
resourceGroupesubscription. -
Funções de cadeia de caracteres para trabalhar com cadeias de caracteres. Por exemplo,
lengthestartsWith.
Como posso usar várias funções em uma expressão?
Você pode usar várias funções de modelo juntas para criar suas próprias expressões. Nesse cenário, você precisa criar uma expressão que gere um nome exclusivo para cada grupo de recursos, combinando uma entrada de prefixo com um hash da ID do grupo de recursos. Essa expressão resulta em nomes de conta de armazenamento semelhantes a dev2hu6fktr577wh e staging5his8hgr67tt5. Você pode usar quatro funções para construir esse valor de cadeia de caracteres. Por exemplo:
"[toLower(concat('Storage',uniqueString(resourceGroup().id)))]"
Vamos percorrer essa expressão.
A partir do concat, essa função usa qualquer número de argumentos e pode aceitar cadeias de caracteres ou matrizes para os parâmetros. Aqui, você usa uma cadeia de caracteres literal "Storage" e a concatena com o resultado de outra função, uniqueString. A função uniqueString cria uma cadeia de caracteres de hash determinística com base nos parâmetros. Nesta expressão, você cria um hash da ID do grupo de recursos atual usando outra função, resourceGroup.
Aqui está a saída do que discutimos até agora:
Para estar em conformidade com as convenções de nomenclatura, você precisa que essa cadeia de caracteres fique em letras minúsculas. Aqui, você adiciona a função toLower como a função externa.
A cadeia de caracteres resultante tem esta aparência: