Conectores personalizados en Azure Logic Apps

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

Sin necesidad de escribir ningún código, puede crear rápidamente flujos de trabajo de integración automatizados cuando usa las operaciones de conectores predefinidos en Azure Logic Apps. Un conector ayuda a los flujos de trabajo a conectar y acceder a datos, eventos y acciones en otras aplicaciones, servicios, sistemas, protocolos y plataformas. Cada conector ofrece operaciones como desencadenantes, acciones o ambas que puede agregar a sus flujos de trabajo. Al usar estas operaciones, se amplían las capacidades de sus aplicaciones en la nube y local para trabajar con datos nuevos y existentes.

Los conectores en Azure Logic Apps se incorporan o se administran. Un conector integrado se ejecuta de forma nativa en el tiempo de ejecución de Azure Logic Apps, lo que significa que se aloja en el mismo proceso que el tiempo de ejecución y proporciona un mayor rendimiento, baja latencia y conectividad local. Un conector administrado es un proxy o una envoltura alrededor de una API, como Office 365 o Salesforce, que ayuda al servicio subyacente a comunicarse con Azure Logic Apps. Los conectores administrados se basan en la infraestructura de conectores de Azure y se implementan, alojan, ejecutan y administran por Microsoft. Puede elegir entre cientos de conectores administrados para usarlos con sus flujos de trabajo en Azure Logic Apps.

Cuando se usa una operación de conector por primera vez en un flujo de trabajo, algunos conectores no requieren que se cree una conexión primero, pero muchos otros conectores requieren este paso. Cada conexión que se crea es en realidad un recurso de Azure independiente que proporciona acceso a la aplicación, servicio, sistema, protocolo o plataforma de destino.

Sin embargo, a veces puede querer llamar a las API de REST que no están disponibles como conectores preconstruidos. Para dar asistencia a escenarios más personalizados, puede crear sus propios conectores personalizados para ofrecer desencadenantes y acciones que no están disponibles como operaciones prediseñadas.

Este artículo ofrece una visión general de los conectores personalizados para los flujos de trabajo de las aplicaciones lógicas de consumo y los flujos de trabajo de las aplicaciones lógicas estándar. Cada tipo de aplicación lógica está impulsado por un tiempo de ejecución de Azure Logic Apps diferente, alojado respectivamente en Azure multitenant y Azure single-tenant. Para más información sobre los conectores en Azure Logic Apps, revise la siguiente documentación:

Aplicaciones lógicas de consumo

En Azure Logic Apps de varios inquilinos, puede crear conectores personalizados a partir de API basadas en Swagger o en SOAP hasta límites específicos para su uso en flujos de trabajo de aplicaciones lógicas de consumo. La documentación de los conectores proporciona más información general sobre cómo crear conectores personalizados para las aplicaciones lógicas de consumo, incluidos tutoriales básicos y avanzados completos. La siguiente lista también proporciona enlaces directos a información sobre conectores personalizados para aplicaciones lógicas de consumo:

Aplicaciones lógicas estándar

En Azure Logic Apps de un solo inquilino, el tiempo de ejecución rediseñado de Azure Logic Apps alimenta los flujos de trabajo de las aplicaciones lógicas estándar. Este tiempo de ejecución difiere del tiempo de ejecución de Azure Logic Apps de varios inquilinos, que alimenta los flujos de trabajo de las aplicaciones lógicas de consumo. El tiempo de ejecución de un solo inquilino usa el modelo de extensibilidad de Azure Functions, que proporciona una capacidad clave para crear sus propios conectores incorporados para que cualquiera pueda usarlos en los flujos de trabajo Estándar. En cambio, en la mayoría de los casos, la versión integrada proporciona un mejor rendimiento, funcionalidades y precios, entre otras cosas.

Cuando se lanzó oficialmente Azure Logic Apps, los nuevos conectores integrados incluían Azure Blob Storage, Azure Event Hubs, Azure Service Bus y SQL Server. Con el tiempo, esta lista de conectores incorporados sigue creciendo. Sin embargo, si necesita conectores que no están disponibles en los flujos de trabajo de la aplicación lógica estándar, puede crear sus propios conectores integrados con el mismo modelo de extensibilidad que usan los conectores integrados basados en el proveedor de servicio en los flujos de trabajo estándar.

Conectores integrados basados en el proveedor de servicios

