Tous les produits
Search
Centre de documentation

DataWorks:Développer et déployer des extensions : Function Compute

Dernière mise à jour :Aug 10, 2026

Les extensions DataWorks vous permettent de définir une logique personnalisée pour surveiller les opérations des utilisateurs, intercepter les actions inappropriées, envoyer des notifications d'événements et gérer les flux de travail. Cette rubrique explique comment développer et déployer une extension à l'aide de Function Compute.

Informations générales

Function Compute est un service de calcul entièrement géré et piloté par les événements. Vous pouvez déployer une extension dans l'environnement d'exécution de Function Compute ; DataWorks transmet alors les messages d'événements des points d'extension à la classe ExtensionRequest. Dans le code de votre extension, implémentez la méthode handleRequest de l'interface PojoRequestHandler pour construire un objet ExtensionRequest. Cet objet reçoit les messages d'événements des points d'extension ainsi que le contexte (Context) provenant de DataWorks. Définissez ensuite la logique de traitement de votre extension et renvoyez le résultat via la classe ExtensionResponse. DataWorks récupère automatiquement ce résultat depuis ExtensionResponse afin de déterminer s'il faut bloquer le flux d'opération du point d'extension actuel.

Limites

  • Seuls les utilisateurs de l'édition Enterprise de DataWorks peuvent utiliser le module Extensions.

  • Le module Extensions est disponible dans les régions suivantes : Chine (Pékin), Chine (Hangzhou), Chine (Shanghai), Chine (Zhangjiakou), Chine (Shenzhen), Chine (Chengdu), États-Unis (Silicon Valley), États-Unis (Virginie), Allemagne (Francfort), Japon (Tokyo), Chine (Hong Kong) et Singapour.

Remarques

  • Seuls l'Open Platform administrator, l'tenant administrator, les comptes Alibaba Cloud et les utilisateurs RAM auxquels la politique AliyunDataWorksFullAccess est attachée disposent des autorisations de lecture et d'écriture sur le backend développeur. Pour plus d'informations sur la gestion des autorisations, consultez les rubriques Contrôle des autorisations pour les services globaux et Politiques RAM pour les autorisations de service et de console.

  • Limites liées à la version : si votre abonnement à l'édition Enterprise de DataWorks expire, toutes les extensions deviennent inactives et ne peuvent plus être déclenchées pour les vérifications d'événements. Les vérifications déjà déclenchées mais n'ayant pas encore atteint un état final sont automatiquement validées.

  • Limites liées aux nœuds : lorsqu'un nœud composite contenant des nœuds internes, tels qu'un nœud Platform for AI, un nœud do-while ou un nœud for-each, déclenche une vérification, tous les nœuds internes doivent passer la vérification avant que les opérations ultérieures puissent se poursuivre.

  • Déclenchement : vous pouvez associer plusieurs extensions au même événement de point d'extension. Cela signifie qu'un seul événement peut déclencher plusieurs extensions.

  • Limites liées aux événements : les extensions déployées à l'aide de Function Compute prennent actuellement en charge les pré-événements pour le téléchargement de données, les pré-événements pour la publication et la dépublication d'actifs ainsi que les pré-événements pour le téléversement de données.

Fonctionnement

Le diagramme suivant illustre le traitement des événements de points d'extension par une extension basée sur Function Compute :

image
Remarque

Après le déclenchement d'un événement de point d'extension, le processus associé passe à l'état Checking en attendant que l'extension renvoie un résultat via un rappel API. Le processus reste dans cet état jusqu'à ce que l'extension envoie le résultat à DataWorks. En fonction du résultat renvoyé, DataWorks détermine s'il convient de bloquer le processus.

Tâches du développeur

Développez votre extension avant de la déployer dans Function Compute. Utilisez la bibliothèque fc-java-core pour exécuter le gestionnaire. Un exemple de code est fourni dans le fichier fc_dataworks_demo01-1.0-SNAPSHOT.jar. Pour plus d'informations, consultez la rubrique Gestionnaires d'événements.

Étape 1 : Configurer les dépendances de l'extension

Lors du développement de votre extension, ajoutez les dépendances suivantes au fichier pom.xml.

Dépendance DataWorks

<dependency>
 <groupId>com.aliyun</groupId>
 <artifactId>dataworks_public20200518</artifactId>
 <version>5.6.0</version>
</dependency>

Dépendance 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>

Dépendance d'emballage

<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>

Vous pouvez utiliser le plugin Apache Maven Shade ou le plugin Apache Maven Assembly. L'exemple précédent utilise le plugin Apache Maven Shade.

Étape 2 : Développer le code de l'extension

