Ejercicio: Implementación y exportación de un flujo de trabajo de Azure Logic Apps mediante una plantilla de ARM
En el ejercicio anterior, se ha implementado una aplicación lógica mediante una plantilla de Azure Resource Manager básica. La plantilla no era flexible porque todo estaba codificado de forma rígida. Por ejemplo, para cambiar el nombre del flujo de trabajo o la ubicación de implementación de la aplicación, era necesario editar la plantilla. En escenarios en los que hay varias implementaciones en un entorno generado por scripts, la edición manual de la plantilla es muy complicada. Un mejor enfoque es suministrar valores como parámetros para personalizar la implementación de los recursos.
Actualización de la plantilla para usar los parámetros de plantilla
Copie la plantilla básica que se ha usado en el ejercicio anterior con el comando
cp
siguiente:cp basic-template.json template-with-params.json
Abra la plantilla en el editor integrado con el comando
code
siguiente:code template-with-params.json
El primer paso consiste en agregar parámetros para poder personalizar fácilmente el nombre de la aplicación y la ubicación donde se ejecuta.
Reemplace la sección
parameters
de la plantilla por el siguiente fragmento de código, que agrega dos nuevos parámetros,logicAppName
ylocation
:"parameters": { "logicAppName": { "type": "string", "metadata": { "description": "The name of the logic app to create." } }, "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for all resources." } } },
Ambos parámetros son cadenas. No se proporciona un valor predeterminado para el parámetro
logicAppName
, lo que significa que tendrá que hacerlo en el momento de la implementación. En cambio,location
es opcional, ya que se proporciona un valor predeterminado.El valor predeterminado para el parámetro
location
es la ubicación del grupo de recursos en el que se implementa la aplicación. Ese valor se obtiene al hacer referencia a la propiedad location desde el grupo de recursos devuelto por la función de plantillaresourceGroup()
. Las expresiones comienzan y terminan con corchetes izquierdos y derechos ([ ]
) respectivamente. El valor de la expresión se evalúa cuando la plantilla finaliza la implementación. Una expresión puede devolver una cadena, un entero, un valor booleano, una matriz o un objeto. En una plantilla, puede definir 256 parámetros como máximo.Ahora que se han definido dos parámetros nuevos, se usarán en la plantilla mediante el reemplazo de los valores codificados de forma rígida por referencias a los parámetros nuevos.
Reemplace los campos
name
ylocation
en la sección de recursos de la plantilla para usar los parámetros nuevos, tal como se muestra en el fragmento de código siguiente:"name": "[parameters('logicAppName')]", "location": "[parameters('location')]",
Reemplace la sección
outputs
de la parte inferior de la plantilla por el código siguiente. Se actualiza el valor de la variable de plantillalogicAppUrl
para usar también el parámetrologicAppName
, como se muestra en el fragmento de código siguiente:"outputs": { "logicAppUrl": { "type": "string", "value": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', parameters('logicAppName')), '/triggers/manual'), '2017-07-01').value]" } }
Presione Ctrl + S para guardar todos los cambios en template-with-params.json.
Implementación del recurso de aplicación lógica con la plantilla parametrizada
Hay dos maneras de suministrar parámetros a la plantilla durante la implementación con la marca --parameters
en el comando az deployment group create
. Es posible pasar un identificador URI de un archivo de parámetros remoto o el nombre de un archivo local. Usemos el archivo local.
Creación de un archivo JSON de parámetros
Cree un archivo denominado
params.json
en el editor de código integrado con el comando siguiente:code params.json
Pegue el JSON siguiente en params.json y presione Ctrl + S para guardar los cambios.
{ "logicAppName": { "value": "myLogicApp" } }
Validación de la plantilla
En Cloud Shell, ejecute
az deployment group validate
para validar la plantilla:az deployment group validate \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --template-file template-with-params.json \ --parameters @params.json
El argumento
--template-file
apunta a la plantilla local. El nombre de archivo de la plantilla es template-with-params.json.Verá un enorme bloque de JSON como salida, lo que indica que la plantilla ha superado la validación.
Azure Resource Manager rellena los parámetros de plantilla y comprueba si esta se ejecutaría correctamente en la suscripción.
Si la validación genera errores, vería una descripción detallada del error en la salida.
Implementación de plantilla con parámetros desde un archivo local
En Cloud Shell, ejecute el comando siguiente para implementar el recurso de aplicación lógica con el nombre de la aplicación tomado del archivo params.json. En el archivo params.json file, el parámetro
location
no está establecido, por lo que se usa el valor predeterminado.az deployment group create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --template-file template-with-params.json \ --parameters @params.json
La implementación tardará unos segundos y podrá ver el progreso en la línea de comandos de Cloud Shell. Cuando se complete la implementación, debería ver
provisioningState
en el resultado JSON con el valorSucceeded
.Para ver la aplicación en acción, busque el valor logicAppUrl en el resultado JSON. Seleccione la dirección URL o cópiela y péguela en una nueva ventana del explorador. La página mostrará el mensaje Hello Azure Logic Apps Template! (Bienvenido a la plantilla de Azure Logic Apps).
Implementación de plantilla con parámetros desde la línea de comandos
En lugar de un archivo de parámetros cada vez que queremos realizar la implementación desde la línea de comandos, podemos suministrar los parámetros en una cadena JSON en la línea de comandos.
Ejecute el comando siguiente en Cloud Shell para implementar el recurso de aplicación lógica con el nombre de la aplicación y su ubicación, proporcionados como una cadena JSON en la línea de comandos:
az deployment group create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --template-file template-with-params.json \ --parameters '{ "logicAppName": {"value":"MyLogicApp2"}, "location": {"value":"East US"}}'
La implementación tardará unos segundos y podrá ver el progreso en la línea de comandos de Cloud Shell. Cuando se complete la implementación, debería ver
provisioningState
en el resultado JSON con el valorSucceeded
.Para ver la aplicación en acción, busque el valor logicAppUrl en el resultado JSON. Seleccione la dirección URL y péguela en una nueva ventana del explorador. La página mostrará el mensaje Hello Azure Logic Apps Template! (Bienvenido a la plantilla de Azure Logic Apps).
Ejecute el comando siguiente para mostrar todos los flujos de trabajo de Azure Logic Apps implementados hasta ahora:
az resource list \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --resource-type Microsoft.Logic/workflows \ --query [*].[name,location] --output tsv
Este comando muestra los dos flujos de trabajo de Azure Logic Apps implementados hasta ahora, todo ello desde una plantilla.
Actualización de la acción de aplicación en la plantilla de Azure Resource Manager
Ahora centrémonos en hacer que la aplicación haga un poco más que solo enviarnos de vuelta un mensaje estático. La aplicación se mantendrá como un flujo de trabajo desencadenado por HTTP y seguirá devolviendo una respuesta HTTP. Vamos a pasar algunos valores con la solicitud y a hacer que la aplicación haga un cálculo por nosotros. Se realizará un cálculo de área básico. Suponiendo que las entradas que pasemos sean el alto y el ancho de un rectángulo, obtendremos el área. Después, se implementará la aplicación nueva y se verá en acción.
Abra template-with-params.json en el editor integrado mediante la ejecución del comando siguiente en Cloud Shell:
code template-with-params.json
Añada el campo
relativePath
a la sección de entradas del desencadenador de solicitud HTTP, tal como se muestra en el fragmento de código siguiente:"inputs": { "method": "GET", "relativePath": "{width}/{height}", "schema": {} }
La entrada
relativePath
especifica los parámetros que queremos que acepte la dirección URL del punto de conexión HTTP. En este caso, definimos dos parámetros, width (ancho) y height (alto). Se usarán los valores de estos parámetros para calcular un área y devolver el resultado.Actualice el cuerpo de la acción Response con la línea siguiente:
"body": "Response from @{workflow().name} Total area = @{mul( int(triggerOutputs()['relativePathParameters']['height']) , int(triggerOutputs()['relativePathParameters']['width']) )}",
Las respuesta actualizada realiza las tareas siguientes:
Imprime el nombre del recurso de aplicación lógica. La respuesta llama a la función
workflow()
para devolver información sobre el flujo de trabajo. A partir de ese resultado, se hace referencia a la propiedad name.Devuelve el producto de los equivalentes enteros de los valores de cadena height (alto) y width (ancho) de los parámetros de la dirección URL. En esta tarea se usan la función
mul()
y la función de conversiónint()
.
Presione Ctrl + S para guardar todos los cambios en template-with-params.json.
Valide la plantilla después de estos cambios con el comando
az deployment group validate
en Cloud Shell. En este ejemplo, se establece el nombre de la aplicación en CalculateArea mediante un parámetro insertado.az deployment group validate \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --template-file template-with-params.json \ --parameters '{ "logicAppName": {"value":"CalculateArea"}}'
Ejecute el comando siguiente para implementar los cambios en una aplicación lógica denominada CalculateArea. Se omitirá un valor para el parámetro
location
y solo se usará el valor predeterminado.az deployment group create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --template-file template-with-params.json \ --parameters '{ "logicAppName": {"value":"CalculateArea"}}'
La implementación tardará unos segundos, pero puede observar el progreso en la línea de comandos de Cloud Shell. Cuando se complete la implementación, debería ver
provisioningState
en el resultado JSON con el valorSucceeded
.Para ver la aplicación en acción, busque el valor logicAppUrl en el resultado JSON. Seleccione la dirección URL y péguela en una nueva ventana del explorador.
Actualice la dirección URL del explorador, cambiando
/triggers/manual/paths/invoke?api
a/triggers/manual/paths/invoke/{width}/{height}?api
, donde {width} y {height} son los valores enteros para el ancho y el alto del área que queremos calcular. Por ejemplo,/triggers/manual/paths/invoke/6/7?api
. La respuesta de la aplicación mostrará el nombre del flujo de trabajo y el área calculada, tal como se muestra en la captura de pantalla siguiente:Nota:
Asegúrese de reemplazar solo las partes a las que se hace referencia de la dirección URL en el paso anterior. Deje todo el texto en cualquier lado tal cual.
Ejecute el comando siguiente para mostrar todos los flujos de trabajo de Azure Logic Apps implementados hasta ahora:
az resource list \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --resource-type Microsoft.Logic/workflows \ --query [*].[name,location] --output tsv
En este ejercicio, introdujimos más flexibilidad a la plantilla con parámetros. Suministramos esos parámetros en la línea de comandos y con un archivo local. También se ha actualizado la acción que el flujo de trabajo sencillo ejecuta al cambiar directamente el body
de la respuesta que enviamos de vuelta.
Puede descargar los parámetros y los archivos de plantilla desde GitHub con los comandos curl
siguientes en Cloud Shell.
curl https://github.com/MicrosoftDocs/mslearn-logic-apps-and-arm-templates/blob/master/calculate-area/params.json > params-final.json
curl https://github.com/MicrosoftDocs/mslearn-logic-apps-and-arm-templates/blob/master/calculate-area/template.json > template-with-params-final.json