En las instancias de Azure Logic Apps de inquilino único, los conectores integrados con atributos específicos se conocen informalmente como proveedores de servicios. Por ejemplo, estos conectores se basan en el modelo de extensibilidad Azure Functions, que proporciona la capacidad de crear sus propios conectores integrados personalizados para usarlos en flujos de trabajo de aplicaciones lógicas estándar.

En cambio, los conectores integrados que no son de proveedor de servicios tienen los siguientes atributos:

  • No se basa en el modelo de extensibilidad de Azure Functions.

  • Se implementa directamente como un trabajo dentro del tiempo de ejecución de Azure Logic Apps, como las operaciones Schedule, HTTP, Request y XML.

En la actualidad, no se dispone de capacidad para crear un conector incorporado que no sea de proveedor de servicios o un nuevo tipo de trabajo que se ejecute directamente en el tiempo de ejecución de Azure Logic Apps. Sin embargo, puede crear sus propios conectores integrados con la infraestructura del proveedor de servicios.

La siguiente sección proporciona más información sobre cómo funciona el modelo de extensibilidad para los conectores incorporados personalizados.

Modelo de extensibilidad de conectores incorporados

Basado en el modelo de extensibilidad de Azure Functions, el modelo de extensibilidad de conectores incorporados en Azure Logic Apps de un solo inquilino tiene una infraestructura de proveedores de servicios que puede usar para crear, empaquetar, registrar e instalar sus propios conectores incorporados como extensiones de Azure Functions que cualquiera puede usar en sus flujos de trabajo estándar. Este modelo incluye capacidades de activación incorporada personalizada que admiten la exposición de un desencadenador o acción de Azure Functions como un activador del proveedor de servicios en su conector incorporado personalizado.

El siguiente diagrama muestra las implementaciones de métodos que el diseñador y el tiempo de ejecución de Azure Logic Apps esperan para un conector integrado personalizado con un desencadenador basado en Azure Functions:

Diagrama conceptual que muestra el servicio de Azure Functions basado en la infraestructura del proveedor.

Las siguientes secciones proporcionan más información sobre las interfaces que debe implementar su conector.

IServiceOperationsProvider

Esta interfaz incluye los métodos que proporcionan el manifiesto de operaciones para el conector integrado personalizado.

  • Manifiesto de operaciones

    El manifiesto de operaciones incluye metadatos sobre las operaciones implementadas en el conector integrado personalizado. El diseñador de Azure Logic Apps usa principalmente estos metadatos para impulsar las experiencias de creación y supervisión de las operaciones del conector. Por ejemplo, el diseñador usa metadatos de operación para comprender los parámetros de entrada requeridos por una operación específica y para facilitar la generación de los tokens de propiedad de las salidas, en función del esquema de las salidas de la operación.

    El diseñador requiere y usa los métodos GetService() y GetOperations() para consultar las operaciones que proporciona el conector y se muestran en la superficie del diseñador. El método GetService() también especifica los parámetros de entrada de la conexión que requiere el diseñador.

    Para más información sobre estos métodos y su implementación, revise la sección Métodos a implementar más adelante en este artículo.

  • Invocaciones de operación

    Las invocaciones de operaciones son las implementaciones de métodos que se usan durante la ejecución del flujo de trabajo por el tiempo de ejecución de Azure Logic Apps para llamar a las operaciones especificadas en la definición del flujo de trabajo.

    • Si su desencadenante es un tipo de desencadenador que se basa en Azure Functions, el método GetBindingConnectionInformation() se usa en el tiempo de ejecución de Azure Logic Apps para proporcionar la información de los parámetros de conexión necesarios para el enlace del desencadenante de Azure Functions.

    • Si el conector tiene acciones, el método InvokeOperation() se usa por el tiempo de ejecución para llamar a cada acción en el conector que se ejecuta durante la ejecución del flujo de trabajo. De lo contrario, no es necesario implementar este método.

Para más información sobre estos métodos y su implementación, revise la sección Métodos a implementar más adelante en este artículo.

IServiceOperationsTriggerProvider

