Creación y ejecución de código desde flujos de trabajo en Azure Logic Apps mediante Azure Functions

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

Cuando quiera ejecutar código que realice un trabajo específico en el flujo de trabajo de aplicaciones lógicas, puede crear una función con Azure Functions. Este servicio le ayuda a crear funciones de Node.js, C# y F#, por lo que no tiene que crear una aplicación completa o la infraestructura para ejecutar el código. Azure Functions proporciona informática sin servidor en la nube y es útil para realizar tareas concretas, como las siguientes:

  • Extender el comportamiento de la aplicación lógica con funciones en Node.js o C#.
  • Realizar cálculos en el flujo de trabajo de las aplicaciones lógicas.
  • Aplicar formato avanzado o campos de proceso en los flujos de trabajo de aplicación lógica.

En esta guía paso a paso se muestra cómo llamar a una función de Azure desde un flujo de trabajo de aplicación lógica. Para ejecutar fragmentos de código sin necesidad de usar Azure Functions, consulte Adición y ejecución de código en línea. Para llamar y desencadenar un flujo de trabajo de aplicación lógica desde una función, el flujo de trabajo debe comenzar con un desencadenador que proporcione un punto de conexión al que se pueda llamar. Por ejemplo, puede iniciar el flujo de trabajo con el desencadenador HTTP, Request, Azure Queues o Event Grid. Desde la función, envíe una solicitud HTTP POST a la dirección URL del desencadenador e incluya la carga que quiere que procese ese flujo de trabajo. Para obtener más información, consulte Llamada, desencadenamiento o anidamiento de flujos de trabajo de aplicaciones lógicas.

Limitaciones

  • Puede crear una función directamente desde un flujo de trabajo de aplicación lógica de Consumo, pero no desde un flujo de trabajo de aplicación lógica estándar. Sin embargo, puede crear funciones de otras maneras. Para más información, consulte Creación de funciones desde flujos de trabajo de aplicación lógica.

  • 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 es un contenedor para una función que se puede crear mediante Azure Functions, junto con la función que desee usar.

    Si no tiene una aplicación de función, cree primero la aplicación de función. Después, puede crear la función, ya sea fuera del flujo de trabajo de la aplicación lógica mediante Azure Functions en Azure Portal, o bien desde el flujo de trabajo de la aplicación lógica en el diseñador.

  • Cuando se trabaja con recursos de aplicación lógica, se aplican los mismos requisitos tanto a las funciones como a las aplicaciones de funciones, ya sea existentes o nuevas:

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

    • Las nuevas aplicaciones de función deben usar .NET o JavaScript, como la pila en tiempo de ejecución. Cuando se agrega una nueva función a las aplicaciones de función existentes, puede seleccionar C# o JavaScript.

    • La función usa la plantilla desencadenador HTTP.

      Esta plantilla puede aceptar contenido que tenga el tipo application/json del flujo de trabajo de la 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.

    • La función no usa rutas personalizadas, a menos que haya especificado una definición de OpenAPI (archivo Swagger).

    • Si 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 de la aplicación lógica pueda buscar funciones con definiciones de OpenAPI y acceder a estas, siga los pasos a continuación para configurar la aplicación de funciones.

  • Para seguir el ejemplo de esta guía paso a paso, necesitará un recurso de aplicación lógica de Consumo y un flujo de trabajo que tenga un desencadenador como primer paso. Aunque puede usar cualquier desencadenador para su escenario, en este ejemplo se usa el desencadenador de Office 365 Outlook denominado Cuando llega un nuevo correo electrónico.

Búsqueda de funciones que tengan descripciones de OpenAPI

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 función de manera que la aplicación lógica pueda buscar y usar funciones con 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. Siga estos pasos para configurar el uso compartido de recursos entre orígenes (CORS) en la aplicación de funciones, de manera que se permitan todos los orígenes:

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

      Captura de pantalla que muestra Azure Portal, el menú de recursos de la aplicación de funciones con la opción

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

      Captura de pantalla que muestra Azure Portal, el panel

Acceso a los valor de propiedad de las solicitudes HTTP

Las funciones de Webhook pueden aceptar solicitudes HTTP como entradas y pasarlas a otras funciones. Por ejemplo, aunque Azure Logic Apps tiene funciones que convierten los valores de fecha y hora, este ejemplo básico de función de JavaScript muestra cómo acceder a una propiedad de un objeto de solicitud que se ha pasado a la función y realizar 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 asigna el objeto body dentro del objeto request a esa 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 ahora puede acceder a la propiedad date a través de la variable data y convertir ese valor de propiedad del tipo DateTime al tipo DateString mediante una llamada 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();
    

