Adición de flexibilidad a la plantilla de Azure Resource Manager mediante funciones de plantilla

Completado

En este escenario, quiere que la implementación de la plantilla de Azure Resource Manager (ARM) en otros entornos sea lo más sencilla posible. Una de las áreas de contención es dar con un nombre único para la cuenta de almacenamiento de Azure.

Para solucionar este problema, decide crear una expresión con las funciones de plantilla de Resource Manager.

¿Qué son las funciones de plantilla de Resource Manager?

Las funciones de plantilla de ARM agregan flexibilidad a la plantilla mediante la obtención dinámica de valores durante la implementación.

Para comprender las funciones, primero hay que comprender las expresiones. Las expresiones son valores que se evalúan cuando se implementa la plantilla. Comienzan y terminan con corchetes [] y pueden devolver una cadena, un entero, un valor booleano, una matriz o un objeto.

En el módulo anterior de esta ruta de aprendizaje ya ha trabajado con expresiones en la plantilla de Resource Manager. Por ejemplo, ha usado:

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

La expresión es el valor del atributo defaultValue:. Tenga en cuenta que esta expresión contiene la función de plantilla de ARM resourceGroup(). Esta función devuelve información sobre el grupo de recursos en el que se implementa esta plantilla. .location recupera una propiedad del objeto devuelto por la función. Las funciones permiten crear valores que necesita dinámicamente.

Procedimiento para trabajar con funciones de plantilla de Resource Manager

Cuando se trabaja con funciones se deben seguir algunas reglas:

  • Use comillas simples al pasar un valor de cadena a una función. Por ejemplo: concat('storage',uniqueString(resourceGroup().id)). Aquí la función es concat y la cadena que se pasa a la función es 'storage'.

  • Para trabajar con valores literales en funciones de plantilla, necesita caracteres de escape. El carácter de escape varía en función del elemento al que se aplique.

  • Para establecer una propiedad en NULL, puede usar null o [json('null')]. La función JSON devuelve un objeto vacío al proporcionar "null" como parámetro.

    "stringValue": null,
    "objectValue": "[json('null')]"
    

Resource Manager proporciona varias funciones de plantilla de Resource Manager. Las funciones se enumeran en grupos según su tipo:

  • Funciones de matriz para trabajar con matrices. Por ejemplo, first y last.
  • Funciones de comparación para comparar plantillas. Por ejemplo, equals y greater.
  • Funciones de fecha para trabajar con fechas. Por ejemplo, utcNow y dateTimeAdd.
  • Funciones del valor de implementación para obtener los valores de las secciones de la plantilla y los valores relacionados con la implementación. Por ejemplo, environment y parameters.
  • Funciones lógicas para trabajar con condiciones lógicas. Por ejemplo, if y not.
  • Funciones numéricas para trabajar con enteros. Por ejemplo, max y mod.
  • Funciones de objeto para trabajar con objetos. Por ejemplo, contains y length.
  • Funciones de recursos para obtener valores de recursos. Por ejemplo, resourceGroup y subscription.
  • Funciones de cadena para trabajar con cadenas. Por ejemplo, length y startsWith.

Procedimiento para usar varias funciones en una expresión

Puede usar varias funciones de plantilla de manera conjunta para crear expresiones propias. En este escenario, tiene que encontrar una forma de crear una expresión para crear un nombre único para cada grupo de recursos mediante la combinación de una entrada de prefijo con un hash del id. del grupo de recursos. El resultado de esta expresión son nombres de cuenta de almacenamiento como dev2hu6fktr577wh y staging5his8hgr67tt5. Puede usar cuatro funciones para crear este valor de cadena. Por ejemplo:

"[toLower(concat('Storage',uniqueString(resourceGroup().id)))]"

Analicemos esta expresión.

A partir de concat, esta función toma el número de argumentos que corresponda, y puede aceptar cadenas o matrices para los parámetros. Aquí se usa una cadena literal "Storage" y se concatena con el resultado de otra función, uniqueString. La función uniqueString crea una cadena de hash determinista en función de los parámetros. En esta expresión, se crea un hash del identificador del grupo de recursos actual mediante otra función, resourceGroup.

Este es el resultado de lo que se ha descrito hasta ahora:

Imagen de una cadena creada mediante la concatenación de la palabra Storage con un hash de 13 caracteres que contiene letras mayúsculas y minúsculas.

Para cumplir con las convenciones de nomenclatura, esta cadena debe usar solamente minúsculas. Aquí, se agrega la función toLower como función de salida.

Este es el aspecto de la cadena resultante:

Imagen de una cadena creada mediante la concatenación de la palabra Storage con un hash de 13 caracteres y la posterior conversión de todas las letras a minúsculas.