DataWorks のエクステンションを使用すると、カスタムロジックを定義してユーザーの操作を監視できます。たとえば、エクステンションを使用して、不適切な操作をインターセプトしてブロックしたり、通知を送信したり、特定のイベントのプロセスを管理したりできます。このトピックでは、セルフホスト型サービスを使用してエクステンションを開発およびデプロイする方法について説明します。
背景情報
前提条件
メッセージサブスクリプションを有効化する必要があります。セルフホスト型サービスを使用したエクステンションのデプロイは、EventBridge のメッセージ配信機能に依存します。DataWorks のオープンイベントメッセージが EventBridge のイベントバスに送信されるように設定されていることを確認する必要があります。また、このイベントバスからのメッセージが、オンプレミスまたはクラウドにデプロイされたサービスプログラムにルーティングされることも確認する必要があります。
制限事項
-
DataWorks Enterprise Edition のユーザーのみがエクステンションモジュールを使用できます。
-
エクステンションモジュールは、中国 (北京)、中国 (杭州)、中国 (上海)、中国 (張家口)、中国 (深セン)、中国 (成都)、米国 (シリコンバレー)、米国 (バージニア)、ドイツ (フランクフルト)、日本 (東京)、中国 (香港)、およびシンガポールのリージョンで利用できます。
注意事項
-
開発者バックエンドに対する読み取りおよび書き込み権限を持つのは、Open Platform 管理者、テナント管理者、Alibaba Cloud アカウント、および AliyunDataWorksFullAccess ポリシーがアタッチされた RAM ユーザーのみです。権限管理の詳細については、「グローバルモジュールの権限制御」および「RAM ポリシーによるプロダクトレベルおよびコンソールアクセスの管理」をご参照ください。
バージョン制限:DataWorks Enterprise Edition のサブスクリプションが有効期限切れになると、すべてのエクステンションが無効になり、イベントチェックをトリガーできなくなります。トリガーされたが最終状態に達していないチェックは、自動的にパスします。
ノード制限:機械学習 (PAI) ノード、do-while ノード、for-each ノードなど、内部ノードを含む複合ノードに対してチェックがトリガーされた場合、後続の操作に進む前にすべての内部ノードがチェックにパスする必要があります。
トリガーの説明:複数のエクステンションを同じエクステンションポイントイベントに関連付けることができます。これは、単一のイベントが複数のエクステンションをトリガーできることを意味します。
処理フロー
以下は、セルフホスト型サービスでデプロイされたエクステンションプログラムを使用して EventBridge からのメッセージを消費する基本的なフローです:
エクステンションポイントイベントがトリガーされると、関連プロセスは チェック中 状態になり、エクステンションのコールバック API からの結果を待ちます。DataWorks はその結果に基づいてプロセスをブロックするかどうかを決定します。
ユーザー側
セルフホスト型サービスを使用して DataWorks にエクステンションをデプロイする前に、エクステンションを開発し、クラウドまたはオンプレミスにデプロイする必要があります。「付録:DataWorks Open Platform サンプルコードライブラリ」を参照してプロジェクトコードを初期化し、GitHub から Open Platform サンプルコード を取得できます。エクステンションを開発する際は、イベントバスからのメッセージが最終的にルーティングされるサービスの種類に基づいて開発とデプロイを行う必要があります。
ステップ 1:エクステンションの依存関係の設定
エクステンションを開発する際、以下の依存関係を 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>ステップ 2:エクステンションコードの開発
EventBridge のイベントバスによってルーティングされたメッセージは、オンプレミスまたはクラウドにデプロイされたサービスにプッシュされます。このサービスは、イベントバスによってプッシュされた DataWorks メッセージを受信し、特定の DataWorks API を使用して処理結果とともにコールバックを送信します。
プログラムコードを開発します。
メッセージ内容の解析
DataWorks からプッシュされるイベントメッセージのフォーマットについては、「付録:DataWorks から EventBridge に送信されるメッセージのフォーマット」をご参照ください。メッセージフォーマットでは、
dataに特定のメッセージ内容が含まれます。開発中、data.eventCodeフィールドを使用してメッセージタイプを識別し、idフィールドを使用してメッセージの詳細を取得できます。説明OpenEvent は EventBridge を使用して DataWorks のイベントメッセージを配信します。エクステンションを開発する前に、EventBridge で DataWorks のメッセージをサブスクライブする必要があります。詳細については、「メッセージサブスクリプションの有効化」をご参照ください。
処理ロジックの記述
必要に応じて、イベントバスによってプッシュされたメッセージを処理します。エクステンション開発中に、以下のメソッドを使用して開発効率とアプリケーションのパフォーマンスを向上させることができます。
extension.project.disabledなどの高度な機能:エクステンションパラメーターの設定を使用して、特定のワークスペースでエクステンションを無効にします。Data Studio モジュールに関連するエクステンションポイントを処理する際、GetIDEEventDetail API を呼び出して、
MessageIdに基づいてエクステンションポイントイベントがトリガーされた時点のデータスナップショットを取得できます。
説明MessageIdは、メッセージ内のidフィールドに対応します。詳細については、「付録:DataWorks から EventBridge に送信されるメッセージのフォーマット」をご参照ください。処理結果を DataWorks に返す
エクステンションサービスは、OpenAPI を介してエクステンションポイントの処理結果を DataWorks に返す必要があります。コールバックを行う際は、エクステンションポイントイベントが発生したモジュールに基づいて、適切な OpenAPI を選択する必要があります。
DataStudio のエクステンションポイントイベント:UpdateIDEEventResult API を使用して、処理結果を含むコールバックを送信します。
オペレーションセンターのエクステンションポイントイベント:UpdateWorkbenchEventResult API を使用して、処理結果を含むコールバックを送信します。
その他のモジュールのエクステンションポイントイベント:CallbackExtension API を使用して、処理結果を含むコールバックを送信します。
コールバック API は、現在のサービスのエクステンション (ExtensionCode)、イベントメッセージ (MessageId)、およびメッセージ処理結果 (CheckResult) を返します。
CheckResult の値:
OK:エクステンションはこのエクステンションポイントイベントのチェックにパスしました。FAIL:エクステンションはこのエクステンションポイントイベントのチェックに失敗しました。後続のプログラム実行への影響を防ぐために、エラーを速やかに確認し、対処する必要があります。WARN:エクステンションはこのエクステンションポイントイベントのチェックにパスしましたが、警告があります。
ExtensionCode:このコードは、後述のセクションで説明するようにエクステンションを登録した後、DataWorks のエクステンションリストページから取得できます。
MessageId:メッセージ内の ID フィールドに対応します。詳細については、「DataWorks から EventBridge に送信されるメッセージのフォーマット」をご参照ください。
コードの開発が完了したら、プログラムを実行可能な
.jarファイルにパッケージ化して、後続のサービスデプロイに備えます。
ステップ 3:エクステンションのデプロイ
エクステンションコードを開発およびデバッグした後、パッケージ化されたコードを Alibaba Cloud Elastic Compute Service (ECS) または他のサービスプロバイダー上のアプリケーションサービスとしてデプロイできます。
DataWorks プロダクト側
コード開発が完了したら、DataWorks コンソールでエクステンションを登録および管理できます。
ステップ 1:エクステンションの登録
エクステンションを開発して使用する前に、DataWorks に登録して、後続の開発に対応する Extension Code を取得する必要があります。以下にエクステンションを登録する手順を説明します。
開発者バックエンドタブに移動します。
DataWorks コンソールにログインします。上部のナビゲーションバーで、目的のリージョンを選択します。左側のナビゲーションウィンドウで、を選択します。表示されたページで、オープンプラットフォームへ移動をクリックします。開発者バックエンドタブが表示されます。
エクステンションを登録します。
左側のナビゲーションウィンドウで、エクステンションをクリックしてエクステンションページを開きます。
をクリックします。セルフホスト型サービスでデプロイを選択し、エクステンションの詳細を設定します。
エクステンションの登録を完了します。
OK をクリックして完了します。
説明登録が成功すると、エクステンションリストでエクステンションを表示できます。
ステップ 2:エクステンションの公開
エクステンションが開発、デプロイ、および DataWorks に登録された後、テスト、承認、および公開プロセスを完了する必要があります。その後、エクステンションのオーナー以外の管理者は、管理センターでエクステンションを有効にできます。詳細については、「エクステンションの適用」をご参照ください。
付録:DataWorks から EventBridge に送信されるメッセージのフォーマット
以下の内容では、`data` フィールドに DataWorks から EventBridge にプッシュされるコンテンツが含まれています。EventBridge はこのベースに他の情報を追加します。
{
"datacontenttype": "application/json;charset=utf-8", // data パラメーターのコンテンツのフォーマット。datacontenttype は application/json フォーマットのみをサポートします。
"aliyunaccountid": "1111",// Alibaba Cloud アカウントの ID。
"aliyunpublishtime": "2024-07-10T07:25:34.915Z",// EventBridge がイベントを受信した時刻。
"data": {
"tenantId": 28378****10656,// テナント ID。各 Alibaba Cloud アカウントは DataWorks のテナントに対応し、各テナントには独自の ID があります。この値は、DataWorks Data Studio の右上隅にあるユーザー情報セクションで確認できます。
"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 メソッドを使用したエクステンションの開発とデプロイ」をご参照ください。