Ahora que ha creado la función en Azure, siga los pasos para agregar funciones a las aplicaciones lógicas.

Creación de funciones desde flujos de trabajo de aplicaciones lógicas (solo los flujos de trabajo de Consumo)

Puede crear funciones directamente desde el flujo de trabajo de Consumo mediante la acción integrada de Azure Functions en el diseñador de flujos de trabajo, pero solo puede usar este método para funciones escritas en JavaScript. En el caso de otros idiomas, puede crear funciones mediante la experiencia de Azure Functions en Azure Portal. Sin embargo, para poder crear cualquier función en Azure, debe tener un recurso de aplicación de funciones que actúe como contenedor de las funciones. Si no tiene una aplicación de función, cree primero la aplicación de función. Para obtener más información, consulte Creación de su primera función en Azure Portal.

Actualmente, los flujos de trabajo estándar no admiten esta opción para crear una función desde dentro de un flujo de trabajo, pero puede crear la función de las siguientes maneras y, a continuación, llamar a esa función desde el flujo de trabajo de la aplicación lógica estándar mediante la operación de Azure Functions denominada Llamada a una función de Azure.

  1. En el Azure Portal, abra su aplicación lógica de consumo y su flujo de trabajo 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 la lista de aplicaciones de funciones que aparece, seleccione su aplicación de funciones. En la lista de acciones que aparece, seleccione la acción Crear nueva función.

    Captura de pantalla que muestra el selector de operaciones con

  4. En el editor de la definición de función, defínala:

    1. En el cuadro Nombre de la función, proporcione un nombre para la función.

    2. En el cuadro Código, agregue el código a la plantilla, incluida la respuesta y la carga que desea que se devuelva a la aplicación lógica cuando la función termine de ejecutarse. Cuando haya terminado, seleccione Crear, por ejemplo:

    Captura de pantalla que muestra el editor de creación de funciones con la definición de función de plantilla.

    En el código de la plantilla, el objeto context hace referencia al mensaje que envía el flujo de trabajo mediante la propiedad Cuerpo de la solicitud en un paso posterior. 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 dentro del objeto context, use la sintaxis siguiente:

    context.body.content

    El código de plantilla también incluye una variable input, que almacena el valor del parámetro data de modo que la función puede realizar operaciones sobre ese valor. Dentro de las funciones de JavaScript, la variable data es también un acceso directo de context.body.

    Nota

    Aquí, la propiedad body se aplica al objeto context y no es la misma que el token Body de la salida de una acción, que también se podría pasar a la función.

  5. En el cuadro Cuerpo de la solicitud, proporcione la entrada de su función, que debe tener el formato de un objeto de notación de objetos JavaScript (JSON).

    Esta entrada es el objeto de contexto o el mensaje que envía la aplicación lógica a la función. Al hacer clic en el campo Cuerpo de la solicitud, aparece la lista de contenido dinámico, por lo que puede seleccionar tokens para las salidas de los pasos anteriores. En este ejemplo se especifica que la carga de contexto contiene una propiedad denominada content que tiene el valor del token From del desencadenador de correo electrónico.

    Captura de pantalla que muestra la función y la propiedad

    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. Sin embargo, cuando el objeto de contexto no sea un token JSON que pasa una cadena, un objeto JSON o una matriz JSON, recibirá un error. Por tanto, si en este ejemplo se usa en su lugar el token Received Time, puede convertir el objeto de token en una cadena agregando comillas dobles, por ejemplo:

    Captura de pantalla que muestra la propiedad

  6. Para especificar otros detalles, como el método de uso, los encabezados de solicitud, los parámetros de consulta o la autenticación, abra la lista Agregar nuevo parámetro y seleccione las opciones 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.

Adición de funciones existentes a flujos de trabajo de aplicaciones lógicas (flujo de trabajos de Consumo y Estándar)

