全部產品
Search
文件中心

DataWorks:開發部署擴充程式:自建服務方式

更新時間:Oct 25, 2024

在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回調處理後的結果。

  1. 開發程式碼。

    解析訊息內容

    DataWorks推送事件訊息格式可參考附錄:DataWorks發送給EventBridge的訊息格式,在訊息格式中,data為具體的訊息內容,在實際開發時,可通過訊息格式中的data.eventCode欄位確認訊息類型,並通過id欄位擷取訊息詳情。

    說明

    OpenEvent基於EventBridge實現DataWorks事件訊息的分發,在開發擴充程式前,需提前在EventBridge完成DataWorks訊息訂閱操作,詳情請參見:開啟訊息訂閱

    編寫處理邏輯

    需根據實際業務情境,針對事件匯流排推送的訊息進行邏輯處理。在擴充程式碼開發過程中,您可通過以下方式提高開發效率和應用效果。

    說明

    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支援的擴充點事件所屬層級,請參見開發參考:事件列表與訊息格式

      • 通過Function Compute部署的擴充程式目前僅支援資料下載前置事件

      負責人

      擴充程式的負責人,方便擴充程式使用者遇到問題時能及時聯絡到負責人。

      測試用工作空間

      選擇測試擴充程式的工作空間。擴充程式無需進行上線操作,即可在測試工作空間中生效。

      擴充程式上線前,開發人員可在測試空間進行完整鏈路的測實驗證,通過觸發事件,測試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欄位下因為訊息類型不同,訊息內容也不同,各事件訊息請參見:開發參考:事件列表與訊息格式

擴充程式樣本

瞭解上述擴充程式開發注意事項後,您可根據業務需求開發自己的擴充程式碼,以下也提供了一些典型情境下,擴充程式註冊、開發、應用的樣本。

相關文檔