开发部署扩展程序:自建服务方式

在DataWorks扩展程序中,您可以自定义逻辑以监管用户的操作行为,例如拦截和阻断不当行为,通过扩展程序对特定事件进行消息通知与流程管控。本文为您介绍如何通过自建服务开发部署扩展程序。

背景信息

前提条件

开启消息订阅,自建服务部署扩展程序的方式依赖于EventBridge的消息分发能力,确保已指定好DataWorks的开放事件消息可发送至EventBridge中的某一事件中线,并且该事件总线的消息将路由至已在本地或云上部署完成的服务程序。

使用限制

  • 仅支持DataWorks企业版。

  • 支持地域:华北2(北京)、华东1(杭州)、华东2(上海)、华北3(张家口)、华南1(深圳)、西南1(成都)、美国(硅谷)、美国(弗吉尼亚)、德国(法兰克福)、日本(东京)、中国(香港)、新加坡

注意事项

  • 权限控制:仅开放平台管理员租户管理员、阿里云主账号或者拥有AliyunDataWorksFullAccess权限的RAM用户拥有开发者后台的读写权限,权限控制详情请参见全局级模块权限控制产品及控制台权限控制详情:RAM Policy

  • 版本限制:如果您使用的企业版DataWorks到期,所有扩展程序将会失效,无法再触发事件检查。已触发且未达终态的检查会自动通过。

  • 节点限制:包含内部节点的组合类节点(例如:机器学习(PAI)节点do-while节点for-each节点)触发检查时,需内部节点均检查通过才可继续进行后续操作。

  • 触发说明:多个扩展程序可关联同一个扩展点事件,即同一个事件支持触发多个扩展程序。

处理流程

以下为自建服务部署扩展程序,利用EventBridge消费消息的基本流程:

image
说明

扩展点事件触发后,在等待扩展程序回调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回调处理后的结果。

  1. 开发程序代码。

    解析消息内容

    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返回针对该类消息的处理结果。

    回调的API,将返回当前服务用于哪一个扩展程序(ExrensionCode)、哪一个事件消息(Messageid)和消息处理结果(CheckResult

    • CheckResult的值:

      • OK:扩展程序对本次扩展点事件检查通过。

      • FAIL:扩展程序对本次扩展点事件检查不通过。您需要查看并及时处理报错,以免影响后续程序的正常执行。

      • WARN:扩展程序对本次扩展点事件检查通过,但存在警告。

    • ExtensionCode:请参考下述完成注册扩展程序步骤后,在DataWorks扩展程序列表页获取。

    • MessageId:对应消息中的ID字段,参考附录:DataWorks发送给EventBridge的消息格式获取

  2. 代码开发完成后,需将程序打包为可运行的.jar文件,以便后续部署服务使用。

步骤三:部署扩展程序

扩展程序代码开发调试完成后,您需要在阿里云ECS或其他服务商将打包好的代码包部署为一个应用服务。

DataWorks产品侧

完成代码开发后,可在DataWorks产品侧完成扩展程序的注册与管理操作。

步骤一:注册扩展程序

开发使用扩展程序前,您需先在DataWorks注册一个扩展程序,获取对应的Extension Code,用于后续的扩展程序代码开发,操作步骤如下。

  1. 进入开放平台页面。

    登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的更多 > 开放平台,进入开放平台的开发者后台页面。

  2. 注册扩展程序。

    1. 在左侧导航栏单击扩展程序,进入扩展程序页面。

    2. 单击扩展程序列表 > 注册扩展程序,选择通过自建服务部署并配置扩展程序信息。

      参数说明

      参数

      如何配置

      扩展程序名称

      自定义扩展程序的名称,用于标识扩展程序。

      处理的扩展点

      选择该扩展程序用于处理哪几类扩展事件触发的消息。当前支持的扩展点,详情请参见支持的扩展点事件列表,您可根据实际情况选择。

      说明
      • 选择完成后,配置界面会自动根据选择结果匹配所属事件适用模块,无需手动配置。

      • 扩展点事件限制:扩展点事件分为租户级和空间级,注册扩展程序时,仅支持选择某一类级别的扩展点事件。DataWorks支持的扩展点事件所属级别,请参见开发参考:事件列表与消息格式

      • 通过函数计算部署的扩展程序目前仅支持数据下载前置事件

      负责人

      扩展程序的负责人,方便扩展程序使用者遇到问题时能及时联系到负责人。

      测试用工作空间

      选择测试扩展程序的工作空间。扩展程序无需进行上线操作,即可在测试工作空间中生效。

      扩展程序上线前,开发人员可在测试空间进行完整链路的测试验证,通过触发事件,测试DataWorks通过EventBridge发送消息、扩展程序接收消息并进行消息审核与回调。

      说明

      处理的扩展点选择租户级扩展点事件,无需配置测试用工作空间

      扩展程序详情地址

      输入介绍扩展程序详情的地址,帮助扩展程序使用者更好地理解和使用此扩展程序。

      您可在开发部署扩展程序时,开发一个扩展程序的详情展示页面,将页面地址配置在此处,以便使用者在触发扩展程序校验时,可通过链接查看完整的校验过程。例如,此次扩展程序检查链路和阻塞的原因。

      扩展程序文档地址

      输入扩展程序的帮助文档地址,供扩展程序的使用者阅读。

      您可在开发部署扩展程序时,开发一个扩展程序的帮助文档页面,将页面地址配置在此处,以便使用者学习了解扩展程序的校验逻辑与属性。

      扩展程序参数配置

      DataWorks支持在扩展程序开发过程中使用参数来提高扩展程序开发和应用效率,在扩展程序代码开发时,将需要应用的参数添加至此处即可。

      您可直接使用DataWorks提供的典型应用场景的内置参数,也可自定义参数。

      支持添加多个参数,一行一个参数,参数格式为key=value

      说明

      例如,您可以使用内置扩展程序参数extension.project.disabled,使扩展程序对某个工作空间不生效。更多参数的使用,请参见高级应用:扩展程序参数配置

      扩展程序选项配置

      输入提供给扩展程序使用者的功能配置项,可实现该扩展程序在不同工作空间进行个性化管控。扩展程序开发者需在此界面通过JSON字符串定义选项。

      例如,可通过选项配置让扩展程序使用者自行管控SQL长度。JSON格式可参考高级应用:扩展程序选项配置

  3. 完成扩展程序注册。

    单击确定,完成扩展程序。

    说明

    注册完成后,您可在扩展程序列表,查看此注册成功的扩展程序。

步骤二:上线扩展程序

扩展程序开发、部署并在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字段下因为消息类型不同,消息内容也不同,各事件消息请参见:开发参考:事件列表与消息格式

扩展程序示例

了解上述扩展程序开发注意事项后,您可根据业务需求开发自己的扩展程序代码,以下也提供了一些典型场景下,扩展程序注册、开发、应用的示例。

相关文档