DataWorks提供HTTP觸發器節點功能,能夠在跨租戶的情境中實現任務的觸發與執行。本文將逐步詳細介紹如何在DataWorks平台內利用HTTP觸發器節點來實現跨租戶的任務觸發。
背景資訊
在現代企業中,通常有在多租戶或同租戶跨地區的環境中進行資料處理和分析業務操作的業務需求。DataWorks提供HTTP觸發器節點功能,適用於以下業務情境:
需要在跨租戶環境中進行任務依賴和協同的業務情境。
同租戶跨地區的不同調度系統之間有業務關聯的業務情境(例如,B系統的資料依賴於A系統完成某個節點加工後才能使用)。
下圖以跨租戶情境為例,為您說明任務觸發機制的工作原理:
圖示說明:將租戶B環境中配置有HTTP觸發器節點的工作流程發布到營運中心,當該工作流程到達已耗用時間時,HTTP節點上遊的節點會根據配置的時間依次執行。執行到HTTP觸發器節點時,HTTP觸發器節點及後續任務將處於等待觸發狀態。一旦HTTP觸發器節點接收到租戶A環境發送的觸發命令,會進行校正。校正通過後,HTTP觸發器節點及後續節點任務將依次執行。
前提條件
擁有兩個租戶賬戶(即兩個主賬戶)環境。
已在兩個環境分別建立工作空間。
已在兩個環境的工作空間分別綁定Serverless資源群組。
已為觸發端所在工作空間綁定的Serverless資源群組的VPC,配置公網NAT Gateway和EIP。
重要當Shell節點觸發HTTP觸發器節點時,需要通過公網發送觸發命令。
已為發送觸發命令的Shell節點所在工作空間綁定MaxCompute計算資源,詳情請參見計算資源管理。
注意事項
HTTP觸發器節點僅用作觸發,無需配置開發節點的內容。
您需要根據已建立的工作空間進行相關案例操作:
使用新版資料開發(Data Studio)的工作空間:使用新版資料開發觸發案例。
未使用新版資料開發(Data Studio)的工作空間:使用舊版資料開發觸發案例。
說明未使用新版資料開發(Data Studio)的工作空間,僅DataWorks企業版支援使用HTTP觸發器節點。
新版資料開發觸發案例
如果您需要從租戶A環境觸發租戶B環境中新版資料開發的節點執行,請參見以下內容。
租戶B環境:建立HTTP觸發器節點工作流程
在租戶B環境的工作空間內建立一個需要被遠程觸發的工作流程。該工作流程應包含接收觸發命令的HTTP觸發器節點和下遊等待啟動並執行業務節點(本文以Shell節點為例),以便後續驗證跨租戶觸發的效果。
進入資料開發。
進入DataWorks工作空間列表頁,在頂部切換至目標地區,找到目標工作空間,單擊操作列的,進入Data Studio。
建立工作流程。
在左側導覽列單擊
,單擊專案目錄右側的
,選擇建立工作流程,進入建立工作流程彈窗。在建立工作流程彈窗中自訂工作流程名稱(本樣本為
HTTP_Workflow),單擊確認,進入工作流程編輯頁。
建立節點。
在工作流程編輯頁的添加節點目錄欄中,分別拖拽節點和到工作流程編輯頁。
並將Shell節點添加為HTTP觸發器節點的下遊節點。