Pour développer une extension dans Function Compute, implémentez la méthode handleRequest de l'interface PojoRequestHandler. Cette méthode reçoit les objets ExtensionRequest et le Context, puis renvoie le résultat du traitement à l'aide de la classe ExtensionResponse .

  1. Tenez compte des points suivants lors du développement du code.

    Analyser le contenu du message

    Pour obtenir des informations sur le format des messages d'événements transmis par DataWorks, consultez la rubrique Référence du développeur : Liste des événements et format des messages. Dans le format du message, messageBody contient le contenu spécifique du message. Lors du développement, utilisez le champ messageBody.eventCode pour identifier le type de message et le champ messageId pour obtenir les détails du message.

    Logique de traitement

    Rédigez la logique de traitement des messages en fonction de vos besoins métier. Les méthodes suivantes permettent d'améliorer l'efficacité :

    • Utilisez la Fonctionnalité avancée : Configurer les paramètres d'une extension. Par exemple, vous pouvez utiliser le paramètre extension.project.disabled pour désactiver l'extension pour un espace de travail spécifique.

    • Lorsque vous traitez des points d'extension liés au module DataStudio, appelez l'opération GetIDEEventDetail et utilisez le MessageId pour obtenir un instantané des données au moment du déclenchement de l'événement de point d'extension.

    Remarque

    Le paramètre MessageId correspond au champ id dans le message d'événement. Pour plus d'informations, consultez la rubrique Annexe : Format des messages envoyés de DataWorks vers EventBridge.

    Résultat du traitement

    Lors de l'emballage du résultat ExtensionResponse, spécifiez un CheckResult. DataWorks lit le CheckResult final pour déterminer si le processus échoue.

    • OK : la vérification de l'extension a réussi pour cet événement de point d'extension.

    • FAIL : la vérification de l'extension a échoué pour cet événement de point d'extension. Vous devez enquêter et résoudre l'erreur afin de garantir que les processus suivants s'exécutent comme prévu.

    • WARN : la vérification de l'extension a réussi pour cet événement de point d'extension, mais un avertissement a été généré.

    Téléchargez le fichier d'exemple de code fc_dataworks_demo01-1.0-SNAPSHOT.jar et téléversez-le dans Function Compute pour vérification. Le code suivant fournit plus de détails :

    Détails du code

    App.java

    Implémente l'interface PojoRequestHandler et sa méthode handleRequest pour recevoir les objets ExtensionRequest et le Context, définir la logique de traitement et renvoyer le résultat sous forme d'objet ExtensionResponse .

    Cet exemple de code interdit le téléversement manuel de données vers les tables ADS.

    package com.aliyun.example;
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.aliyun.dataworks.ExtensionRequest;
    import com.aliyun.dataworks.ExtensionResponse;
    import com.aliyun.fc.runtime.Context;
    import com.aliyun.fc.runtime.PojoRequestHandler;
    public class App implements PojoRequestHandler<ExtensionRequest, ExtensionResponse> {
        public ExtensionResponse handleRequest(ExtensionRequest extensionRequest, Context context) {
            // Print the request content for debugging.
             System.out.println(JSON.toJSONString(extensionRequest));
            // Create a response object.
            ExtensionResponse extensionResponse = new ExtensionResponse();
            // Check if eventType is 'upload-data-to-table'.
            if ("upload-data-to-table".equals(extensionRequest.getEventType())) {
                try {
                    // Convert messageBody to a string and then parse it into a JSONObject.
                    String messageBodyStr = JSON.toJSONString(extensionRequest.getMessageBody());
                    JSONObject messageBody = JSON.parseObject(messageBodyStr);
                    String tableGuid = messageBody.getString("tableGuid");
                    // Check if tableGuid contains 'ads'.
                    if (tableGuid != null && tableGuid.contains("ads")) {
                        extensionResponse.setCheckResult("FAIL");
                    } else {
                        extensionResponse.setCheckResult("OK");
                    }
                } catch (Exception e) {
                    extensionResponse.setCheckResult("FAIL");
                    extensionResponse.setErrorMessage("Error processing request: " + e.getMessage());
                    return extensionResponse;
                }
            } else {
                extensionResponse.setCheckResult("FAIL");
            }
            // Set an error message for feedback.
            extensionResponse.setErrorMessage("This is a test!");
            // Return the response object.
            return extensionResponse;
        }
    }
    

    ExtensionRequest.java

    Définit la structure de requête pour l'extension, encapsulant les messages d'événements envoyés par DataWorks.

    public class ExtensionRequest {
        private Object messageBody;
        private String messageId;
        private String extensionBizId;
        private String extensionBizName;
        private String eventType;
        private String eventCategoryType;
        private Boolean blockBusiness;
        public ExtensionRequest() {
        }
        public Object getMessageBody() {
            return this.messageBody;
        }
        public void setMessageBody(Object messageBody) {
            this.messageBody = messageBody;
        }
        public String getMessageId() {
            return this.messageId;
        }
        public void setMessageId(String messageId) {
            this.messageId = messageId;
        }
        public String getExtensionBizId() {
            return this.extensionBizId;
        }
        public void setExtensionBizId(String extensionBizId) {
            this.extensionBizId = extensionBizId;
        }
        public String getExtensionBizName() {
            return this.extensionBizName;
        }
        public void setExtensionBizName(String extensionBizName) {
            this.extensionBizName = extensionBizName;
        }
        public String getEventType() {
            return this.eventType;
        }
        public void setEventType(String eventType) {
            this.eventType = eventType;
        }
        public String getEventCategoryType() {
            return this.eventCategoryType;
        }
        public void setEventCategoryType(String eventCategoryType) {
            this.eventCategoryType = eventCategoryType;
        }
        public Boolean getBlockBusiness() {
            return this.blockBusiness;
        }
        public void setBlockBusiness(Boolean blockBusiness) {
            this.blockBusiness = blockBusiness;
        }
    }

    ExtensionResponse.java

    Définit la structure de réponse pour l'extension, encapsulant le résultat du traitement.

    public class ExtensionResponse {
        private String checkResult;
        private String errorMessage;
        public ExtensionResponse() {
        }
        public String getCheckResult() {
            return this.checkResult;
        }
        public void setCheckResult(String checkResult) {
            this.checkResult = checkResult;
        }
        public String getErrorMessage() {
            return this.errorMessage;
        }
        public void setErrorMessage(String errorMessage) {
            this.errorMessage = errorMessage;
        }
    }
  2. Une fois le code développé, emballez le programme dans un fichier exécutable .jar ou .zip destiné à Function Compute.

    Ouvrez une fenêtre de ligne de commande dans votre éditeur de code, accédez au répertoire racine et exécutez la commande mvn clean package pour emballer le code.

    • Si la compilation échoue, ajustez le code en fonction des messages d'erreur affichés dans la sortie.

    • Si la compilation réussit, le fichier JAR compilé se trouve dans le répertoire target du projet. Le nom du fichier est basé sur les champs artifactId et version du fichier pom.xml, par exemple java-example-1.0-SNAPSHOT.jar.

    Remarque

    Sous macOS et Linux, assurez-vous que les fichiers de code disposent des autorisations de lecture et d'exécution avant l'emballage.

