DataWorks オープン プラットフォームは、OpenAPI、OpenEvent、および拡張機能を提供します。これらの機能を使用して、特定のフローに対するカスタムコントロールと応答を実装できます。このトピックでは、タスクデプロイメントのロックダウンシナリオを例に、[データ開発] ページでのデプロイメントのためのノード送信などのイベントに対してオープン プラットフォームを設定する方法を説明します。
このベストプラクティスで使用されるオープン プラットフォームの機能と概念の概要については、「OpenEvent の概要」および「拡張機能の概要」をご参照ください。
シナリオの説明
サブスクリプションの設定
サブスクリプションを設定する際、イベントルールを使用してファイル送信またはデプロイメントのイベントタイプを指定できます。
標準モードのワークスペースでは、dataworks:FileChange:CommitFile を使用します。
基本モードのワークスペースでは、dataworks:FileChange:DeployFile を使用します。
操作手順
ステップ 1:カスタムイベントバスの設定
メッセージサブスクリプションを有効化して設定する詳細な手順については、「メッセージサブスクリプションの有効化」をご参照ください。以下のセクションでは、このベストプラクティスのコア設定フローと重要な注意事項について説明します。
EventBridge コンソールにログインします。左側のナビゲーションウィンドウで、[イベントバス] をクリックしてイベントバス作成ページに移動します。
EventBridge が有効化されていない場合は、「サービスを有効化して権限付与を完了」してください。
[クイック作成] をクリックして [カスタムイベントバスの作成] を行います。
[イベントバス] セクションで、[名前] を設定し、[次のステップ] をクリックしてイベントソースの設定に進みます。
[スキップ] をクリックして、[イベントソース]、[イベントルール]、および [イベントターゲット] の設定をスキップします。

左側のナビゲーションウィンドウで、[イベントバス] をクリックします。作成したイベントバスを見つけ、その名前をクリックして概要ページに移動します。
左側のナビゲーションウィンドウで、[イベントルール] をクリックします。[イベントルール] ページで、[ルールの作成] をクリックして新しいイベントルールを作成します。
このベストプラクティスでは、カスタム EventBridge バスが DataWorks のファイル送信およびファイルデプロイメントのイベントメッセージを受信するように設定されています。以下のセクションでは、デモ設定とコアパラメーターについて説明します。
[基本情報の設定]:カスタムルール名を入力します。
[イベントパターンの設定]
[イベントソースタイプ]:[カスタムイベントソース] を選択します。
[イベントソース]:このパラメーターは空のままにします。
[パターンの内容]:以下のように JSON フォーマットで内容を記述します。この例では、標準モードのワークスペースを使用しています。
説明基本モードのワークスペースの場合、このパラメーターを dataworks:FileChange:DeployFile に設定します。
{ "source": [ "acs.dataworks" ], "type": [ "dataworks:FileChange:CommitFile" ] }source:イベントのプロダクト名識別子を定義します。これは acs.dataworks です。
type:プロダクトのイベントタイプ識別子を定義します。このパラメーターを dataworks:FileChange:CommitFile に設定します。
[イベントパターンのデバッグ]:source と type の値を変更し、イベントをテストします。テストが成功したら、[次へ] をクリックします。

[ターゲットの設定]
[サービスタイプ]:HTTPS または HTTP を選択します。サービスタイプの詳細については、「イベントルールの管理」をご参照ください。
[URL]:カスタムバスからプッシュされたメッセージを受信する URL を入力します。例:
https://server_address:port_number/extensions/consumer。説明デプロイされた拡張機能のサーバー URL を入力してください。
[本文]:[イベント全体] を選択します。
ネットワークタイプ: インターネットを選択します。

ステップ 2:イベント配信チャネルの設定
[開発者バックエンド] タブに移動します。
DataWorks コンソールにログインします。上部のナビゲーションバーで、目的のリージョンを選択します。左側のナビゲーションウィンドウで、 を選択します。表示されたページで、[オープン プラットフォームへ移動] をクリックします。[開発者バックエンド] タブが表示されます。
[開発者バックエンド] ページで、左側のナビゲーションウィンドウの [OpenEvent] をクリックします。表示されたページで、[イベント配信チャネルの追加] をクリックし、ダイアログボックスでパラメーターを設定します。
[イベントメッセージを配信するワークスペース]:作成したワークスペースを選択します。
[EventBridge でイベントメッセージを配信するカスタムイベントバスを指定]:ステップ 1 で作成したイベントバスを選択します。
イベント配信チャネルを保存した後、チャネルを見つけ、[操作] 列の [有効化] をクリックします。

ステップ 3:拡張機能の登録と設定
[開発者バックエンド] ページで、左側のナビゲーションウィンドウの [拡張機能] をクリックします。次に、[拡張機能の登録] をクリックし、ダイアログボックスでパラメーターを設定します。
デプロイ方法:[セルフマネージドサービスでデプロイ] を選択します。
拡張機能を登録します。
[拡張機能名]:カスタム名を入力します。
処理済み拡張ポイント:[ノードコミットの事前イベント] と [ノードデプロイメントの事前イベント] を選択します。
[テスト用ワークスペース]:設定が完了した後、拡張機能が作成されてから送信されるまでの間に、このワークスペースで拡張機能をテストできます。
UI のプロンプトに従って他のパラメーターを設定します。