Para llamar a funciones existentes desde el flujo de trabajo de aplicación lógica, puede agregar funciones 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 la lista de aplicaciones de función, seleccione la que corresponda. En la lista de funciones que aparece, seleccione su función.

    Captura de pantalla de Consumo en la que se muestra una aplicación de funciones y una función seleccionadas.

    Para las funciones con definiciones de API (descripciones de Swagger) y que se configuran de manera que la aplicación lógica pueda buscarlas y acceder a ellas, puede seleccionar Acciones de Swagger.

    Captura de pantalla de Consumo que muestra una aplicación de funciones seleccionada y, a continuación, en

  4. En el cuadro Cuerpo de la solicitud, proporcione la entrada de su función, que debe tener el formato de un objeto de notación de objetos JavaScript (JSON).

    Esta entrada es el objeto de contexto o el mensaje que envía la aplicación lógica a la función. Al hacer clic en el campo Cuerpo de la solicitud, aparece la lista de contenido dinámico, por lo que puede seleccionar tokens para las salidas de los pasos anteriores. En este ejemplo se especifica que la carga de contexto contiene una propiedad denominada content que tiene el valor del token From del desencadenador de correo electrónico.

    Captura de pantalla de Consumo en la que se muestra la función con un ejemplo de

    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. Sin embargo, cuando el objeto de contexto no sea un token JSON que pasa una cadena, un objeto JSON o una matriz JSON, recibirá un error. Por tanto, si en este ejemplo se usa en su lugar el token Received Time, puede convertir el objeto de token en una cadena agregando comillas dobles:

    Captura de pantalla de Consumo que muestra la función con el ejemplo

  5. Para especificar otros detalles, como el método de uso, los encabezados de solicitud, los parámetros de consulta o la autenticación, abra la lista Agregar nuevo parámetro y seleccione las opciones 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 de función (solo flujos de trabajo de Consumo)

El flujo de trabajo de Consumo puede autenticar las llamadas de función y el acceso a recursos protegidos por Microsoft Entra ID mediante identidades administradas (anteriormente conocido como identidad de servicio administrado o MSI). Esta identidad administrada puede autenticar el acceso sin tener que iniciar sesión y proporcionar credenciales ni 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 a la que se llama desde el flujo de trabajo puede usar la misma identidad para la autenticación.

Nota:

Actualmente, solo los flujos de trabajo de Consumo admiten la autenticación de llamadas de función de Azure mediante identidades administradas y la autenticación de Microsoft Entra. Actualmente, los flujos de trabajo estándar no incluyen esta compatibilidad al usar el conector de Azure Functions.

Para más información, revise 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 como anónimo el nivel de autenticación de la función. 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

  3. Una vez que se abra la página Kudu Services (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ú

  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

  5. Abra el archivo function.json para editarlo.

    Captura de pantalla que muestra el archivo

  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

  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 que use la autenticación de Microsoft Entra, es necesario seguir los pasos de esta sección para buscar y guardar los siguientes valores.

  1. Busque el identificador de objeto (entidad de seguridad) de la identidad administrada de la aplicación lógica.
  2. Buscar el id. de inquilino de Microsoft Entra ID.

Búsqueda del identificador de objeto de la identidad administrada de la aplicación lógica

  1. Una vez que la aplicación lógica de Consumo tenga habilitada la identidad administrada, en el menú de la aplicación lógica, en Configuración, seleccione Identidady, luego, seleccione Asignado por el sistema o Asignado por el usuario.

    • Asignado por el sistema

      Para la identidad asignada por el sistema, copie el identificador de objeto de la identidad, por ejemplo:

      Captura de pantalla que muestra el panel

    • Asignado por el usuario

      1. Para la identidad asignada por el usuario, seleccione la identidad para buscar el id. de cliente. Por ejemplo:

        Captura de pantalla que muestra el panel

      2. En el panel Información general de la identidad administrada, busque el id. de cliente de la identidad. Por ejemplo:

        Captura de pantalla que muestra el panel

Buscar el id. de inquilino de Microsoft Entra ID

Para buscar el id. de 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 estos pasos se usa Fabrikam como inquilino de ejemplo.

  2. En el menú del inquilino de Microsoft Entra, en Administrar, seleccione Propiedades.

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

    Captura de pantalla que muestra el panel

Creación de un registro de aplicación para la aplicación de funciones (solo para los flujos de trabajo de Consumo)

Después de encontrar el id. de objeto de la identidad administrada de la aplicación lógica de Consumo y el id. de inquilino para Microsoft Entra ID, configure la aplicación de funciones para usar la autenticación de Microsoft Entra ID mediante la creación de 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 el panel

  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) <object-ID> Identificador único que se va a usar para este registro de aplicación. En este escenario, use el identificador de objeto de la identidad administrada de la aplicación lógica.
    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 <URL-del-punto-de-conexión-de-autenticación>/<ID-de-inquilino-de-Azure-AD>/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.

    En este escenario, use la siguiente dirección URL: https://sts.windows.net/<ID-de-inquilino-de-Azure-AD>
    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 mostrará el proveedor de identidades y el identificador de aplicación (Id. de cliente) para el 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 identificador de la aplicación (Id. de cliente) de la función para usarlo en la propiedad Audiencia más adelante en el flujo de trabajo.

  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