DataWorks では、カスタム拡張機能を作成してユーザー操作をモニターできます。例えば、不適切な操作をインターセプトしてブロックしたり、特定のイベントに対して通知を送信したり、プロセスを管理したりできます。このトピックでは、Function Compute を使用して拡張機能を開発およびデプロイする方法について説明します。
背景情報
Function Compute は、イベント駆動型のフルマネージドコンピューティングサービスです。拡張機能を Function Compute の実行環境にデプロイできます。DataWorks は、拡張ポイントのイベントメッセージを ExtensionRequest クラスにプッシュします。拡張機能のコードでは、handleRequest メソッドの PojoRequestHandler インターフェイスを実装できます。これにより、ExtensionRequest オブジェクトを構築して、DataWorks からのイベントメッセージとコンテキスト (Context) を受信できます。その後、拡張機能の処理ロジックを定義し、ExtensionResponse クラスを使用して結果を返します。DataWorks は、ExtensionResponse クラスから結果を自動的に取得し、現在の操作をブロックするかどうかを判断します。
制限事項
-
DataWorks Enterprise Edition のユーザーのみが拡張機能モジュールを使用できます。
-
拡張機能モジュールは、次のリージョンで利用できます:中国 (北京)、中国 (杭州)、中国 (上海)、中国 (張家口)、中国 (深セン)、中国 (成都)、米国 (シリコンバレー)、米国 (バージニア)、ドイツ (フランクフルト)、日本 (東京)、中国 (香港)、シンガポール。
注意事項
-
オープンプラットフォーム管理者、テナント管理者、Alibaba Cloud アカウント、および AliyunDataWorksFullAccess ポリシーがアタッチされた RAM ユーザーのみが、開発者バックエンドに対する読み取り/書き込み権限を持ちます。権限管理の詳細については、「グローバルモジュールの権限制御」および「RAM ポリシーによるプロダクトレベルおよびコンソールアクセスの管理」をご参照ください。
バージョン制限:DataWorks Enterprise Edition のサブスクリプションが有効期限切れになると、すべての拡張機能が無効になり、イベントチェックをトリガーできなくなります。トリガーされたが最終状態に達していないチェックは、自動的にパスします。
ノード制限:機械学習 (PAI) ノード、do-while ノード、for-each ノードなどの内部ノードを含む複合ノードに対してチェックがトリガーされた場合、後続の操作に進むには、すべての内部ノードがチェックに合格する必要があります。
トリガーの説明:複数の拡張機能を同じ拡張ポイントイベントに関連付けることができます。つまり、1 つのイベントで複数の拡張機能がトリガーされる可能性があります。
イベント制限:Function Compute を使用してデプロイされた拡張機能は、現在データダウンロードの事前イベントのみをサポートしています。
プロセス
次の図は、Function Compute を使用して開発およびデプロイされた拡張機能が拡張ポイントイベントを処理する基本的なプロセスを示しています。
拡張ポイントイベントがトリガーされると、関連するプロセスは チェック中 状態になり、拡張機能のコールバック API からの結果を待ちます。DataWorks はその結果に基づいてプロセスをブロックするかどうかを決定します。
ユーザー側
Function Compute 拡張機能をデプロイする前に、拡張機能を開発する必要があります。fc-java-core ライブラリを使用してハンドラを実行できます。サンプルコードパッケージが利用可能です:fc_dataworks_demo01-1.0-SNAPSHOT.jar。詳細については、「イベントハンドラ」をご参照ください。
ステップ 1: 拡張機能の依存関係の設定
拡張機能を開発する際に、次の依存関係を pom.xml ファイルに追加します。
DataWorks 依存関係ライブラリ
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dataworks_public20200518</artifactId>
<version>5.6.0</version>
</dependency>Function Compute 依存関係ライブラリ
<!-- https://mvnrepository.com/artifact/com.aliyun.fc.runtime/fc-java-core -->
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-core</artifactId>
<version>1.4.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.aliyun.fc.runtime/fc-java-event -->
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-event</artifactId>
<version>1.2.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>Apache Maven Shade プラグインまたは Apache Maven Assembly プラグインを使用できます。上記の例では、Apache Maven Shade プラグインを使用しています。
ステップ 2: 拡張機能コードの開発
Function Compute で拡張機能を開発するには、PojoRequestHandler インターフェイスを使用し、その handleRequest メソッドを実装します。このメソッドは ExtensionRequest オブジェクトと Context を受信します。その後、処理ロジックを定義し、ExtensionResponse クラスを使用して結果を返します。
コードを開発する際は、次の点に注意してください:
メッセージ内容の解析
DataWorks によってプッシュされるイベントメッセージのフォーマットの詳細については、「開発リファレンス:イベントリストとメッセージフォーマット」をご参照ください。イベントメッセージでは、
messageBodyフィールドにメッセージの内容が含まれます。開発中に、messageBody.eventCodeフィールドを使用してメッセージタイプを識別し、messageIdフィールドを使用してメッセージの詳細を取得できます。処理ロジックの記述
特定のメッセージタイプを処理するロジックを記述します。拡張機能の開発中に、次のメソッドを使用して開発効率とアプリケーションのパフォーマンスを向上させることができます:
extension.project.disabledなどの高度な機能:拡張機能パラメーターの設定を使用して、特定のワークスペースで拡張機能を無効にします。Data Studio モジュールに関連する拡張ポイントを処理する場合、GetIDEEventDetail API を呼び出して、
MessageIdに基づいて拡張ポイントイベントがトリガーされた時点のデータスナップショットを取得できます。
説明MessageIdは、メッセージ内のidフィールドに対応します。詳細については、「付録:DataWorks から EventBridge に送信されるメッセージのフォーマット」をご参照ください。処理結果を DataWorks に返す
結果を
ExtensionResponseオブジェクトにカプセル化する際、CheckResultフィールドで処理結果を指定する必要があります。DataWorks は、最終的なCheckResultを自動的に読み取り、操作が失敗したかどうかを判断します。OK:拡張機能はこの拡張ポイントイベントのチェックに合格しました。FAIL:拡張機能はこの拡張ポイントイベントのチェックに失敗しました。後続のプログラム実行への影響を防ぐために、エラーをタイムリーに確認し、処理する必要があります。WARN:拡張機能はこの拡張ポイントイベントのチェックに合格しましたが、警告があります。
サンプルコードパッケージ fc_dataworks_demo01-1.0-SNAPSHOT.jar をダウンロードし、検証とテストのために Function Compute にアップロードできます。次のセクションにコードを示します:
コードを開発した後、プログラムを実行可能な
.jarまたは.zipパッケージにパッケージングし、後続の Function Compute での設定に備えます。コードエディタのコマンドラインウィンドウを開き、ルートディレクトリに切り替えて、
mvn clean packageコマンドを実行してコードをパッケージングします。コンパイルが失敗した場合は、出力されたエラーメッセージに基づいてコードを修正します。
コンパイルが成功した場合、コンパイルされた JAR パッケージはプロジェクトフォルダの target ディレクトリにあります。パッケージ名は、pom.xml ファイルの artifactId および version フィールドに基づいて java-example-1.0-SNAPSHOT.jar となります。
説明macOS および Linux オペレーティングシステムの場合、パッケージングする前にコードファイルに読み取りおよび実行権限があることを確認してください。
Function Compute 側
ステップ 1: 拡張機能のデプロイ
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで [タスク] をクリックして、[タスク] ページに移動します。
関数の作成 をクリックして Function Compute サービスと必要な関数を作成し、拡張機能をデプロイします。その後、拡張機能は特定のイベントメッセージを作成されたサービスに直接送信します。詳細については、「サービスの作成」および「関数の作成」をご参照ください。次の図は、関数の設定方法を示しています。