Tâches Function Compute

Étape 1 : Déployer l'extension

  1. Connectez-vous à la console Function Compute 2.0 et accédez à la page Tasks.

  2. Cliquez sur Create Function pour créer un service et la fonction requise, puis déployez l'extension. Les messages d'événements spécifiques de l'extension développée sont envoyés directement à ce service. Pour plus d'informations, consultez les rubriques Créer un service et Créer une fonction. Dans le panneau Create Function, sélectionnez Create with built-in runtimes, choisissez Process event requests comme type de gestionnaire, sélectionnez Upload code via JAR package comme méthode de téléversement du code, puis téléversez le package de code préparé.

    • Sélectionnez un environnement d'exécution en fonction de votre code. Le package d'exemple fourni à l'étape 1, fc_dataworks_demo01-1.0-SNAPSHOT.jar, correspond à l'environnement Java 8. Téléchargez fc_dataworks_demo01-1.0-SNAPSHOT.jar sur votre ordinateur local et téléversez-le en tant que code package. Configurez les autres paramètres selon vos besoins.

    • Pour plus d'informations sur les opérations relatives aux fonctions, consultez la rubrique Gérer les fonctions.

  3. Modifiez le gestionnaire de fonction.

    Vous pouvez configurer le gestionnaire dans la console Function Compute. Pour les fonctions Java, le format du gestionnaire est [Package name].[Class name]::[Method name]. Par exemple :

    • Nom du package : example.

    • Nom de la classe : HelloFC.

    • Nom de la méthode : handleRequest.

    Le gestionnaire peut être configuré comme suit : example.HelloFC::handleRequest.

    Remarque

    Le gestionnaire par défaut dans Function Compute est example.App::handleRequest. Modifiez le gestionnaire en fonction de votre code réel. Pour plus d'informations sur les gestionnaires, consultez la rubrique Gestionnaires.

Étape 2 : Tester la fonction

Après avoir créé la fonction, accédez à la page des détails de la fonction, cliquez sur l'onglet Code et cliquez sur Test Function. Si le message Execution succeeded s'affiche, vous pouvez procéder à l'enregistrement de l'extension dans DataWorks.

