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. 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:. Observe que essa expressão mantém a funçãoresourceGroup() de modelo ARM. 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 é , e a cadeia de caracteres que você está passando para a função é concat'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.

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:

Picture of a string created by concatenating the word Storage with a 13-character hash that contains both uppercase and lowercase letters.

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:

Picture of a string created by concatenating the word Storage with a 13-character hash, and then converting all letters to lowercase.