Llamada a Azure Functions desde flujos de trabajo en Azure Logic Apps

Se aplica a: Azure Logic Apps (consumo + estándar)

Para ejecutar código que realice un trabajo específico en el flujo de trabajo de la aplicación lógica, no es necesario compilar una aplicación o infraestructura completa. En su lugar, puede crear y llamar a una función de Azure. Azure Functions proporciona informática sin servidor en la nube y la capacidad de realizar las siguientes tareas:

  • Amplíe el comportamiento del flujo de trabajo mediante la ejecución de funciones creadas mediante Node.js o C#.
  • Realice cálculos en el flujo de trabajo.
  • Aplique campos de proceso o formato avanzados en el flujo de trabajo.

En esta guía paso a paso se muestra cómo llamar a una función de Azure existente desde el flujo de trabajo Consumo o Estándar. Para ejecutar código sin usar Azure Functions, consulte la siguiente documentación:

Limitaciones

  • Solo los flujos de trabajo de Consumo admiten la autenticación de llamadas de función de Azure mediante identidades administradas con la autenticación de Microsoft Entra. Los flujos de trabajo estándar no se admiten actualmente en la sección sobre cómo habilitar la autenticación para las llamadas de función.

  • Azure Logic Apps no admite el uso de Azure Functions con ranuras de implementación habilitadas. Aunque en ocasiones este escenario puede funcionar, este comportamiento es impredecible y podría dar lugar a problemas de autorización cuando el flujo de trabajo intenta llamar a la función de Azure.

Requisitos previos

  • Una cuenta y una suscripción de Azure. Si aún no tiene una suscripción, regístrese para obtener una cuenta de Azure gratuita.

  • Un recurso de aplicación de funciones de Azure, que contiene una o varias funciones de Azure.

    • El recurso de la aplicación de funciones y el recurso de aplicación lógica deben usar la misma suscripción de Azure.

    • El recurso de aplicación de funciones debe utilizar .NET o Node.js como pila de tiempo de ejecución.

    • Al agregar una nueva función a su aplicación de funciones, puede seleccionar C# o JavaScript.

  • Función de Azure a la que desea llamar. Puede crear esta función mediante las siguientes herramientas:

    • Azure Portal

    • Visual Studio

    • Visual Studio Code

    • CLI de Azure

    • Azure PowerShell

    • Plantilla ARM

    • La función debe usar la plantilla de desencadenador HTTP.

      La plantilla Desencadenador HTTP puede aceptar contenido de tipo application/json de su flujo de trabajo de aplicación lógica. Cuando se agrega una función al flujo de trabajo, el diseñador muestra las funciones personalizadas creadas a partir de esta plantilla dentro de la suscripción de Azure.

    • El código de función debe incluir la respuesta y la carga que desea devolver al flujo de trabajo una vez completada la función. El objeto context hace referencia al mensaje que envía el flujo de trabajo a través del parámetro de acción de Azure Functions denominado cuerpo de solicitud más adelante en esta guía.

      En esta guía se usa la siguiente función de ejemplo, denominada FabrikamAzureFunction:

      module.exports = function (context, data) {
      
         var input = data;
      
         // Function processing logic
         // Function response for later use
         context.res = {
            body: {
              content:"Thank you for your feedback: " + input
            }
         };
         context.done();
      }
      

      Para acceder a las propiedades del objeto context desde dentro de la función, use la sintaxis siguiente:

      context.body.<property-name>

      Por ejemplo, para hacer referencia a la propiedad content del objeto context, use la sintaxis siguiente:

      context.body.content

      Este código también incluye una variable input, que almacena el valor del parámetro data para que la función pueda realizar operaciones en ese valor. En las funciones de JavaScript, la variable data también es un acceso directo para context.body.

      Nota:

      La propiedad body aquí se aplica al objeto context y no es la misma que el token Cuerpo en la salida de una acción, que también puede pasar a la función.

    • La función no puede usar rutas personalizadas a menos que haya definido un definición de OpenAPI (archivo Swagger).

      Cuando tiene una definición de OpenAPI para la función, el diseñador de flujos de trabajo le ofrece una experiencia más completa al trabajar con parámetros de función. Para que el flujo de trabajo pueda encontrar y acceder a las funciones que tienen definiciones de OpenAPI, configure la aplicación de funciones siguiendo estos pasos.

  • Flujo de trabajo consumo o aplicación lógica estándar que comienza con cualquier desencadenador.

    En los ejemplos de esta guía se usa el desencadenador de Office 365 Outlook denominado Cuando llega un nuevo correo electrónico.

  • Para crear y llamar a una función de Azure que llama a otro flujo de trabajo, asegúrese de que el flujo de trabajo secundario comienza con un desencadenador que proporciona un punto de conexión al que se puede llamar.

    Por ejemplo, puede iniciar el flujo de trabajo con el activador general HTTP o Solicitud, o puede utilizar un desencadenador basado en un servicio, como Azure Queues o Event Grid. Dentro de la función, envíe una solicitud HTTP POST a la dirección URL del desencadenador e incluya la carga que desea que procese el flujo de trabajo secundario. Para obtener más información, consulte Flujos de trabajo de llamada, desencadenador o anidamiento de aplicaciones lógicas.