Tâches DataWorks

Étape 1 : Enregistrer l'extension

Après avoir déployé l'extension dans Function Compute, enregistrez-la dans DataWorks.

  1. Connectez-vous à la console DataWorks. Dans la région cible, cliquez sur More > Open Platform dans le volet de navigation de gauche. Cliquez sur Go to Open Platform pour ouvrir la page Developer Backend.

  2. Enregistrez l'extension.

    1. Dans le volet de navigation de gauche, cliquez sur Extensions pour accéder à la page Extensions.

    2. Cliquez sur List of Extensions > Register Extension, sélectionnez Deploy Based on Function Compute et configurez les informations de l'extension.

      Vous pouvez configurer les paramètres selon vos besoins. Le tableau suivant décrit les paramètres.

    Paramètres

    Paramètre

    Description

    Extension Name

    Un nom personnalisé permettant d'identifier l'extension.

    Service et fonction Function Compute

    Sélectionnez le service et la fonction Function Compute pour l'extension. Les messages d'événements sont envoyés à ce service.

    Processed Extension Points

    Seuls les messages déclenchés par les pré-événements pour le téléchargement de données, les pré-événements pour la publication et la dépublication d'actifs et les pré-événements pour le téléversement de données peuvent être traités.

    Remarque

    Après avoir effectué une sélection, les champs Event et Applicable Service sont automatiquement renseignés. Il n'est pas nécessaire de les configurer manuellement.

    Owner

    Le propriétaire de l'extension, que les utilisateurs peuvent contacter en cas de problème.

    Workspace for Testing

    Sélectionnez l'espace de travail pour tester l'extension. L'extension s'exécute dans l'espace de travail de test sans être publiée.

    Avant la publication, effectuez des tests de bout en bout dans l'espace de travail de test. Déclenchez un événement pour vérifier que DataWorks envoie un message via EventBridge et que l'extension reçoit, examine et fournit un rappel pour le message.

    Remarque

    Si vous sélectionnez un événement de point d'extension au niveau du locataire pour Processed Extension Points, il n'est pas nécessaire de configurer Workspace for Testing.

    Extension Details Address

    Saisissez l'URL d'une page décrivant les détails de l'extension, aidant ainsi les utilisateurs à comprendre et à utiliser l'extension.

    Vous pouvez créer une page de détails lors du développement et fournir son URL ici, permettant aux utilisateurs d'afficher le processus de validation complet lorsqu'une vérification est déclenchée, tel que le flux de vérification et la raison d'un blocage.

    Extension Documentation Address

    Saisissez l'URL de la documentation d'aide de l'extension.

    Vous pouvez créer une page de documentation lors du développement et fournir son URL ici, aidant ainsi les utilisateurs à comprendre la logique de validation et les propriétés de l'extension.

    Parameters for Extension

    Utilisez des paramètres pour améliorer l'efficacité du développement et de l'application de l'extension. Ajoutez les paramètres requis ici lors du développement du code.

    Vous pouvez utiliser des paramètres intégrés pour les cas d'utilisation courants ou définir les vôtres.

    Vous pouvez ajouter plusieurs paramètres, avec un paramètre par ligne au format key=value. Pour plus d'informations sur l'utilisation des paramètres, consultez la rubrique Application avancée : Configurer les paramètres de l'extension.

    Options for Extension

    Saisissez les options de configuration disponibles pour les utilisateurs afin de contrôler personnellement l'extension dans différents espaces de travail. Définissez ces options sous forme de chaîne JSON.

    Par exemple, vous pouvez utiliser une option pour permettre aux utilisateurs de contrôler la longueur maximale du SQL. Pour le format JSON, consultez la rubrique Application avancée : Configurer les options de l'extension.

  3. Terminez l'enregistrement.

    Cliquez sur OK. Une fois l'enregistrement terminé, vous pouvez afficher l'extension dans la List of Extensions.

Étape 2 : Publier l'extension

Après avoir développé, déployé et enregistré l'extension dans DataWorks, vous devez la tester, l'approuver et la publier. Une fois publiée, les administrateurs autres que le propriétaire de l'extension peuvent activer celle-ci dans Management Center. Pour plus d'informations, consultez la rubrique Appliquer une extension.

Annexe : Format des messages d'événements DataWorks

Le code suivant présente le format de message courant lors de l'utilisation de Function Compute. Le messageBody contient les détails de l'événement DataWorks et varie selon le type de message.

{
	"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.
}
Remarque

Le contenu du champ messageBody varie selon le type de message. Pour plus de détails sur les messages d'événements, consultez la rubrique Référence du développeur : Liste des événements et format des messages.

Documentation connexe