在DataWorks扩展程序中,您可以自定义逻辑以监管用户的操作行为,例如拦截和阻断不当行为,通过扩展程序对特定事件进行消息通知与流程管控。本文为您介绍如何通过自建服务开发部署扩展程序。
背景信息
前提条件
已开启消息订阅,自建服务部署扩展程序的方式依赖于EventBridge的消息分发能力,确保已指定好DataWorks的开放事件消息可发送至EventBridge中的某一事件中线,并且该事件总线的消息将路由至已在本地或云上部署完成的服务程序。
使用限制
仅支持DataWorks企业版。
支持地域:华北2(北京)、华东1(杭州)、华东2(上海)、华北3(张家口)、华南1(深圳)、西南1(成都)、美国(硅谷)、美国(弗吉尼亚)、德国(法兰克福)、日本(东京)、中国(香港)、新加坡。
注意事项
权限控制:仅开放平台管理员和租户管理员、阿里云主账号或者拥有AliyunDataWorksFullAccess权限的RAM用户拥有开发者后台的读写权限,权限控制详情请参见全局级模块权限控制、产品及控制台权限控制详情:RAM Policy。
版本限制:如果您使用的企业版DataWorks到期,所有扩展程序将会失效,无法再触发事件检查。已触发且未达终态的检查会自动通过。
节点限制:包含内部节点的组合类节点(例如:机器学习(PAI)节点、do-while节点、for-each节点)触发检查时,需内部节点均检查通过才可继续进行后续操作。
触发说明:多个扩展程序可关联同一个扩展点事件,即同一个事件支持触发多个扩展程序。
处理流程
以下为自建服务部署扩展程序,利用EventBridge消费消息的基本流程:
扩展点事件触发后,在等待扩展程序回调API消息结果时,触发扩展事件的流程会变成检查中状态,直至扩展程序将处理结果返回给DataWorks,DataWorks会根据反馈结果状态决定是否阻塞本次流程。
用户侧
在DataWorks中以自建服务方式部署扩展程序前,需提前开发扩展程序,并将其部署在云上或本地。您可参考文档附录:DataWorks开放平台示例代码库初始化工程代码,并从GitHub中获取开放平台示例代码。在扩展程序开发时,您需要根据事件总线中的消息最终路由的服务类型来开发部署扩展程序。
步骤一:配置扩展程序依赖
在开发扩展程序时,需要添加以下依赖进pom.xml
文件。EventBridge持多种类型终端来处理和消费事件,除以下依赖外,可根据EventBridge设置的事件目标,根据最终消息路由情况,配置其他依赖。
DataWorks依赖库
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dataworks_public20200518</artifactId>
<version>5.6.0</version>
</dependency>
打包依赖配置
<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>
步骤二:开发扩展程序代码
EventBridge内的事件总线路由的消息将推送至部署在本地或云上的服务,该服务将接收由事件总线推送的DataWorks消息,并通过DataWorks特定的API回调处理后的结果。
开发程序代码。
解析消息内容
DataWorks推送事件消息格式可参考附录:DataWorks发送给EventBridge的消息格式,在消息格式中,
data
为具体的消息内容,在实际开发时,可通过消息格式中的data.eventCode
字段确认消息类型,并通过id
字段获取消息详情。说明OpenEvent基于EventBridge实现DataWorks事件消息的分发,在开发扩展程序前,需提前在EventBridge完成DataWorks消息订阅操作,详情请参见:开启消息订阅。
编写处理逻辑
需根据实际业务场景,针对事件总线推送的消息进行逻辑处理。在扩展程序代码开发过程中,您可通过以下方式提高开发效率和应用效果。
使用高级应用:扩展程序参数配置,例如
extension.project.disabled
,使扩展程序对某个工作空间不生效。在处理数据开发DataStudio模块相关扩展点时,调用GetIDEEventDetail接口,根据
MessageId
获取触发扩展点事件时的数据快照。
说明MessageId
对应消息中的id
字段,详情可参考附录:DataWorks发送给EventBridge的消息格式。返回处理结果至DataWorks
扩展程序服务对扩展点处理的结果需要通过OpenAPI的方式返回给DataWorks。在回调OpenAPI时,需根据扩展程序处理的扩展点事件所在模块,选择合适的OpenAPI返回针对该类消息的处理结果。
DataStudio中的扩展点事件:请使用UpdateIDEEventResult接口回调处理结果。
运维中心的扩展点事件:请使用UpdateWorkbenchEventResult接口回调处理结果。
其他模块的扩展点事件:请使用CallbackExtension接口回调处理结果
回调的API,将返回当前服务用于哪一个扩展程序(ExrensionCode)、哪一个事件消息(Messageid)和消息处理结果(CheckResult)
CheckResult的值:
OK
:扩展程序对本次扩展点事件检查通过。FAIL
:扩展程序对本次扩展点事件检查不通过。您需要查看并及时处理报错,以免影响后续程序的正常执行。WARN
:扩展程序对本次扩展点事件检查通过,但存在警告。
ExtensionCode:请参考下述完成注册扩展程序步骤后,在DataWorks扩展程序列表页获取。
MessageId:对应消息中的ID字段,参考附录:DataWorks发送给EventBridge的消息格式获取。
代码开发完成后,需将程序打包为可运行的
.jar
文件,以便后续部署服务使用。
步骤三:部署扩展程序
扩展程序代码开发调试完成后,您需要在阿里云ECS或其他服务商将打包好的代码包部署为一个应用服务。
DataWorks产品侧
完成代码开发后,可在DataWorks产品侧完成扩展程序的注册与管理操作。
步骤一:注册扩展程序
开发使用扩展程序前,您需先在DataWorks注册一个扩展程序,获取对应的Extension Code,用于后续的扩展程序代码开发,操作步骤如下。
进入开放平台页面。
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的 ,进入开放平台的开发者后台页面。
注册扩展程序。
在左侧导航栏单击扩展程序,进入扩展程序页面。
单击
,选择通过自建服务部署并配置扩展程序信息。
完成扩展程序注册。
单击确定,完成扩展程序。
说明注册完成后,您可在扩展程序列表,查看此注册成功的扩展程序。
步骤二:上线扩展程序
扩展程序开发、部署并在DataWorks上注册完成后,您还需通过测试、审批、上线流程,之后扩展程序责任人之外的其他管理者可在管理中心中启用该扩展程序,操作详情请参见:应用扩展程序。
附录:DataWorks发送给EventBridge的消息格式
以下内容中,data字段中的内容为DataWorks推送给EventBridge的内容,EventBridge在此基础上会补充其他信息。
{
"datacontenttype": "application/json;charset=utf-8", //参数data的内容形式。datacontenttype只支持application/json格式。
"aliyunaccountid": "1111",//阿里云主账号ID。
"aliyunpublishtime": "2024-07-10T07:25:34.915Z",//EventBridge接收事件的时间。
"data": {
"tenantId": 28378****10656,//租户id,DataWorks每个阿里云主账号对应一个租户,每个租户有自己的租户id,该值您可在DataWorks数据开发右上角用户信息查看。
"eventCode": "xxxx"//
},
"aliyunoriginalaccountid": "11111",
"specversion": "1.0",
"aliyuneventbusname": "default",//用于接收DataWorks事件消息的EventBridge事件总线名称。
"id": "45ef4dewdwe1-7c35-447a-bd93-fab****",//事件ID。标识事件的唯一值。
"source": "acs.dataworks",//事件源,提供事件的服务,说明此消息由dataworks推送。
"time": "2024-07-10T15:25:34.897Z",//事件产生时间。
"aliyunregionid": "cn-shanghai",//接收事件的地域。
"type": "dataworks:ResourcesUpload:UploadDataToTable"//事件类型。该事件类型可在EventBridge控制台对DataWorks推送的全量消息进行过滤,每个事件的事件Type值不同。
}
Data字段下因为消息类型不同,消息内容也不同,各事件消息请参见:开发参考:事件列表与消息格式。
扩展程序示例
了解上述扩展程序开发注意事项后,您可根据业务需求开发自己的扩展程序代码,以下也提供了一些典型场景下,扩展程序注册、开发、应用的示例。
相关文档
各类事件的消息格式,详情请参见开发参考:事件列表与消息格式。
OpenEvent通过EventBridge为您提供部分事件的消息订阅,详情请参见OpenEvent概述。
支持通过扩展程序处理事件的扩展点列表,详情请参见下文的扩展程序概述。
您也可采用函数计算部署扩展程序,详情请参见开发部署扩展程序:函数计算方式。