設定が完了したら、[OK] をクリックして登録した拡張機能を保存します。
拡張機能の [操作] 列で、[送信] をクリックして審査プロセスを開始します。
説明拡張機能は DataWorks プラットフォームによって審査されます。審査には通常 3 営業日かかります。しばらくお待ちください。
作成した拡張機能をテストするには、[テスト用ワークスペース] を設定する必要があります。
拡張機能が承認されたら、[操作] 列の [公開] をクリックして公開します。
[拡張機能の管理] をクリックして ページに移動します。作成した拡張機能を選択し、[有効化] 列で有効にします。
拡張機能の開発と設定
サンプルコード
このコードは、EventBridge からサービスにプッシュされたメッセージを使用してサービスを呼び出します。このコードは、現在の日付と設定された休日およびロックダウン日を比較して、ロックダウン日であるかどうかを判断します。結果は、UpdateIDEEventResult OpenAPI 操作を使用したコールバックを通じて DataWorks に返送されます。
環境:Java 8 および Maven ビルドツール。
package com.aliyun.dataworks.demo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.dataworks.config.Constants;
import com.aliyun.dataworks.config.EventCheckEnum;
import com.aliyun.dataworks.config.ExtensionParamProperties;
import com.aliyun.dataworks.services.DataWorksOpenApiClient;
import com.aliyun.dataworks_public20200518.Client;
import com.aliyun.dataworks_public20200518.models.UpdateIDEEventResultRequest;
import com.aliyun.dataworks_public20200518.models.UpdateIDEEventResultResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.List;
/**
* @author dataworks demo
*/
@RestController
@RequestMapping("/extensions")
public class ExtensionsController {
@Autowired(required = false)
private DataWorksOpenApiClient dataWorksOpenApiClient;
@Autowired
private ExtensionParamProperties extensionParamProperties;
/**
* EventBridge からプッシュされたメッセージを受信します
*
* @param jsonParam
*/
@PostMapping("/consumer")
public void consumerEventBridge(@RequestBody String jsonParam) {
JSONObject jsonObj = JSON.parseObject(jsonParam);
String eventCode = jsonObj.getString(Constants.EVENT_CODE_FILED);
if (Constants.COMMIT_FILE_EVENT_CODE.equals(eventCode)) {
// クライアントを初期化します
Client client = dataWorksOpenApiClient.createClient();
// 現在の時間を取得します
SimpleDateFormat sdf = new SimpleDateFormat(Constants.YYYY_MM_DD);
String now = sdf.format(System.currentTimeMillis());
// 2022年の休日とロックダウン日を取得します
List<String> holidayList = Arrays.asList(extensionParamProperties.getHolidayList().split(","));
// 現在の日付がロックダウン日であるかを確認します
boolean isExists = holidayList.stream().anyMatch(day -> day.equals(now));
// コールバックメソッド
UpdateIDEEventResultRequest updateIDEEventResultRequest = new UpdateIDEEventResultRequest();
updateIDEEventResultRequest.setMessageId(jsonObj.getString("id"));
updateIDEEventResultRequest.setExtensionCode(extensionParamProperties.getExtensionCode());
// ロックダウン日である場合、チェックは失敗します
if (isExists) {
updateIDEEventResultRequest.setCheckResult(EventCheckEnum.FAIL.getCode());
updateIDEEventResultRequest.setCheckResultTip("ロックダウン日にはファイルの送信は許可されていません。");
} else {
// ロックダウン日でない場合、チェックは成功します
updateIDEEventResultRequest.setCheckResult(EventCheckEnum.OK.getCode());
updateIDEEventResultRequest.setCheckResultTip(EventCheckEnum.OK.getName());
}
try {
// コールバックを DataWorks に送信します
UpdateIDEEventResultResponse response = client.updateIDEEventResult(updateIDEEventResultRequest);
// リクエストの一意の ID。トラブルシューティングに使用されます。
System.out.println("response:" + response.getBody().getRequestId());
} catch (Exception e) {
System.out.println("consumerEventBridge error:" + e.getMessage());
throw new RuntimeException(e);
}
} else {
System.out.println("他のイベントのフィルタリングに失敗しました。設定手順を確認してください。");
}
}
}サンプルプロジェクトのデプロイ
環境とプロジェクトの準備
必須環境:Java 8 以降および Maven ビルドツール。
プロジェクトのダウンロードリンク:extension-demo-deploycontroller.zip (30 KB)。
デプロイ方法
ローカルデプロイ:プロジェクトを JAR ファイルにパッケージングします。Java 8 と Maven がインストールされているローカルサーバーまたは Windows マシンで、
java -jar yourapp.jarコマンドを実行してサービスプログラムを実行します。クラウドプラットフォームデプロイ:プロジェクトを JAR ファイルにパッケージングします。デプロイのために、Docker コンテナーや Elastic Compute Service (ECS) インスタンスなどのランタイム環境にファイルをアップロードします。
プロジェクトをダウンロードした後、プロジェクトのルートディレクトリに移動し、パッケージングコマンドを実行してプロジェクトを JAR ファイルにパッケージングします。
mvn clean package -Dmaven.test.skip=true spring-boot:repackageJAR ファイルを実行します:
java -jar target/extension-demo-deploycontroller-1.0.jar
次の図に示すように、プロジェクトは正常に起動します。
ブラウザで http://localhost:8080/index と入力します。"hello world!" が返された場合、アプリケーションは正常にデプロイされています。ネットワーク接続を確立した後、EventBridge からのメッセージをサブスクライブできます。
結果の検証
コードをデプロイし、EventBridge へのネットワーク接続を確立した後、拡張機能が有効になっているワークスペースで検証を実行できます。