Sugerencias para trabajar con Azure Functions

Generación de una definición de OpenAPI o un archivo Swagger para la función

Para obtener una experiencia más completa al trabajar con parámetros de función en el diseñador de flujos de trabajo, genere una definición de OpenAPIo archivo Swagger, para la función. Para configurar la aplicación de funciones para que el flujo de trabajo pueda encontrar y usar funciones que tengan descripciones de Swagger, siga estos pasos:

  1. En Azure Portal, abra la aplicación de funciones. Asegúrese de que la aplicación de funciones se esté ejecutando.

  2. En la aplicación de función, siga estos pasos para configurar el uso compartido de recursos entre orígenes (CORS) de manera que se permitan todos los orígenes:

    1. En el menú de la aplicación de funciones, en API, seleccione CORS.

    2. En Orígenes permitidos, agregue el carácter comodín asterisco (*) , pero quite todos los demás orígenes de la lista y seleccione Guardar.

      Captura de pantalla que muestra Azure Portal, el panel CORS y el carácter comodín * especificados en Orígenes permitidos.

Acceso a los valor de propiedad de las solicitudes HTTP

Las funciones basadas en Webhook pueden aceptar solicitudes HTTP como entradas y pasar esas solicitudes a otras funciones. Por ejemplo, aunque Azure Logic Apps tiene funciones que convierten valores DateTime, esta función básica de JavaScript de ejemplo muestra cómo puede acceder a una propiedad dentro de un objeto de solicitud HTTP que se pasa a la función y realiza operaciones en ese valor de propiedad. Para acceder a las propiedades dentro de los objetos, en este ejemplo se usa el operador punto (.):

function convertToDateString(request, response){
   var data = request.body;
   response = {
      body: data.date.ToDateString();
   }
}

Esto es lo que ocurre dentro de esta función:

  1. La función crea una variable data y, a continuación, asigna el objeto body, que está dentro del objeto request, a la variable. La función utiliza el operador punto (.) para hacer referencia al objeto body dentro del objeto request:

    var data = request.body;
    
  2. La función puede ahora acceder a la propiedad date a través de la variable data, y convertir el valor de la propiedad de tipo DateTime a tipo DateString llamando a la función ToDateString(). La función también devuelve el resultado a través de la propiedad body en la respuesta de la función:

    body: data.date.ToDateString();
    

Después de crear la función en Azure, siga los pasos para agregar una función de Azure al flujo de trabajo.

Agregar una función al flujo de trabajo (Consumo + flujos de trabajo estándar)

