Las extensiones de DataWorks permiten definir lógica personalizada para supervisar las operaciones de los usuarios, interceptar acciones inadecuadas, enviar notificaciones de eventos y gestionar flujos de trabajo. Este tema describe cómo desarrollar y desplegar una extensión mediante Function Compute.
Contexto
Function Compute es un servicio de cómputo totalmente administrado y basado en eventos. Es posible desplegar una extensión en el entorno de ejecución de Function Compute, donde DataWorks envía mensajes de eventos de puntos de extensión a la clase ExtensionRequest. En el código de la extensión, al implementar el método handleRequest de la interfaz PojoRequestHandler, se construye un objeto ExtensionRequest para recibir los mensajes de eventos de los puntos de extensión y el contexto (Context) desde DataWorks. Esto permite definir la lógica de procesamiento de la extensión y devolver el resultado mediante la clase ExtensionResponse. DataWorks recupera automáticamente el resultado de procesamiento desde ExtensionResponse para determinar si debe bloquear el flujo de operación del punto de extensión actual.
Limitaciones
Solo los usuarios de DataWorks Enterprise Edition pueden utilizar el módulo Extensions.
El módulo Extensions está disponible en las siguientes regiones: China (Beijing), China (Hangzhou), China (Shanghai), China (Zhangjiakou), China (Shenzhen), China (Chengdu), US (Silicon Valley), US (Virginia), Germany (Frankfurt), Japan (Tokyo), China (Hong Kong), and Singapore.
Notas
Solo el Open Platform administrator, el tenant administrator, las cuentas de Alibaba Cloud y los usuarios de RAM con la directiva AliyunDataWorksFullAccess adjunta tienen permisos de lectura y escritura en el backend para desarrolladores. Para obtener más información sobre la gestión de permisos, consulte Permission control for global services y RAM policies for service and console permissions.
Limitaciones de versión: Si la suscripción de DataWorks Enterprise Edition caduca, todas las extensiones quedan inactivas y ya no se activan para verificar eventos. Las verificaciones que se hayan iniciado pero aún no hayan alcanzado un estado final se aprueban automáticamente.
Limitaciones de nodos: Cuando un nodo compuesto que contiene nodos internos, como un Platform for AI node, un do-while node o un for-each node, activa una verificación, todos los nodos internos deben aprobarla antes de que puedan continuar las operaciones posteriores.
Activación: Es posible asociar varias extensiones al mismo evento de punto de extensión. Esto significa que un solo evento puede activar múltiples extensiones.
Limitaciones de eventos: Las extensiones desplegadas mediante Function Compute actualmente admiten pre-eventos para descarga de datos, pre-eventos para publicación y cancelación de publicación de activos, y pre-eventos para carga de datos.
Funcionamiento
El siguiente diagrama muestra cómo una extensión basada en Function Compute procesa los eventos de puntos de extensión:
Cuando se activa un evento de punto de extensión, el proceso asociado entra en el estado Checking mientras espera que la extensión devuelva un resultado mediante una devolución de llamada de API. El proceso permanece en este estado hasta que la extensión envía el resultado a DataWorks. Según el resultado devuelto, DataWorks determina si debe bloquear el proceso.
Tareas de desarrollo
Desarrolle la extensión antes de desplegarla en Function Compute. Utilice la biblioteca fc-java-core para ejecutar el controlador. Se proporciona código de ejemplo en el archivo de muestra fc_dataworks_demo01-1.0-SNAPSHOT.jar. Para obtener más información, consulte Event handlers.
Paso 1: Configurar las dependencias de la extensión
Al desarrollar la extensión, agregue las siguientes dependencias al archivo pom.xml.
Dependencia de DataWorks
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dataworks_public20200518</artifactId>
<version>5.6.0</version>
</dependency>
Dependencia de Function Compute
<!-- https://mvnrepository.com/artifact/com.aliyun.fc.runtime/fc-java-core -->
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-core</artifactId>
<version>1.4.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.aliyun.fc.runtime/fc-java-event -->
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-event</artifactId>
<version>1.2.0</version>
</dependency>
Dependencia de empaquetado
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Es posible utilizar el plugin Apache Maven Shade o el plugin Apache Maven Assembly. El ejemplo anterior utiliza el plugin Apache Maven Shade.
Paso 2: Desarrollar el código de la extensión
Para desarrollar una extensión en Function Compute, implemente el método handleRequest de la interfaz PojoRequestHandler. Este método recibe objetos ExtensionRequest y el Context, y luego devuelve el resultado del procesamiento mediante la clase ExtensionResponse .
-
Tenga en cuenta los siguientes puntos al desarrollar el código.
Analizar el contenido del mensaje
Para obtener información sobre el formato de los mensajes de eventos enviados por DataWorks, consulte Developer reference: Event list and message format. En dicho formato,
messageBodycontiene el contenido específico del mensaje. Durante el desarrollo, utilice el campomessageBody.eventCodepara identificar el tipo de mensaje y el campomessageIdpara obtener los detalles del mensaje.Lógica de procesamiento
Escriba la lógica de procesamiento de mensajes según sus requisitos empresariales. Los siguientes métodos pueden mejorar la eficiencia:
Utilice Advanced feature: Configure parameters for an extension. Por ejemplo, use el parámetro
extension.project.disabledpara deshabilitar la extensión en un espacio de trabajo específico.Al procesar puntos de extensión relacionados con el módulo DataStudio, llame a la operación GetIDEEventDetail y utilice
MessageIdpara obtener una instantánea de los datos del momento en que se activó el evento del punto de extensión.
NotaEl parámetro
MessageIdcorresponde al campoiden el mensaje de evento. Para obtener más información, consulte Appendix: Format of messages sent from DataWorks to EventBridge.Resultado del procesamiento
Al empaquetar el resultado
ExtensionResponse, especifique unCheckResult. DataWorks lee elCheckResultfinal para determinar si el proceso falla.OK: La verificación de la extensión se aprobó para este evento de punto de extensión.FAIL: La verificación de la extensión falló para este evento de punto de extensión. Debe investigar y resolver el error para garantizar que los procesos posteriores se ejecuten correctamente.WARN: La verificación de la extensión se aprobó para este evento de punto de extensión, pero se generó una advertencia.
Descargue el archivo de código de ejemplo fc_dataworks_demo01-1.0-SNAPSHOT.jar y cárguelo en Function Compute para su verificación. El siguiente código proporciona más detalles:
-
Una vez desarrollado el código, empaquete el programa en un archivo
.jaro.zipejecutable para Function Compute.Abra una ventana de línea de comandos en su editor de código, vaya al directorio raíz y ejecute el comando
mvn clean packagepara empaquetar el código.- If the compilation fails, adjust the code based on the error messages in the output.
If the compilation is successful, the compiled JAR file is located in the target directory of the project. The file is named based on the artifactId and version fields in the pom.xml file, for example, java-example-1.0-SNAPSHOT.jar.
NotaEn macOS y Linux, asegúrese de que los archivos de código tengan permisos de lectura y ejecución antes de empaquetarlos.
Tareas en Function Compute
Paso 1: Desplegar la extensión
Inicie sesión en la consola de Function Compute 2.0 y vaya a la página Tasks.
-
Haga clic en Create Function para crear un servicio y la función requerida, y luego despliegue la extensión. Los mensajes de eventos específicos de la extensión desarrollada se envían directamente a este servicio. Para obtener más información, consulte Create a service y Create a function. En el panel Create Function, seleccione Create with built-in runtimes, elija Process event requests como tipo de controlador, seleccione Upload code via JAR package como método de carga de código y cargue el paquete de código preparado.
Seleccione un entorno de ejecución según su código. El paquete de ejemplo proporcionado en el Paso 1,
fc_dataworks_demo01-1.0-SNAPSHOT.jar, corresponde al entorno Java 8. Debe descargarfc_dataworks_demo01-1.0-SNAPSHOT.jara su computadora local y cargarlo como el code package. Configure otros parámetros según sus necesidades.Para obtener más información sobre las operaciones de funciones, consulte Manage functions.
-
Modifique el controlador de la función.
El controlador se configura en la consola de Function Compute. Para funciones Java, el formato del controlador es
[Package name].[Class name]::[Method name]. Por ejemplo:Nombre del paquete:
example.Nombre de la clase:
HelloFC.Nombre del método:
handleRequest.
El controlador puede configurarse como
example.HelloFC::handleRequest.NotaEl controlador predeterminado en Function Compute es
example.App::handleRequest. You must modify the handler based on your actual code. For more information about handlers,; consulte Handlers.
Paso 2: Probar la función
Después de crear la función, vaya a la página de detalles de la función, haga clic en la pestaña Code y luego en Test Function. Si se devuelve el mensaje Execution succeeded, puede proceder a registrar la extensión en DataWorks.
Tareas en DataWorks
Paso 1: Registrar la extensión
Después de desplegar la extensión en Function Compute, regístrela en DataWorks.
-
Inicie sesión en la consola de DataWorks. En la región objetivo, haga clic en en el panel de navegación izquierdo. Haga clic en Go to Open Platform para abrir la página Developer Backend.
-
Registre la extensión.
En el panel de navegación izquierdo, haga clic en Extensions para ir a la página Extensions.
-
Haga clic en , seleccione Deploy Based on Function Compute y configure la información de la extensión.
Configure los parámetros según sus necesidades. La siguiente tabla describe los parámetros disponibles.
-
Complete el registro.
Haga clic en OK. Una vez completado el registro, podrá ver la extensión en List of Extensions.
Paso 2: Publicar la extensión
Después de desarrollar, desplegar y registrar la extensión en DataWorks, debe probarla, aprobarla y publicarla. Una vez publicada, los administradores distintos al propietario de la extensión pueden habilitarla en Management Center. Para obtener más información, consulte Apply an extension.
Apéndice: Formato de mensajes de eventos de DataWorks
El siguiente código muestra el formato de mensaje común al utilizar Function Compute. El campo messageBody contiene los detalles del evento de DataWorks y varía según el tipo de mensaje.
{
"blockBusiness": true,
"eventCategoryType": "resources-download",// The event category.
"eventType": "upload-data-to-table",// The event type.
"extensionBizId": "job_6603643923728775070",
"messageBody": {
// The message content varies by message type. The following two fields are fixed.
"tenantId": 28378****10656, // The tenant ID. Each Alibaba Cloud account corresponds to a tenant in DataWorks, and each tenant has a unique ID. You can find this ID in the user information section in the upper-right corner of DataStudio.
"eventCode": "xxxx"//
},
"messageId": "52d44ee7-b51f-4d4d-afeb-*******" // The event ID. This is a unique identifier for the event.
}
El contenido del campo messageBody varía según el tipo de mensaje. Para obtener detalles sobre los mensajes de eventos, consulte Developer reference: Event list and message format.
Documentación relacionada
Para obtener más información sobre Function Compute, consulte What is Function Compute?
También puede desplegar una extensión mediante un servicio autoadministrado. Para obtener más información, consulte Develop and deploy an extension by using a self-managed service.