Adicionar flexibilidade ao modelo do Azure Resource Manager usando funções de modelo

Concluído

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 solucionar esse problema, você decide criar uma expressão usando as funções de modelo 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 com colchetes e podem retornar uma cadeia de caracteres [], um inteiro, um booliano, 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 atributo defaultValue:. Observe que essa expressão contém a função de modelo ARM 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 null ou [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 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, first e last.
  • Funções de comparação para fazer comparações em seus modelos. Por exemplo, equals e greater.
  • Funções de data para trabalhar com datas. Por exemplo, utcNow e dateTimeAdd.
  • Funções de valor de implantação para obter valores de seções do modelo e valores relacionados à implantaçã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 inteiros. Por exemplo, max e mod.
  • Funções de objeto para trabalhar com objetos. Por exemplo, contains e length.
  • Funções de recurso para obter valores de recurso. Por exemplo, resourceGroup e subscription.
  • Funções de cadeia de caracteres para trabalhar com cadeias de caracteres. Por exemplo, length e startsWith.

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, esta função usa qualquer quantidade de argumentos e pode aceitar cadeias de caracteres ou matrizes para os parâmetros. Aqui, você usa uma cadeia de caracteres literal "Storage" e concatena-a 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:

Imagem de uma cadeia de caracteres criada com a concatenação da palavra Storage com um hash de 13 caracteres que contém letras maiúsculas e minúsculas.

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:

Imagem de uma cadeia de caracteres criada concatenando a palavra Storage com um hash de 13 caracteres e convertendo todas as letras em minúsculas.