Para llamar a una función de Azure desde el flujo de trabajo, puede agregar esa función como cualquier otra acción en el diseñador.

  1. En Azure Portal, abra el flujo de trabajo de la aplicación lógica de consumo en el diseñador.

  2. En el diseñador, siga estos pasos generales para agregar la acción Azure Functions denominada Elegir una función de Azure.

  3. En el panel Crear conexión, siga estos pasos:

    1. Proporcione un nombre de conexión para la conexión a la aplicación de funciones.

    2. En la lista de aplicaciones de función, seleccione la que corresponda.

    3. En la lista de funciones, seleccione la función y, a continuación, seleccione Agregar acción, por ejemplo:

      Captura de pantalla que muestra el flujo de trabajo consumo con una aplicación de funciones y una función seleccionadas.

  4. En el cuadro de acción de la función seleccionada, siga estos pasos:

    1. Para cuerpo de solicitud, proporcione la entrada de la función, que debe tener el formato de un objeto Notación de objetos JavaScript (JSON). Esta entrada es el objeto de contexto carga útil o mensaje que su flujo de trabajo envía a su función.

      • Para seleccionar tokens que representan las salidas de los pasos anteriores, seleccione dentro del cuadro cuerpo de la solicitud y, a continuación, seleccione la opción para abrir la lista de contenido dinámico (icono de rayo).

      • Para crear una expresión, seleccione dentro del cuadro Cuerpo de solicitud y, a continuación, seleccione la opción para abrir el editor de expresiones (icono de fórmula).

      El siguiente ejemplo especifica un objeto JSON con el atributo content y un token que representa la salida From del activador de correo electrónico como valor Cuerpo de la solicitud:

      Captura de pantalla que muestra el flujo de trabajo consumo y una función con un ejemplo de cuerpo de solicitud para la carga del objeto de contexto.

      Aquí, el objeto de contexto no se convierte en cadena, por lo que el contenido del objeto se agrega directamente a la carga de JSON. A continuación se incluye el ejemplo completo:

      Captura de pantalla que muestra el flujo de trabajo consumo y una función con un ejemplo completo del cuerpo de solicitud para la carga del objeto de contexto.

      Si proporciona un objeto de contexto distinto de un token JSON que pasa una cadena, un objeto JSON o una matriz JSON, obtendrá un error. Sin embargo, puede convertir el objeto de contexto como una cadena mediante la inclusión del token entre comillas (""), por ejemplo, si desea usar el token de hora recibida:

      Captura de pantalla que muestra el flujo de trabajo consumo y un ejemplo de cuerpo de solicitud que convierte el objeto de contexto como una cadena.

    2. Para especificar otros detalles, como el método que se va a usar, los encabezados de solicitud, los parámetros de consulta o la autenticación, abra la lista parámetros avanzados y seleccione los parámetros que desee. Para la autenticación, las opciones varían según la función seleccionada. Para obtener más información, consulte Habilitación de la autenticación para funciones.

Habilitación de la autenticación para llamadas a funciones de Azure (solo flujos de trabajo de consumo)

El flujo de trabajo consumo puede usar una identidad administrada para autenticar una llamada de función de Azure y acceder a los recursos protegidos por el identificador de Microsoft Entra. La identidad administrada puede autenticar el acceso sin tener que iniciar sesión y proporcionar credenciales o secretos. Azure administra esta identidad y le ayuda a proteger las credenciales porque, de esta forma, no tiene que proporcionar secretos o cambiarlos. Puede configurar la identidad asignada por el sistema o una identidad asignada por el usuario creada manualmente en el nivel de recurso de la aplicación lógica. La función de Azure a la que se llama desde el flujo de trabajo puede usar la misma identidad administrada para la autenticación.

Nota:

Solo los flujos de trabajo de consumo admiten la autenticación para una llamada de función de Azure mediante una identidad administrada y la autenticación de Microsoft Entra. Actualmente, los flujos de trabajo estándar no incluyen esta compatibilidad cuando se usa la acción para llamar a una función de Azure.

Para más información, consulte la siguiente documentación:

Para configurar la aplicación de funciones y la función para que puedan usar la identidad administrada de la aplicación lógica de Consumo, siga estos pasos generales:

  1. Habilite y configure la identidad administrada de la aplicación lógica.

  2. Configure la autenticación anónima en la función.

  3. Búsqueda de los valores necesarios para configurar la autenticación de Microsoft Entra.

  4. Cree un registro de aplicación para la aplicación de funciones.

Configuración de la función para la autenticación anónima (solo para los flujos de trabajo de Consumo)

Para que la función use la identidad administrada de la aplicación lógica de consumo, debe establecer el nivel de autenticación de la función en anonymous. De lo contrario, el flujo de trabajo produce un error BadRequest.

  1. En Azure Portal, busque y seleccione la aplicación lógica.

    En los pasos siguientes se usa una aplicación de funciones de ejemplo denominada FabrikamFunctionApp.

  2. En el menú de recursos de la aplicación de funciones, en Herramientas de desarrollo, seleccione Herramientas avanzadas>Ir.

    Captura de pantalla que muestra el menú de la aplicación de funciones con las opciones seleccionadas para Herramientas avanzadas y Go.

  3. Una vez que se abra la página Kudu Plus (Servicios de Kudu), en la barra de título del sitio web de Kudu, en el menú Debug Console (Consola de depuración), seleccione CMD.

    Captura de pantalla que muestra la página Servicios de Kudu con el menú Consola de depuración abierto y la opción seleccionada denominada CMD.

  4. Después de que aparezca la siguiente página, en la lista de carpetas, seleccione site>wwwroot>su-función.

    En los pasos siguientes se usa una función de ejemplo denominada FabrikamAzureFunction.

    Captura de pantalla que muestra la lista de carpetas con las carpetas abiertas para el sitio, wwwroot y la función.

  5. Abra el archivo function.json para editarlo.

    Captura de pantalla que muestra el archivo function.json con el comando de edición seleccionado.

  6. En el objeto bindings, compruebe si existe la propiedad authLevel. Si la propiedad existe, establezca el valor de la propiedad en anonymous. De lo contrario, agregue esa propiedad y establezca el valor.

    Captura de pantalla que muestra el objeto bindings con la propiedad authLevel establecida en anónimo.

  7. Cuando haya terminado, guarde la configuración. Continúe con la sección siguiente.

