在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概述。
支援通過擴充程式處理事件的擴充點列表,詳情請參見下文的擴充程式概述。
您也可採用Function Compute部署擴充程式,詳情請參見開發部署擴充程式:Function Compute方式。