Adicionar flexibilidade ao seu modelo do Azure Resource Manager com as funções de modelos

Concluído

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. Começam e terminam com parênteses retos, [ e ], e podem devolver uma cadeia, número inteiro, valor booleano, matriz ou objeto.

No módulo anterior neste caminho de aprendizagem, já trabalhou com expressões no seu modelo de Resource Manager. Por exemplo, utilizou:

"parameters": {
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]"
  }
},

A expressão é o valor do atributo defaultValue:. Note que esta expressão mantém a funçãoresourceGroup() do modelo ARM. Esta função devolve informações sobre o grupo de recursos para o qual este modelo está a implementar. .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 aqui é concat, e a corda que está a passar 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 e last.
  • Funções de comparação para efetuar comparações nos seus modelos. Por exemplo, equals e greater.
  • Funções de data para trabalhar com datas. Por exemplo, utcNow e dateTimeAdd.
  • 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 e parameters.
  • Funções lógicas para trabalhar com condições lógicas. Por exemplo, if e not.
  • Funções numéricas para trabalhar com números inteiros. Por exemplo, max e mod.
  • Funções de objetos para trabalhar com objetos. Por exemplo, contains e length.
  • Funções de recursos para obter valores de recursos. Por exemplo, resourceGroup e subscription.
  • Funções de cadeias para trabalhar com cadeias. Por exemplo, length e startsWith.

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.

A partir de concat, esta função utiliza um número de argumentos e pode aceitar cadeias ou matrizes como 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.

Eis o resultado do que abordámos até agora:

Imagem de uma cadeia criada ao concatenar a palavra Storage com um código hash de 13 carateres que contém maiúsculas e minúsculas.

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:

Imagem de uma cadeia criada ao concatenar a palavra Storage com um código hash de 13 carateres e, em seguida, a converter todas as letras em minúsculas.