Búsqueda de los valores necesarios para configurar la autenticación de Microsoft Entra (solo para los flujos de trabajo de Consumo)

Para poder configurar la aplicación de funciones para usar la identidad administrada y la autenticación de Microsoft Entra, debe buscar y guardar los siguientes valores siguiendo los pasos de esta sección.

  1. Busque el identificador de inquilino de su inquilino de Microsoft Entra.

  2. Busque el identificador de objeto de la identidad administrada.

  3. Busque el identificador de aplicación de la aplicación Enterprise asociada a la identidad administrada.

Búsqueda del identificador de inquilino para el inquilino de Microsoft Entra

Ejecute el comando de PowerShell denominado Get-AzureAccount o en Azure Portal, siga estos pasos:

  1. En Azure Portal, abra el inquilino de Microsoft Entra.

    En esta guía se usa fabrikam como inquilino de ejemplo.

  2. En el menú del inquilino, seleccione Información general.

  3. Copie y guarde el identificador de inquilino para usarlo más adelante, por ejemplo:

    Captura de pantalla que muestra la página Propiedades de Microsoft Entra ID con el botón copiar del identificador de inquilino seleccionado.

Busque el identificador de objeto de la identidad administrada

Después de habilitar la identidad administrada para el recurso de aplicación lógica consumo, busque el objeto de la identidad administrada. Usará este identificador para buscar la aplicación Enterprise asociada en el inquilino de Entra.

  1. En el menú de la aplicación lógica, en Configuración, seleccione Identidad y, a continuación, seleccione Asignado por el sistema o Asignado por el usuario.

    • Asignado por el sistema

      Copie el Id. de objeto (entidad de seguridad) de la identidad:

      Captura de pantalla que muestra la página Identidad de la aplicación lógica de consumo con la pestaña seleccionada denominada Sistema asignado.

    • Asignado por el usuario

      1. Seleccione la identidad:

        Captura de pantalla que muestra la página Identidad de la aplicación lógica de consumo con la pestaña seleccionada denominada Usuario asignado.

      2. Copie el Id. de objeto (entidad de seguridad) de la identidad:

        Captura de pantalla que muestra la página Información general de identidad asignada por el usuario de la aplicación lógica de consumo con el identificador de objeto (entidad de seguridad) seleccionado.

Busque el identificador de aplicación de la aplicación Azure Enterprise asociada a la identidad administrada

Al habilitar una identidad administrada en el recurso de aplicación lógica, Azure crea automáticamente una aplicación de Azure Enterprise asociada que tiene el mismo nombre. Ahora debe encontrar la aplicación Enterprise asociada y copiar su Id. de aplicación. Más adelante, usará este identificador de aplicación para agregar un proveedor de identidades para la aplicación de funciones mediante la creación de un registro de aplicación.

  1. En el Azure Portal, busque y abra el inquilino de Entra.

  2. En el menú inquilino, en Administrar, seleccione Aplicaciones empresariales.

  3. En la página Todas las aplicaciones, en el cuadro de búsqueda, escriba el identificador de objeto de la identidad administrada. En los resultados, busque la aplicación empresarial que coincida y copie el Id. de la aplicación:

    Captura de pantalla que muestra la página de inquilino entra denominada Todas las aplicaciones, con el identificador de objeto de aplicación empresarial en el cuadro de búsqueda y el identificador de aplicación coincidente seleccionado.

  4. Ahora, use el identificador de aplicación copiado para agregar un proveedor de identidades a la aplicación de funciones.

Agregar proveedor de identidades para la aplicación de funciones (solo flujos de trabajo de consumo)

