Ejercicio: Creación de un flujo de trabajo mediante Durable Functions
En este ejercicio, usará el escenario de ejemplo de la unidad anterior para aprender a crear un flujo de trabajo de aprobación en Azure Portal mediante Durable Functions.
Creación de una aplicación de funciones
Inicie sesión en el Azure portal con la misma cuenta que usó para activar el sandbox.
En el menú de Azure Portal o en la página Inicio , en Servicios de Azure, seleccione Crear un recurso. Aparece el panel Crear un recurso .
Busque y seleccione Function App. Seleccione Consumo y, a continuación, seleccione el botón Seleccionar . Aparece el panel Crear aplicación de funciones .
En la pestaña Aspectos básicos , escriba los valores siguientes para cada configuración.
Configuración Importancia Descripción Detalles del proyecto Suscripción Suscripción de Concierge Especifica la suscripción en la que se va a crear esta aplicación de funciones. Grupo de recursos En la lista desplegable, seleccione [nombre del grupo de recursos del espacio aislado] Especifica el nombre del grupo de recursos en el que se va a crear la aplicación de funciones. Creamos la aplicación de funciones en el grupo de recursos de espacio aislado que se asignó al activar el espacio aislado, es decir, [nombre del grupo de recursos del espacio aislado] .Detalles de la instancia Nombre de aplicación de funciones [Nombre único global] Especifica el nombre que identifica la nueva aplicación de funciones. Los caracteres válidos son a-z
,0-9
y-
.Publicar Código Especifica que la función usa código en lugar de un contenedor. Pila en tiempo de ejecución Node.js Especifica que el código de ejemplo de este módulo está escrito en JavaScript. Versión 20 LTS Especifica la versión del entorno de ejecución. Región [Seleccione en la lista que sigue a esta sección] Elija la región más cercana que también es una de las Sandbox regiones permitidas siguientes. Sistema operativo Sistema operativo Windows Especifica el sistema operativo que hospeda la aplicación de funciones. Planeamiento El espacio aislado gratuito permite crear recursos en un subconjunto de las regiones globales de Azure. Seleccione una región de la lista siguiente al crear los recursos:
- Oeste de EE. UU. 2
- Centro-sur de EE. UU.
- Centro de EE. UU.
- Este de EE. UU.
- Oeste de Europa
- Sudeste Asiático
- Japón Oriental
- Sur de Brasil
- Sudeste de Australia
- Centro de la India
Seleccione Siguiente: Almacenamiento.
En la pestaña Almacenamiento , escriba los valores siguientes para cada configuración.
Configuración Importancia Descripción Almacenamiento Cuenta de almacenamiento [Nombre único global] Especifica el nombre de la nueva cuenta de almacenamiento usada por la aplicación de funciones (que no necesita coincidir con el nombre único global que especificó para la función). Los nombres de las cuentas de almacenamiento deben tener entre 3 y 24 caracteres y solo pueden incluir números y letras en minúscula. Este cuadro de diálogo rellena automáticamente el campo con un nombre único que se genera dinámicamente. Sin embargo, no dude en usar un nombre diferente o incluso una cuenta existente. Seleccione Siguiente: Redes. Acepte los valores predeterminados.
Seleccione Siguiente: Supervisión.
En la pestaña Supervisión , escriba el siguiente valor para la configuración.
Configuración Importancia Descripción Application Insights Habilitación de Application Insights No Especifica que Application Insights está deshabilitado para este módulo. Seleccione Revisar y crear y revise las opciones que configuró. Si está satisfecho con las opciones, seleccione Crear para aprovisionar e implementar la aplicación de funciones.
Antes de continuar, espere a que se complete la implementación. La implementación puede tardar unos minutos.
Instalación del paquete npm durable-functions
Como se va a crear una instancia de Durable Functions de JavaScript, es necesario instalar el paquete npm durable-functions
. Para ello, realice los pasos siguientes.
Seleccione Ir al recurso para seleccionar la aplicación de funciones. Aparece el panel Aplicación de funciones.
En el panel de menús izquierdo, en Herramientas de desarrollo, seleccione Editor de App Service (versión preliminar) y, a continuación, seleccione Abrir editor. El panel Inicio rápido del Editor de App Service aparece en una nueva ventana del explorador.
En el panel de menús izquierdo, resalte la carpeta WWWROOT .
En el menú de la barra de herramientas de la izquierda, seleccione el icono Abrir consola .
Esta acción inicia la consola. Puede usar esta consola para acceder al servidor web que hospeda las funciones y escribir el código de las funciones.
Cree un nuevo archivo package.json .
Ejecute los siguientes comandos en la consola para crear el nuevo archivo JSON y abrirlo en el editor.
touch package.json open package.json
Agregue el código siguiente:
{ "name": "example", "version": "1.0.0" }
Reemplace por
example
el nombre del paquete. Por ejemplo, se puede usar el nombre único global que se especificó para la función anteriormente.
Seleccione Ctrl+S para guardar el archivo y, a continuación, Ctrl+Q para cerrar el documento.
Vuelva a Azure Portal.
En la barra de menús de la izquierda, en Herramientas de desarrollo, seleccione Consola. Aparece el panel Consola de la aplicación de funciones.
Ejecute el siguiente comando:
npm install durable-functions
Este comando indica al administrador de paquetes de nodo que instale el
durable-functions
paquete y las dependencias necesarias. La instalación puede tardar unos minutos en completarse y el administrador de paquetes de nodos puede mostrar algunas advertencias, lo que puede omitir.Nota:
Si se le pide que instale una versión más reciente de npm, use el comando proporcionado en el error para instalar la versión más reciente y, a continuación, instale el
durable-functions
paquete una vez instalada la nueva versión.Espere hasta que todos los paquetes terminen de instalarse.
En el panel de menús izquierdo, desplácese hacia arriba y seleccione Información general y, en la barra de menús superior, seleccione Reiniciar y, a continuación, seleccione Sí cuando se le pida que se reinicie.
Antes de continuar, espere a que se complete el reinicio.
Creación de la función cliente para enviar una propuesta de diseño
En el menú de Azure Portal o en la página Inicio , en Recursos recientes, seleccione Ver todo y, a continuación, seleccione la aplicación de funciones. Aparece el panel Aplicación de funciones.
En la página Información general, seleccione la pestaña Funciones en el centro de la pantalla.
Seleccione el botón Crear en Azure Portal . Aparece el panel Crear función .
En Seleccionar una plantilla, vaya al cuadro Filtrar, especifique Inicio HTTP de Durable Functions y seleccione esa plantilla de la lista. Esta plantilla crea una función duradera que se ejecuta en respuesta a una solicitud HTTP.
En Detalles de plantilla, en el campo Nueva función , escriba HttpStart como nombre de la función y, en el campo Nivel de autorización , seleccione Función y, a continuación, seleccione Crear. Aparece el panel HttpStart para tu función.
En el panel de menús izquierdo, en Desarrollador, seleccione Código y prueba. Aparece el panel Código y prueba para la función.
El código del archivo index.js aparece en el editor. El archivo debería ser similar al ejemplo siguiente:
const df = require("durable-functions"); module.exports = async function (context, req) { const client = df.getClient(context); const instanceId = await client.startNew(req.params.functionName, undefined, req.body); context.log(`Started orchestration with ID = '${instanceId}'.`); return client.createCheckStatusResponse(context.bindingData.req, instanceId); };
En la lista desplegable de los archivos de la función, seleccione function.json para ver los enlaces asociados a la nueva función. Esta información especifica los requisitos de autenticación, junto con los métodos HTTP que pueden desencadenar la función. Este archivo también especifica que la función es un cliente que inicia el proceso de orquestación. El archivo debería ser similar al ejemplo siguiente:
{ "bindings": [ { "authLevel": "function", "name": "req", "type": "httpTrigger", "direction": "in", "route": "orchestrators/{functionName}", "methods": [ "post", "get" ] }, { "name": "$return", "type": "http", "direction": "out" }, { "name": "starter", "type": "orchestrationClient", "direction": "in" } ] }
Nota:
Un enlace asocia los recursos y demás elementos con un desencadenador. Es un mecanismo declarativo que elimina la necesidad de codificar de forma rígida las referencias a otros servicios y funciones del código.
Creación de la función de orquestador
En el menú de Azure Portal o en la página Inicio , en Recursos recientes, seleccione Ver todo y, a continuación, seleccione la aplicación de funciones. Aparece el panel Aplicación de funciones.
En la página Información general , seleccione la pestaña Funciones en el centro de la pantalla.
En la barra de menús Funciones , seleccione Crear. Aparece el panel Crear función .
En Seleccionar una plantilla, en el cuadro Filtro, introduzca Orquestador de Durable Functions y seleccione esa plantilla en la lista. Esta plantilla crea una función duradera que organiza la ejecución de funciones.
En Detalles de la plantilla, en el campo Nueva función , escriba OrchFunction como nombre de la función y, a continuación, seleccione Crear. Aparece el panel de funciones de OrchFunction.
En el panel de menús izquierdo, en Desarrollador, seleccione Código y prueba. Aparece el panel Código y prueba para la función.
El código del archivo index.js aparece en el editor.
Reemplace el código existente por el código siguiente.
const df = require("durable-functions"); module.exports = df.orchestrator(function* (context) { const outputs = []; /* * We will call the approval activity with a reject and an approved to simulate both */ outputs.push(yield context.df.callActivity("Approval", "Approved")); outputs.push(yield context.df.callActivity("Approval", "Rejected")); return outputs; });
Este código llama a una función activity denominada Approval, que se crea en breve. El código de la función de orquestador invoca la función Approval dos veces. La primera vez simula aceptar la propuesta y la segunda vez prueba la lógica de rechazo de la propuesta.
El valor que devuelve cada llamada se combina y se devuelve a la función cliente. En un entorno de producción, la función de orquestación llamaría a una serie de funciones de actividad que toman la decisión de aceptar o rechazar para, después, devolver el resultado de estas actividades.
En la barra de menús superior, seleccione Guardar para guardar la nueva función.
Creación de la función de actividad
En el menú de Azure Portal o en la página Inicio , en Recursos recientes, seleccione Ver todo y, a continuación, seleccione la aplicación de funciones. Aparece el panel Aplicación de funciones.
En la página Información general , seleccione la pestaña Funciones en el centro de la pantalla.
En la barra de menús Funciones , seleccione Crear. Aparece el panel Crear función .
En Seleccionar una plantilla, vaya al cuadro Filtrar, especifique Actividad de Durable Functions y seleccione esa plantilla de la lista. Esta plantilla crea una función duradera que se ejecuta cuando una función de orquestador llama a una actividad.
En Detalles de plantilla, en el campo Nueva función , escriba Aprobación para el nombre de la función y, a continuación, seleccione Crear. Aparece el panel Aprobación para la aplicación de funciones.
En el panel de menús izquierdo, en Desarrollador, seleccione Código y prueba. Aparece el panel Código y prueba para la función.
El código del archivo index.js aparece en el editor.
Reemplace el código existente por el código siguiente.
module.exports = async function (context) { return `Your project design proposal has been - ${context.bindings.name}!`; };
Esta función devuelve un mensaje que indica el estado de la propuesta. La expresión
context.bindings.name
esAccepted
oRejected
, según el parámetro pasado a la función desde el orquestador. En un escenario real, agregaría la lógica que controla las operaciones de aceptación o rechazo en esta función.En la barra de menús superior, seleccione Guardar para guardar la nueva función.
Comprobación del inicio del flujo de trabajo de Durable Functions
En el menú de Azure Portal o en la página Inicio , en Recursos recientes, seleccione Ver todo y, a continuación, seleccione la aplicación de funciones. Aparece el panel Aplicación de funciones.
Seleccione la pestaña Funciones en el centro de la página.
Seleccione la función HttpStart . Aparece el panel HttpStart para su función.
En la barra de menús superior, seleccione Obtener dirección URL de función y copie la dirección URL. La dirección URL debería ser similar al ejemplo siguiente:
https://example.azurewebsites.net/api/orchestrators/{functionName}?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
Use esta dirección URL para ejecutar las funciones.
Abra una nueva ventana del explorador y vaya a la dirección URL que copió. En la dirección URL, reemplace el marcador de posición {functionName} por OrchFunction, que debería ser similar al ejemplo siguiente:
https://example.azurewebsites.net/api/orchestrators/OrchFunction?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
El mensaje de respuesta contiene un conjunto de puntos de conexión URI que puede usar para supervisar y administrar la ejecución, que debería ser similar al ejemplo siguiente:
{ "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "statusQueryGetUri": "https://example.azurewebsites.net/...", "sendEventPostUri": "https://example.azurewebsites.net/...", "terminatePostUri": "https://example.azurewebsites.net/...", "rewindPostUri": "https://example.azurewebsites.net/...", "purgeHistoryDeleteUri": "https://example.azurewebsites.net/..." }
Copie el valor statusQueryGetUri y use el explorador web para ir a esta dirección URL. Debería ver un mensaje de respuesta similar al ejemplo siguiente:
{ "name": "OrchFunction", "instanceId": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "runtimeStatus": "Completed", "input": null, "customStatus": null, "output": [ "Your project design proposal has been - Approved!", "Your project design proposal has been - Rejected!" ], "createdTime": "2019-04-16T15:23:03Z", "lastUpdatedTime": "2019-04-16T15:23:35Z" }
Recuerde que la función de orquestación ejecuta dos veces la función de actividad. La primera vez, la función de actividad indica que se acepta la propuesta del proyecto. La segunda vez, se rechaza la propuesta. La función de orquestación combina los mensajes de ambas llamadas de función y los devuelve a la función cliente.