コードに基づいてランタイム環境を選択します。ステップ 1 で提供されたサンプルパッケージ
fc_dataworks_demo01-1.0-SNAPSHOT.jarを使用する場合、[ランタイム] パラメーターを [Java 8] に設定します。これを行うには、fc_dataworks_demo01-1.0-SNAPSHOT.jarパッケージをローカルマシンにダウンロードし、コードパッケージ にアップロードする必要があります。必要に応じてパラメーターを設定できます。関数の操作の詳細については、「関数の管理」をご参照ください。
関数エントリポイントの変更
Function Compute コンソールで、ハンドラ (関数エントリポイント) を設定できます。Java 関数の場合、ハンドラを
[パッケージ名].[クラス名]::[メソッド名]のフォーマットで設定します。例:パッケージ名:
exampleクラス:
HelloFCメソッド:
handleRequest
ハンドラは
example.HelloFC::handleRequestとして設定できます。説明Function Compute のデフォルトのハンドラは
example.App::handleRequestです。作成したコードに基づいてハンドラを修正する必要があります。詳細については、「ハンドラ」をご参照ください。
ステップ 2: 関数のテスト
登録が完了したら、関数詳細ページに移動し、関数コード タブを選択して 関数のテスト をクリックします。実行成功 メッセージが表示されたら、DataWorks に戻って拡張機能を登録できます。
DataWorks 側
ステップ 1: 拡張機能の登録
Function Compute で拡張機能をデプロイした後、次の手順で DataWorks に登録する必要があります:
[開発者バックエンド] タブに移動します。
DataWorks コンソールにログインします。上部のナビゲーションバーで、目的のリージョンを選択します。左側のナビゲーションウィンドウで、 を選択します。表示されたページで、オープンプラットフォームへ移動 をクリックします。開発者バックエンド タブが表示されます。
拡張機能を登録します。
左側のナビゲーションウィンドウで、拡張機能 をクリックします。
をクリックし、Function Compute でデプロイ を選択して、拡張機能を設定します。
必要に応じてパラメーターを設定できます。次の表にパラメーターを示します。
拡張機能の登録を完了します。
OK をクリックして拡張機能を登録します。拡張機能は 拡張機能リスト に表示されます。
ステップ 2: 拡張機能の公開
拡張機能が開発、デプロイ、および DataWorks に登録された後、テスト、承認、および公開プロセスを完了する必要があります。その後、拡張機能のオーナー以外の管理者が管理センターで拡張機能を有効にできます。詳細については、「拡張機能の適用」をご参照ください。
付録: DataWorks から Function Compute に送信されるメッセージのフォーマット
次のコードは、Function Compute のすべてのメッセージタイプの一般的なフォーマットを示しています。`messageBody` フィールドには、DataWorks イベントメッセージの詳細が含まれます。このフィールドの内容はメッセージタイプによって異なります。
{
"blockBusiness": true,
"eventCategoryType": "resources-download",// イベントカテゴリ
"eventType": "upload-data-to-table",// イベントタイプ
"extensionBizId": "job_6603643923728775070",
"messageBody": {
// メッセージの内容はメッセージタイプによって異なります。以下はメッセージ内の 2 つの固定フィールドです。
"tenantId": 28378****10656,// テナント ID。各 Alibaba Cloud アカウントは DataWorks のテナントに対応し、各テナントには一意の ID があります。この値は、DataWorks のデータ開発ページ右上のユーザー情報セクションで確認できます。
"eventCode": "xxxx"//
},
"messageId": "52d44ee7-b51f-4d4d-afeb-*******"// イベント ID。イベントを識別する一意の値。
}messageBody フィールドの内容はメッセージタイプによって異なります。イベントメッセージの内容の詳細については、「開発リファレンス:イベントリストとメッセージフォーマット」をご参照ください。
参考資料
Function Compute の詳細については、「Function Compute とは」をご参照ください。
自己管理型サービスを使用して拡張機能をデプロイすることもできます。詳細については、「自己管理型サービスに基づく拡張機能の開発とデプロイ」をご参照ください。