編輯任務流Shell節點。
重要HTTP觸發器節點僅作為觸發器使用,無需配置開發節點的內容。
滑鼠懸浮至Shell節點上方,單擊彈出的開啟節點。在節點編輯頁輸入以下內容。
echo "DataWorks";在Shell節點編輯頁右側的調度配置中的資源群組配置為您工作空間綁定的Serverless資源群組。
單擊Shell節點編輯頁上方工具列中的儲存。
發布工作流程。
在專案目錄中找到您所建立的工作流程
HTTP_Workflow,在工作流程編輯頁右側的調度配置中配置執行個體產生方式為發布後即時產生。單擊工具列中的
按鈕喚起發布看板,單擊開始發布生產,任務將按照發布檢查流程執行發佈動作,更多資訊,請參見節點/工作流程發布。
記錄HTTP執行個體參數資訊。
由於HTTP觸發器節點會立即產生周期執行個體,您可前往營運中心查看並記錄HTTP執行個體參數資訊。
進入營運中心頁面。
登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的,在下拉框中選擇對應工作空間後單擊進入營運中心。
在左側導覽列單擊,進入周期執行個體頁面。
在列表中找到您所建立的HTTP觸發器節點執行個體,記錄執行個體的任務ID和定時時間。
說明滑鼠懸浮到HTTP觸發器節點執行個體的名稱上方,即可查看執行個體的任務ID。
本地環境:準備範例程式碼
添加pom依賴。
您可進入TriggerSchedulerTaskInstance調試頁面,在SDK樣本頁簽查看完整的SDK 安裝資訊。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <mainClass>com.example.demo.CrossTenantTriggerSchedulerTaskInstance</mainClass> <!-- 將這裡替換為你的主類 --> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <!-- 在打包階段執行 --> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>com.aliyun</groupId> <artifactId>dataworks_public20240518</artifactId> <version>6.2.0</version> </dependency> </dependencies>重要在代碼開發完成後,您需要將參數
mainClass替換為您所建立的Java代碼主類名稱。主類名稱的格式是完整的包名加上類名。例如com.example.demo.CrossTenantTriggerSchedulerTaskInstance。代碼開發。
package com.example.demo; import com.aliyun.dataworks_public20240518.Client; import com.aliyun.dataworks_public20240518.models.TriggerSchedulerTaskInstanceRequest; import com.aliyun.dataworks_public20240518.models.TriggerSchedulerTaskInstanceResponse; import com.aliyun.teautil.models.RuntimeOptions; import java.text.SimpleDateFormat; import java.util.Calendar; public class CrossTenantTriggerSchedulerTaskInstance { // 建立阿里雲DataWorks用戶端的方法 public static Client createClient20240518(String accessId, String accessKey, String endpoint) throws Exception { // 初始化OpenAPI設定物件 com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config(); config.setAccessKeyId(accessId); // 設定存取金鑰ID config.setAccessKeySecret(accessKey); // 設定存取金鑰Secret config.setEndpoint(endpoint); // 設定服務端點 return new Client(config); // 返回初始化後的用戶端執行個體 } // 觸發DataWorks節點啟動並執行方法 public static TriggerSchedulerTaskInstanceResponse runTriggerScheduler(Client client, Long nodeId, String EnvType,Long TriggerTime) throws Exception { TriggerSchedulerTaskInstanceRequest request = new TriggerSchedulerTaskInstanceRequest(); // 建立API請求對象 request.setTaskId(nodeId); // 設定要觸發的節點ID request.setEnvType(EnvType); // 設定專案環境 request.setTriggerTime(TriggerTime); //設定定時觸發時間(毫秒級時間戳記) RuntimeOptions runtime = new RuntimeOptions(); // 初始化運行時配置 return client.triggerSchedulerTaskInstanceWithOptions(request, runtime); // 執行API調用並返迴響應 } // 程式入口方法 public static void main(String[] args) throws Exception { // 初始化節點ID(樣本值) String nodeId1 = ""; // 初始化專案環境(樣本值) String EnvTypeStr = ""; // 初始化定時時間(樣本值) String cycTimeStr = ""; // for迴圈處理命令列參數,分別賦值給nodeId1、cycTimeParam、bizTimeParam int i; for(i = 0; i < args.length; ++i) { if (i == 0) { nodeId1 = args[i]; } else if (i == 1) { EnvTypeStr = args[i]; }else if (i == 2) { cycTimeStr = args[i]; } } // 將字串轉換為Long類型節點ID Long nodeId = Long.parseLong(nodeId1); // 輸出程式使用說明 System.out.println("Usage: java -jar test-1.0-SNAPSHOT.jar nodeId EnvTypeStr cycTimeParam"); // 解析定時時間並轉換為時間戳記 SimpleDateFormat sdft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar calendar = Calendar.getInstance(); calendar.setTime(sdft.parse(cycTimeStr)); // 解析時間字串 Long cycTime = calendar.getTimeInMillis(); // 擷取毫秒級時間戳記 // 輸出調試資訊(時間戳記) System.out.println("定時時間戳記:" + cycTime); // 配置阿里雲服務參數 String endpoint = "dataworks.cn-hangzhou.aliyuncs.com"; // 服務端點 String accessId = "xxx"; // 存取金鑰ID String accessKey = "xxx"; // 存取金鑰Secret // 建立阿里雲用戶端執行個體 Client client = createClient20240518(accessId, accessKey, endpoint); // 執行觸發節點操作 TriggerSchedulerTaskInstanceResponse response = runTriggerScheduler(client, nodeId,EnvTypeStr, cycTime); // 輸出API響應結果(JSON格式) System.out.println(com.aliyun.teautil.Common.toJSONString(com.aliyun.teautil.Common.toMap(response))); } }按照以下參數說明,將上述代碼中的
endpoint、accessId、accessKey參數替換成業務所需實際值。參數
說明
endpoint
目標HTTP觸發器節點所在工作空間的服務地址,詳情請參見阿里雲OpenAPI開發人員服務地址。
accessId
目標HTTP觸發器節點所在阿里雲帳號的
AccessKey ID。您可以登入DataWorks控制台,滑鼠移至上方至頂部功能表列右側的帳戶圖片,進入AccessKey,擷取目標HTTP觸發器節點所在阿里雲RAM使用者的
AccessKey ID及AccessKey Secret資訊。警告阿里雲主帳號的
AK擁有全部許可權,一旦泄露將帶來嚴重安全風險。建議使用僅具備目標工作空間的空間管理員角色許可權的RAM使用者AK。accessKey
目標HTTP觸發器節點所在阿里雲帳號的
AccessKey Secret。將上述代碼進行打包,產生以
jar-with-dependencies.jar為尾碼的JAR包。
租戶A環境:配置Shell節點
在租戶A所屬的工作空間中建立配置Shell節點,用於發送觸發命令。
進入資料開發。
進入DataWorks工作空間列表頁,在頂部切換至目標地區,找到目標工作空間,單擊操作列的,進入Data Studio。
上傳JAR資源。
在左側導覽列單擊
表徵圖,進入資源管理。在資源管理頁面,單擊建立按鈕或
表徵圖,選擇。在建立資源和函數彈窗中輸入資源名稱
http_node_work.jar,單擊確認。在上傳資源的詳情頁面中,單擊點擊上傳按鈕,將您在本地環境:準備範例程式碼步驟中產生的JAR包上傳,資料來源選擇您所綁定的MaxCompute資料來源。
儲存發布資源。
待您所準備的JAR資源上傳完成,單擊工具列中的
按鈕喚起發布看板,單擊開始發布生產,依次完成發布檢查流程操作,詳情請參見節點/工作流程發布。建立觸發端Shell節點。
在左側導覽列單擊
,單擊專案目錄右側的
表徵圖。選擇,進入建立節點彈窗。
自訂節點名稱,單擊確認進入節點編輯頁。
編輯觸發端Shell節點。
單擊Shell節點編輯頁左側導覽列的
表徵圖,找到您所上傳的JAR資源(http_node_work.jar)。按右鍵您所上傳的JAR資源,選擇引用資源。
在Shell節點中補全觸發代碼執行參數資訊。
##@resource_reference{"http_node_work.jar"} java -jar http_node_work.jar nodeId "EnvTypeStr" "cycTimeParam"參數
說明
java -jar
JAR執行命令。
http_node_work.jar
您所引用的資源名稱。
nodeId
租戶B環境:建立HTTP觸發器節點工作流程步驟中記錄的HTTP觸發器節點任務ID。
EnvTypeStr
目標HTTP觸發器節點的專案環境。本文執行的是發布到生產環境的HTTP觸發器節點,請將參數設定為
Prod。如需執行開發環境的HTTP觸發器節點,請將參數設定為
Dev。cycTimeParam
租戶B環境:建立HTTP觸發器節點工作流程步驟中記錄HTTP觸發器節點任務的定時時間。時間格式為
yyyy-MM-dd HH:mm:ss。配置觸發端Shell節點。
請在Shell節點的編輯頁面右側找到調度配置中的。並選擇工作空間所綁定的Serverless資源群組作為資源群組。
運行並查看結果
運行租戶A下的Shell節點,用於觸發執行租戶B中的HTTP觸發器節點及其後續節點任務。
運行觸發端Shell節點。
單擊您在租戶A環境:配置Shell節點步驟中配置的Shell節點上方工具列中的運行。
查看執行結果。
您需前往租戶B所在環境,按照以下步驟查看運行結果。
進入營運中心頁面。
登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的,在下拉框中選擇對應工作空間後單擊進入營運中心。
在左側導覽列單擊,進入周期執行個體頁面。
找到您所需觸發的HTTP觸發器節點執行個體,查看運行結果。

舊版資料開發觸發案例
如果您需要從租戶A環境觸發租戶B環境中舊版資料開發的節點執行,請參見以下內容。
租戶B環境:建立HTTP觸發器節點工作流程
在租戶B環境的工作空間內建立一個需要被遠程觸發的工作流程。該工作流程應包含接收觸發命令的HTTP觸發器節點和下遊等待啟動並執行業務節點(本文以Shell節點為例),以便後續驗證跨租戶觸發的效果。

本地環境:準備代碼
添加pom依賴。
您可進入RunTriggerNode的調試頁面,在SDK樣本頁簽查看完整的SDK 安裝資訊。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <mainClass>com.example.demo.CrossTenantTriggerNode</mainClass> <!-- 將這裡替換為你的主類 --> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>com.aliyun</groupId> <artifactId>dataworks_public20200518</artifactId> <version>7.0.1</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>tea-openapi</artifactId> <version>0.3.8</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>tea-console</artifactId> <version>0.0.1</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>tea-util</artifactId> <version>0.2.23</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>1.0.1</version> </dependency> </dependencies>重要在代碼開發完成後,您需要將參數
mainClass替換為您所建立的Java代碼的主類名稱。主類名稱的格式是完整的包名加上類名。例如com.example.demo.CrossTenantTriggerNode。代碼開發。
package com.example.demo; import java.text.SimpleDateFormat; import java.util.Calendar; import com.aliyun.dataworks_public20200518.Client; import com.aliyun.dataworks_public20200518.models.RunTriggerNodeRequest; import com.aliyun.dataworks_public20200518.models.RunTriggerNodeResponse; import com.aliyun.teautil.models.RuntimeOptions; public class CrossTenantTriggerNode { // 建立阿里雲DataWorks用戶端的方法 public static Client createClient20200518(String accessId, String accessKey, String endpoint) throws Exception { // 初始化OpenAPI設定物件 com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config(); config.setAccessKeyId(accessId); // 設定存取金鑰ID config.setAccessKeySecret(accessKey); // 設定存取金鑰Secret config.setEndpoint(endpoint); // 設定服務端點 return new Client(config); // 返回初始化後的用戶端執行個體 } // 觸發DataWorks節點啟動並執行方法 public static RunTriggerNodeResponse runTriggerNode(Client client, Long nodeId, Long cycleTime, Long bizDate, Long appId) throws Exception { RunTriggerNodeRequest request = new RunTriggerNodeRequest(); // 建立API請求對象 request.setNodeId(nodeId); // 設定要觸發的節點ID request.setCycleTime(cycleTime); // 設定周期時間(毫秒級時間戳記) request.setBizDate(bizDate); // 設定業務日期(毫秒級時間戳記) request.setAppId(appId); // 設定應用ID RuntimeOptions runtime = new RuntimeOptions(); // 初始化運行時配置 return client.runTriggerNodeWithOptions(request, runtime); // 執行API調用並返迴響應 } // 程式入口方法 public static void main(String[] args) throws Exception { // 初始化節點ID(樣本值) String nodeId1 = ""; // 初始化定時時間和業務日期(樣本值) String cycTimeStr = ""; String bizTimeParam = ""; // for迴圈處理命令列參數,分別賦值給nodeId1、cycTimeParam、bizTimeParam int i; for(i = 0; i < args.length; ++i) { if (i == 0) { nodeId1 = args[i]; } else if (i == 1) { cycTimeStr = args[i]; }else if (i == 2) { bizTimeParam = args[i]; } } // 將字串轉換為Long類型節點ID Long nodeId = Long.parseLong(nodeId1); // 輸出程式使用說明 System.out.println("Usage: java -jar test-1.0-SNAPSHOT.jar nodeId cycTimeParam bizTimeParam"); // 解析定時時間並轉換為時間戳記 SimpleDateFormat sdft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar calendar = Calendar.getInstance(); calendar.setTime(sdft.parse(cycTimeStr)); // 解析時間字串 Long cycTime = calendar.getTimeInMillis(); // 擷取毫秒級時間戳記 // 解析業務日期並轉換為時間戳記 SimpleDateFormat sdfti = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendari = Calendar.getInstance(); calendari.setTime(sdfti.parse(bizTimeParam)); Long bizTime = calendari.getTimeInMillis(); // 輸出調試資訊(時間戳記) System.out.println("定時時間戳記:" + cycTime); System.out.println("業務日期時間戳記:" + bizTime); // 配置阿里雲服務參數 String endpoint = "dataworks.cn-hangzhou.aliyuncs.com"; // 服務端點 String accessId = "xxx"; // 存取金鑰ID String accessKey = "xxx"; // 存取金鑰Secret Long appId = Long.valueOf(xxx); // 應用ID(需替換為實際值) // 建立阿里雲用戶端執行個體 Client client = createClient20200518(accessId, accessKey, endpoint); // 執行觸發節點操作 RunTriggerNodeResponse response = runTriggerNode(client, nodeId, cycTime, bizTime, appId); // 輸出API響應結果(JSON格式) System.out.println(com.aliyun.teautil.Common.toJSONString(com.aliyun.teautil.Common.toMap(response))); } }將上述代碼中的
endpoint、accessId、accessKey、appId替換成業務所需真實值。參數
說明
endpoint
目標HTTP觸發器節點所在工作空間的服務地址,詳情請參見阿里雲OpenAPI開發人員服務地址。
accessId
目標HTTP觸發器節點所在阿里雲帳號的
AccessKey ID。您可以登入DataWorks控制台,滑鼠移至上方至頂部功能表列右側的帳戶圖片,進入AccessKey,擷取
AccessKey ID及AccessKey Secret資訊。警告阿里雲主帳號的
AK擁有全部許可權,一旦泄露將帶來嚴重安全風險。建議使用僅具備目標工作空間的空間管理員角色許可權的RAM使用者AK。accessKey
目標HTTP觸發器節點所在阿里雲帳號的
AccessKey Secret。appId
目標HTTP觸發器節點所在工作空間ID。可在管理中心查看工作空間ID。
將上述代碼進行打包,產生以
jar-with-dependencies.jar為尾碼的JAR包。
租戶A環境:配置Shell節點
您可按照以下步驟,在租戶A所屬的工作空間中,配置Shell節點,用來觸發租戶B工作空間中的HTTP觸發器節點。
建立並上傳Jar資源。
將您在本地環境:準備代碼步驟打包的JAR包建立為MaxCompute資源,詳情請參見建立並使用MaxCompute資源。
開發觸發端Shell節點。
建立通用Shell節點並在Shell節點引用MaxCompute資源。在Shell節點中補全觸發代碼執行參數資訊,範例程式碼如下:
##@resource_reference{"http_node_work.jar"} java -jar http_node_work.jar nodeId "cycleTime" "bizDate"參數
說明
http_node_work.jar
您所引用的資源名稱。
nodeId
租戶B環境:建立HTTP觸發器節點工作流程步驟中記錄的HTTP觸發器節點任務ID。
cycleTime
租戶B環境:建立HTTP觸發器節點工作流程步驟中記錄觸發器節點任務的定時時間。時間格式為
yyyy-MM-dd HH:mm:ss。bizDate
租戶B環境:建立HTTP觸發器節點工作流程步驟中記錄觸發器節點任務的業務時間。時間格式為
yyyy-MM-dd HH:mm:ss。配置觸發端Shell節點。
在Shell節點編輯頁面右側的調度配置中,找到,將其設定為工作空間綁定的Serverless資源群組。
運行並查看結果
運行租戶A下的Shell節點,用於觸發租戶B中的HTTP觸發器節點及其後續任務。
運行觸發端Shell節點。
單擊您在步驟租戶A環境:配置Shell節點中配置的Shell節點上方工具列中的
表徵圖,運行節點任務。查看執行結果。
您需前往租戶B所在環境,按照以下步驟查看運行結果。
進入營運中心頁面。
登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的,在下拉框中選擇對應工作空間後單擊進入營運中心。
在左側導覽列單擊,進入周期執行個體頁面。
找到您所需觸發的HTTP觸發器節點執行個體,查看運行結果。
