DataWorks では、拡張機能を使用してユーザー操作を監視するためのカスタムロジックを定義できます。これにより、不適切なアクションをインターセプトしてブロックしたり、特定のイベントに対して通知を送信したり、ワークフローを管理したりできます。このトピックでは、Function Compute を使用して拡張機能を開発し、デプロイする方法について説明します。
背景情報
Function Compute は、イベント駆動型のフルマネージドコンピューティングサービスです。Function Compute の実行環境に拡張機能をデプロイすると、DataWorks は拡張ポイントのイベントメッセージを ExtensionRequest クラスにプッシュします。拡張機能のコードでは、PojoRequestHandler インターフェイスの handleRequest メソッドを実装することで、ExtensionRequest オブジェクトを構築して拡張ポイントのイベントメッセージと DataWorks からのコンテキスト (Context) を受信し、拡張機能の処理ロジックを定義し、ExtensionResponse クラスを使用して処理結果を返すことができます。DataWorks は ExtensionResponse から処理結果を自動的に取得し、現在の拡張ポイントの操作フローをブロックするかどうかを決定します。
制限事項
-
DataWorks Enterprise Edition のユーザーのみが拡張モジュールを使用できます。
-
拡張モジュールは、中国 (北京)、中国 (杭州)、中国 (上海)、中国 (張家口)、中国 (深セン)、中国 (成都)、米国 (シリコンバレー)、米国 (バージニア)、ドイツ (フランクフルト)、日本 (東京)、中国 (香港)、シンガポールの各リージョンで利用できます。
注意事項
-
[オープンプラットフォーム管理者]、[テナント管理者]、Alibaba Cloud アカウント、および [AliyunDataWorksFullAccess] ポリシーがアタッチされている RAM ユーザーのみが、開発者バックエンドに対する読み取りおよび書き込み権限を持ちます。権限管理の詳細については、「グローバルサービスの権限コントロール」および「サービスおよびコンソールの権限に関する RAM ポリシー」をご参照ください。
-
バージョンの制限:DataWorks Enterprise Edition のサブスクリプションが有効期限切れになると、すべての拡張機能が非アクティブになり、イベントチェックのためにトリガーされなくなります。トリガーされたものの、まだ最終状態に達していないチェックはすべて自動的にパスされます。
-
ノードの制限:Platform for AI ノード、do-while ノード、for-each ノードなどの内部ノードを含む複合ノードがチェックをトリガーした場合、後続の操作に進む前に、すべての内部ノードがチェックに合格する必要があります。
-
トリガー:同じ拡張ポイントイベントに複数の拡張機能を関連付けることができます。つまり、1 つのイベントで複数の拡張機能がトリガーされる可能性があります。
-
イベントの制限:Function Compute を使用してデプロイされた拡張機能は、現在、データダウンロードの事前イベント、アセット公開・非公開の事前イベント、およびデータアップロードの事前イベントをサポートしています。
仕組み
以下の図は、Function Compute を使用して開発およびデプロイされた拡張機能が拡張ポイントイベントを処理する基本的なワークフローを示しています。
拡張ポイントイベントがトリガーされると、関連するプロセスは チェック中 の状態になり、拡張機能が API コールバックを介して結果を返すのを待ちます。プロセスは、拡張機能が結果を DataWorks に送信するまでこの状態を維持します。返された結果に基づいて、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パラメーターを使用して、特定のワークスペースで拡張機能を無効にすることができます。 -
DataStudio モジュールに関連する拡張ポイントを処理する場合、GetIDEEventDetail 操作を呼び出し、
MessageIdを使用して拡張ポイントイベントがトリガーされた時点のデータスナップショットを取得します。
説明MessageIdパラメーターは、イベントメッセージのidフィールドに対応します。詳細については、「付録:DataWorks から EventBridge に送信されるメッセージのフォーマット」をご参照ください。処理結果
ExtensionResponseの結果をパッケージングする際には、CheckResultを指定する必要があります。DataWorks は最終的なCheckResultを自動的に読み取り、プロセスが失敗したかどうかを判断します。-
OK:この拡張ポイントイベントに対する拡張機能のチェックは合格しました。 -
FAIL:この拡張ポイントイベントに対する拡張機能のチェックは失敗しました。後続のプロセスが期待どおりに実行されるように、エラーを調査して解決する必要があります。 -
WARN:この拡張ポイントイベントに対する拡張機能のチェックは合格しましたが、警告が生成されました。
サンプルコードファイル fc_dataworks_demo01-1.0-SNAPSHOT.jar をダウンロードし、Function Compute にアップロードして検証できます。以下のコードで詳細を説明します:
-
-
コードを開発した後、プログラムを Function Compute で実行可能な
.jarまたは.zipファイルにパッケージングします。コードエディタでコマンドラインウィンドウを開き、ルートディレクトリに移動して、
mvn clean packageコマンドを実行してコードをパッケージングします。-
コンパイルが失敗した場合は、出力されたエラーメッセージに基づいてコードを調整してください。
-
コンパイルが成功した場合、コンパイルされた JAR ファイルはプロジェクトの target ディレクトリにあります。ファイル名は、pom.xml ファイルの artifactId および version フィールドに基づいて付けられます (例:java-example-1.0-SNAPSHOT.jar)。
説明macOS および Linux では、パッケージングする前にコードファイルに読み取りおよび実行権限があることを確認してください。
-
Function Compute のタスク
ステップ 1:拡張機能のデプロイ
-
Function Compute コンソール 2.0 にログインし、タスクページに移動します。
-
[関数の作成] をクリックしてサービスと必須の関数を作成し、拡張をデプロイします。開発された拡張からの特定のイベントメッセージは、このサービスに直接送信されます。詳細については、「サービスを作成する」および「関数を作成する」をご参照ください。[関数の作成] パネルで、[組み込みランタイムで作成] を選択し、ハンドラタイプに [イベントリクエストの処理] を選択し、コードのアップロード方法に [JAR パッケージ経由でコードをアップロード] を選択してから、準備したコードパッケージをアップロードします。
-
コードに基づいて実行環境を選択します。 ステップ 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 コンソールにログインします。 対象のリージョンで、左側のナビゲーションウィンドウから をクリックします。 入力 オープンプラットフォーム をクリックして、[デベロッパーバックエンド] ページを開きます。
-
拡張機能を登録します。
-
左側のナビゲーションウィンドウで、Extensions をクリックして拡張機能ページに移動します。
-
をクリックし、Deploy Based on Function Compute を選択して、拡張機能情報を設定します。
要件に基づいてパラメーターを設定できます。次の表にパラメーターを説明します。
-
-
登録を完了します。
OK をクリックします。登録が完了すると、List of Extensions で拡張機能を表示できます。
ステップ 2:拡張機能の公開
DataWorks で拡張機能を開発、デプロイ、登録した後、テスト、承認、公開する必要があります。公開されると、拡張機能のオーナー以外の管理者が管理センターで拡張機能を有効にできます。詳細については、「拡張機能の適用」をご参照ください。
付録:DataWorks イベントメッセージのフォーマット
以下のコードは、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 があります。この ID は DataStudio の右上隅にあるユーザー情報セクションで確認できます。
"eventCode": "xxxx"//
},
"messageId": "52d44ee7-b51f-4d4d-afeb-*******" // イベント ID。これはイベントの一意の識別子です。
}
messageBody フィールドの内容はメッセージタイプによって異なります。イベントメッセージの詳細については、「開発者リファレンス:イベントリストとメッセージフォーマット」をご参照ください。
関連ドキュメント
-
Function Compute の詳細については、「Function Compute とは」をご参照ください。
-
自己管理型サービスを使用して拡張機能をデプロイすることもできます。詳細については、「自己管理型サービスを使用した拡張機能の開発とデプロイ」をご参照ください。