Las capacidades de activación integradas personalizadas admiten la adición o exposición de un desencadenador o acción de Azure Functions como un desencadenador de proveedor de servicios en su conector integrado personalizado. Para usar el tipo de desencadenador basado en Azure Functions y el mismo enlace de Azure Functions que el desencadenador del conector administrado de Azure, implemente los siguientes métodos para proporcionar la información de conexión y los enlaces desencadenadores según sea necesario en Azure Functions.

  • El método GetFunctionTriggerType() es necesario para devolver la cadena que igual que el parámetro de tipo en el enlace de desencadenador de Azure Functions.

  • GetFunctionTriggerDefinition() tiene una implementación predeterminada, por lo que no es necesario implementar explícitamente este método. Sin embargo, si desea actualizar el comportamiento predeterminado del desencadenador, como, por ejemplo, poder proporcionar parámetros adicionales que el diseñador no expone, puede implementar este método e invalidar el comportamiento predeterminado.

Métodos para implementar

En las secciones siguientes se proporciona más información sobre los métodos que el conector necesita implementar. Para ver el ejemplo completo, consulte Sample CosmosDbServiceOperationProvider.cs y Creación de conectores integrados personalizados para aplicaciones lógicas estándar en Azure Logic Apps de inquilino único.

GetService()

El diseñador requiere que este método obtenga los metadatos de alto nivel para el servicio, incluida la descripción del servicio, los parámetros de entrada de conexión, las funcionalidades, el color de marca, la dirección URL del icono, etc.

public ServiceOperationApi GetService()
{
   return this.{custom-service-name-apis}.ServiceOperationServiceApi();
}

Para obtener más información, consulte Sample CosmosDbServiceOperationProvider.cs.

GetOperations()

El diseñador requiere este método para obtener las operaciones implementadas por el servicio. La lista de operaciones se basa en el esquema de Swagger. El diseñador también utiliza los metadatos de la operación para comprender los parámetros de entrada para operaciones específicas y generar las salidas como tokens de propiedad, en función del esquema de la salida de una operación.

public IEnumerable<ServiceOperation> GetOperations(bool expandManifest)
{
   return expandManifest ? serviceOperationsList : GetApiOperations();
}

Para obtener más información, consulte Sample CosmosDbServiceOperationProvider.cs.

GetBindingConnectionInformation()

Si quiere usar el tipo de desencadenador basado en Azure Functions, este método proporciona la información de los parámetros de conexión necesarios al enlace de desencadenador de Azure Functions.

public string GetBindingConnectionInformation(string operationId, InsensitiveDictionary<JToken> connectionParameters)
{
   return ServiceOperationsProviderUtilities
      .GetRequiredParameterValue(
         serviceId: ServiceId,
         operationId: operationID,
         parameterName: "connectionString",
         parameters: connectionParameters)?
      .ToValue<string>();
}

Para obtener más información, consulte Sample CosmosDbServiceOperationProvider.cs.

InvokeOperation()

Si el conector integrado personalizado solo tiene un desencadenador, no tiene que implementar este método. Sin embargo, si el conector tiene acciones que implementar, debe implementar el método InvokeOperation(), al que se llama para cada acción del conector que se ejecuta durante la ejecución del flujo de trabajo. Puede usar cualquier cliente, como FTPClient, HTTPClient, etc., según las acciones del conector. En este ejemplo se usa HTTPClient.

public Task<ServiceOperationResponse> InvokeOperation(string operationId, InsensitiveDictionary<JToken> connectionParameters, ServiceOperationRequest serviceOperationRequest)
{
   using (var client = new HttpClient())
   {
      response = client.SendAsync(httpRequestMessage).ConfigureAwait(false).ToJObject();
   }
   return new ServiceOperationResponse(body: response);
}

Para obtener más información, consulte Sample CosmosDbServiceOperationProvider.cs.

GetFunctionTriggerType()

Para usar un desencadenador basado en Azure Functions como desencadenador en el conector, debe devolver la cadena que es igual que el parámetro de tipo en el enlace de desencadenador de Azure Functions.

En el siguiente ejemplo se devuelve la cadena del desencadenador integrado de Azure Cosmos DB, "type": "cosmosDBTrigger":

public string GetFunctionTriggerType()
{
   return "CosmosDBTrigger";
}

Para obtener más información, consulte Sample CosmosDbServiceOperationProvider.cs.

GetFunctionTriggerDefinition()

Este método tiene una implementación predeterminada, por lo que no es necesario implementar explícitamente este método. Sin embargo, si desea actualizar el comportamiento predeterminado del desencadenador, como, por ejemplo, poder proporcionar parámetros adicionales que el diseñador no expone, puede implementar este método e invalidar el comportamiento predeterminado.

Pasos siguientes

Cuando esté listo para iniciar los pasos de implementación, continúe con el siguiente artículo: