DataWorks propose les fonctionnalités OpenAPI, OpenEvent et Extensions. Utilisez ces trois capacités ouvertes pour mettre en œuvre un contrôle personnalisé et une réponse adaptée à des flux de travail spécifiques. Cette rubrique explique comment configurer la plateforme ouverte à l'aide d'un scénario métier : contrôler les versions de tâches pendant une période de gel du réseau lors de la soumission d'un événement de nœud de déploiement sur la page Data Development.
Pour obtenir un aperçu des fonctionnalités de la plateforme ouverte et des concepts de base utilisés dans cette pratique, consultez Présentation d'OpenEvent et Présentation des extensions.
Description du scénario
Configuration de l'abonnement
Lors de la configuration d'un abonnement, spécifiez le type d'événement comme étant la validation de fichier ou le déploiement de fichier à l'aide d'une règle d'événement.
Dans les espaces de travail en mode standard : dataworks:FileChange:CommitFile.
Dans les espaces de travail en mode basique : dataworks:FileChange:DeployFile.
Procédure
Étape 1 : Configurer un bus d'événements personnalisé
Pour connaître les étapes détaillées d'activation et de configuration des abonnements aux messages, consultez Activer les abonnements aux messages. Les sections suivantes décrivent les étapes de configuration principales et les points clés à prendre en compte pour cette pratique.
-
Connectez-vous à la console EventBridge. Dans le volet de navigation de gauche, cliquez sur Event Bus pour accéder à la page de création du bus d'événements.
Si vous n'avez pas activé EventBridge, activez EventBridge et accordez les autorisations .
-
Cliquez sur le bouton
, puis cliquez sur Create custom event bus.Dans la section Bus, saisissez un Custom event bus name, puis cliquez sur Next step pour configurer la source d'événement.
Cliquez sur Skip pour ignorer la configuration des sections Event source, Rule et Target. Saisissez une Description. Vous pouvez ignorer les étapes 2 (Source d'événement), 3 (Règle) et 4 (Cible).
-
Dans le volet de navigation de gauche, cliquez sur Event Bus pour revenir à la liste des bus d'événements. Localisez votre bus d'événements personnalisé et cliquez sur son nom pour accéder à la page de présentation.
Cliquez sur Event Rules dans le volet de navigation de gauche pour accéder à la page des règles d'événement, puis cliquez sur Create Rule pour créer une nouvelle règle d'événement.
-
Cette pratique configure le bus EventBridge personnalisé pour recevoir les événements de validation et de déploiement de fichiers DataWorks. La configuration de démonstration et les paramètres clés sont les suivants.
Configure basic information : Saisissez un nom de règle personnalisé.
-
Configure event pattern :
Event source type : Sélectionnez Custom event source.
Event source : Laissez ce champ vide.
-
Pattern content : Rédigez le modèle au format JSON comme indiqué ci-dessous. Cet exemple utilise un espace de travail en mode standard.
RemarqueSi vous utilisez un espace de travail en mode basique, définissez la valeur sur dataworks:FileChange:DeployFile.
{ "source": [ "acs.dataworks" ], "type": [ "dataworks:FileChange:CommitFile" ] }source : Spécifie l'identifiant du produit comme acs.dataworks.
type : Spécifie le type d'événement sous le produit comme dataworks:FileChange:CommitFile.
Test event pattern : Mettez à jour les valeurs de source et de type, puis testez l'événement. Une fois le test réussi, cliquez sur Suivant. Cliquez sur Test. Si la page affiche « Match succeeded. The event can be triggered normally », le modèle d'événement est correctement configuré.
-
Configure event target.
Service Type : Sélectionnez HTTPS ou HTTP. Pour plus de types de services, consultez Gérer les règles d'événement.
-
URL : Saisissez l'URL qui reçoit les messages poussés depuis le bus d'événements personnalisé, par exemple :
https://server address:port/extensions/consumer.RemarqueSaisissez l'adresse côté serveur où votre extension est déployée.
Body : Sélectionnez Complete event.
Network type : Sélectionnez Internet.
Étape 2 : Configurer un canal de distribution d'événements
-
Connectez-vous à la console DataWorks. Dans la région cible, cliquez sur dans le volet de navigation de gauche. Cliquez sur Go to Open Platform pour ouvrir la page Developer Backend.
-
Sur la page Developer Backend, cliquez sur OpenEvent dans le volet de navigation de gauche. Sur la page qui s'affiche, cliquez sur Add Event Distribution Channel et configurez les paramètres dans la boîte de dialogue.
Workspace for Event Distribution : Sélectionnez un espace de travail que vous avez créé.
Custom Bus in Eventbridge for Distribution : Sélectionnez le bus d'événements créé à l'étape 1.
Après avoir enregistré le canal de distribution d'événements, cliquez sur Enable dans la colonne Operation du canal pour activer le nouveau canal de distribution d'événements.
Étape 3 : Enregistrer et configurer une extension
-
Sur la page Developer Backend, cliquez sur Extension dans le volet de navigation de gauche. Sur la page qui s'affiche, cliquez sur Register Extension et configurez les paramètres dans la boîte de dialogue.
Méthode de déploiement : Sélectionnez Self-managed service deployment.
-
Enregistrez l'extension.
Extension Name : Saisissez un nom personnalisé.
Extension Point Event : Sélectionnez Pre-file commit event et Pre-file deployment event.
Workspace for Testing : Après la configuration, vous pouvez tester l'extension dans cet espace de travail avant de la soumettre.
Configurez les autres paramètres selon les instructions.
Une fois la configuration terminée, cliquez sur Determine pour enregistrer l'extension.
-
Dans la colonne Operation de l'extension créée, cliquez sur Submit pour soumettre l'extension pour examen.
RemarqueL'examen de l'extension est effectué par la plateforme DataWorks. L'examen prend généralement T+3 jours ouvrables.
Pour tester l'extension créée, configurez Workspace for Testing.
Une fois l'examen approuvé, cliquez sur Deploy dans la colonne Operation pour mettre l'extension en ligne.
Cliquez sur Manage Extensions pour accéder à la page . Sélectionnez votre extension et activez-la dans la colonne Enable.
Développer et configurer l'extension
Exemple de code
Ce code reçoit les messages poussés par EventBridge, compare la date actuelle aux dates de jours fériés et de gel du réseau, et renvoie le résultat à DataWorks à l'aide de l'opération OpenAPI UpdateIDEEventResult.
Environnement : Java 8 avec Maven.
package com.aliyun.dataworks.demo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.dataworks.config.Constants;
import com.aliyun.dataworks.config.EventCheckEnum;
import com.aliyun.dataworks.config.ExtensionParamProperties;
import com.aliyun.dataworks.services.DataWorksOpenApiClient;
import com.aliyun.dataworks_public20200518.Client;
import com.aliyun.dataworks_public20200518.models.UpdateIDEEventResultRequest;
import com.aliyun.dataworks_public20200518.models.UpdateIDEEventResultResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.List;
/**
* @author dataworks demo
*/
@RestController
@RequestMapping("/extensions")
public class ExtensionsController {
@Autowired(required = false)
private DataWorksOpenApiClient dataWorksOpenApiClient;
@Autowired
private ExtensionParamProperties extensionParamProperties;
/**
* Receives messages pushed by EventBridge.
*
* @param jsonParam
*/
@PostMapping("/consumer")
public void consumerEventBridge(@RequestBody String jsonParam) {
JSONObject jsonObj = JSON.parseObject(jsonParam);
String eventCode = jsonObj.getString(Constants.EVENT_CODE_FILED);
if (Constants.COMMIT_FILE_EVENT_CODE.equals(eventCode)) {
// Initialize client
Client client = dataWorksOpenApiClient.createClient();
// Get current date
SimpleDateFormat sdf = new SimpleDateFormat(Constants.YYYY_MM_DD);
String now = sdf.format(System.currentTimeMillis());
// Get 2022 holidays and network freeze dates
List<String> holidayList = Arrays.asList(extensionParamProperties.getHolidayList().split(","));
// Check if current date is a freeze date
boolean isExists = holidayList.stream().anyMatch(day -> day.equals(now));
// Prepare callback request
UpdateIDEEventResultRequest updateIDEEventResultRequest = new UpdateIDEEventResultRequest();
updateIDEEventResultRequest.setMessageId(jsonObj.getString("id"));
updateIDEEventResultRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
// If freeze date, check fails
if (isExists) {
updateIDEEventResultRequest.setCheckResult(EventCheckEnum.FAIL.getCode());
updateIDEEventResultRequest.setCheckResultTip("File submission is not allowed on freeze dates");
} else {
// If not a freeze date, check passes
updateIDEEventResultRequest.setCheckResult(EventCheckEnum.OK.getCode());
updateIDEEventResultRequest.setCheckResultTip(EventCheckEnum.OK.getName());
}
try {
// Callback to DataWorks
UpdateIDEEventResultResponse response = client.updateIDEEventResult(updateIDEEventResultRequest);
// The unique ID of the request, used for troubleshooting
System.out.println("response:" + response.getBody().getRequestId());
} catch (Exception e) {
System.out.println("consumerEventBridge error:" + e.getMessage());
throw new RuntimeException(e);
}
} else {
System.out.println("Other events were not filtered. Check your configuration steps.");
}
}
}
Déployer l'exemple de projet
-
Préparez l'environnement et le projet
Dépendances : Java 8 ou version ultérieure, Maven.
Lien de téléchargement du projet : extension-demo-deploycontroller.zip (30 Ko).
-
Options de déploiement
Déploiement local : Empaquetez le projet dans un fichier JAR et exécutez-le sur un serveur local ou une machine Windows avec Java 8 et Maven installés à l'aide de la commande
java -jar yourapp.jar.Déploiement cloud : Empaquetez le projet dans un fichier JAR et déployez-le dans un environnement d'exécution tel qu'un conteneur Docker ou une instance Elastic Compute Service.
-
Après avoir téléchargé le projet, accédez au répertoire racine et exécutez la commande suivante pour l'empaqueter dans un fichier JAR.
mvn clean package -Dmaven.test.skip=true spring-boot:repackage -
Exécutez le fichier JAR :
java -jar target/extension-demo-deploycontroller-1.0.jar
L'application démarre avec succès, comme le montre la sortie suivante :
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.2)
2022-08-02 20:07:59.521 INFO 48144 --- [ main] com.aliyun.dataworks.DemoStarter : Starting DemoStarter v1.0 using Java 1.8.0_151 on xxxdeMacBook-Pro.local with PID 48144 (/xxx/xxx/n-demo-deploycontroller/target/extension/demo-deploycontroller-1.0.jar started by xxx in xxx/xxx/extension-xxx-demo-deploycontroller)
2022-08-02 20:07:59.523 INFO 48144 --- [ main] com.aliyun.dataworks.DemoStarter : No active profile set, falling back to 1 default profile: "default"
2022-08-02 20:08:00.440 INFO 48144 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2022-08-02 20:08:00.452 INFO 48144 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2022-08-02 20:08:00.452 INFO 48144 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.65]
2022-08-02 20:08:00.452 INFO 48144 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2022-08-02 20:08:00.576 INFO 48144 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1002 ms
2022-08-02 20:08:00.576 INFO 48144 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2022-08-02 20:08:00.945 INFO 48144 --- [ main] com.aliyun.dataworks.DemoStarter : Started DemoStarter in 1.771 seconds (JVM running for 2.199)
2022-08-02 20:08:07.853 INFO 48144 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-08-02 20:08:07.854 INFO 48144 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
Ouvrez http://localhost:8080/index dans votre navigateur. Si vous voyez "hello world!", l'application est déployée avec succès. Après la connexion au réseau, elle peut recevoir des messages d'EventBridge.
Vérifier les résultats
Après avoir déployé le code et établi la connexion à EventBridge, vérifiez la configuration dans un espace de travail où l'extension est activée.
Méthode de vérification : Dans l'éditeur de code, cliquez sur Submit pour déclencher la vérification de l'événement pré-soumission. Après la soumission, un message « Checking » s'affiche. Si la vérification réussit, l'opération se poursuit automatiquement. Consultez les enregistrements de vérification et leur statut dans le panneau Operation checks à gauche. Cliquez sur le panneau Operation checks en bas de l'éditeur pour afficher les détails tels que le type de vérification (par exemple, Pre-submit check_Test program), l'état actuel et le lien view details.