Ahora que tiene el identificador de inquilino y el identificador de aplicación, puede configurar la aplicación de funciones para usar la autenticación de Microsoft Entra agregando un proveedor de identidades y creando un registro de aplicaciones.

  1. En Azure Portal, abra la aplicación de funciones.

  2. En el menú de la aplicación de funciones, en Configuración, seleccione Autenticación y, luego, seleccione Agregar proveedor de identidades.

    Captura de pantalla que muestra el menú de la aplicación de funciones con la página Autenticación y la opción seleccionada denominada Agregar proveedor de identidades.

  3. En el panel Agregar un proveedor de identidades, en Aspectos básicos, en la lista Proveedor de identidades, seleccione Microsoft.

  4. En Registro de aplicaciones, en App registration type (Tipo de registro de aplicaciones), seleccione Provide the details of an existing app registration (Proporcionar los detalles de un registro de aplicación existente) y escriba los valores que guardó anteriormente.

    Propiedad Necesario Valor Descripción
    Id. de la aplicación (cliente) <id. de aplicación> Identificador único que se va a usar para este registro de aplicación. En este ejemplo, use el identificador de aplicación que copió para la aplicación Enterprise asociada a la identidad administrada.
    Secreto de cliente Opcional, pero recomendable <secreto-de-cliente> Valor del secreto que la aplicación usa para demostrar su identidad al solicitar un token. El secreto de cliente se crea y almacena en la configuración de la aplicación como configuración de aplicación fija a la ranura, denominada MICROSOFT_PROVIDER_AUTHENTICATION_SECRET. Si en su lugar quiere administrar el secreto en Azure Key Vault, puede actualizar esa configuración más adelante para usar referencias de Key Vault.

    - Si proporciona un valor de secreto de cliente, las operaciones de inicio de sesión usan el flujo híbrido y devuelven tanto tokens de acceso como de actualización.

    - Si no proporciona un secreto de cliente, las operaciones de inicio de sesión usan el flujo de concesión implícita de OAuth 2.0 y devuelven solo un token de identificador.

    Estos tokens los envía el proveedor y se almacenan en el almacén de tokens de EasyAuth.
    Dirección URL del emisor No <authentication-endpoint-URL>/<Entra-tenant-ID>/v2.0 Esta dirección URL redirige a los usuarios al inquilino de Microsoft Entra correcto y descarga los metadatos adecuados para determinar las claves de firma de tokens y el valor de notificación del emisor del token correspondientes. Para las aplicaciones que usan Azure AD v1, omita /v2.0 en la dirección URL.

    Para este escenario, use la siguiente dirección URL: https://sts.windows.net/<Entra-tenant-ID>
    Audiencias de token permitidas No <URI-de-ID-de-aplicación> URI del identificador de aplicación (id. de recurso) de la aplicación de funciones. Para una aplicación en la nube o una aplicación de servidor, donde quiere permitir tokens de autenticación desde una aplicación web, agregue el URI del identificador de la aplicación para la aplicación web. De forma implícita, el identificador de cliente se considera siempre como público permitido.

    En este escenario, el valor es https://management.azure.com. Más adelante, puede usar el mismo URI en la propiedad Audiencia al configurar la acción de función en el flujo de trabajo para usar la identidad administrada.

    Importante: el URI del id. de aplicación (Id. de recurso) debe coincidir exactamente con el valor que espere Microsoft Entra ID, incluyendo las barras diagonales finales necesarias.

    En este punto, su versión tiene un aspecto similar al de este ejemplo:

    Captura de pantalla que muestra el registro de aplicaciones para la aplicación lógica y el proveedor de identidades de la aplicación de funciones.

    Si va a configurar la aplicación de funciones con un proveedor de identidades por primera vez, también aparece la sección de configuración de la autenticación de App Service. Estas opciones determinan cómo responde la aplicación de funciones a las solicitudes no autenticadas. La selección predeterminada redirige todas las solicitudes para iniciar sesión con el nuevo proveedor de identidades. Puede personalizar este comportamiento ahora o ajustar esta configuración más adelante desde la pantalla principal Autenticación; para ello, seleccione Editar junto a Configuración de la autenticación. Para más información sobre estas opciones, consulte Flujo de autenticación: autenticación y autorización en Azure App Service y Azure Functions.

    De lo contrario, puede continuar con el paso siguiente.

  5. Para terminar de crear el registro de la aplicación, seleccione Agregar.

    Cuando haya terminado, la página Autenticación ahora muestra el proveedor de identidades y el identificador de aplicación (cliente) del registro de la aplicación. La aplicación de funciones ahora puede usar este registro de aplicación para la autenticación.

  6. Copie el Id. de la aplicación (cliente) del registro de la aplicación para utilizarlo posteriormente en la propiedad Audiencia de la acción de Azure Functions para su flujo de trabajo.

    Captura de pantalla que muestra el nuevo proveedor de identidades para la aplicación de funciones.

  7. Vuelva al diseñador y siga los pasos para autenticar el acceso con la identidad administrada mediante la acción de Azure Functions integrada.

Pasos siguientes