すべてのプロダクト
Search
ドキュメントセンター

DataWorks:HTTP トリガーノード

最終更新日:Mar 25, 2025

外部スケジューリングシステムを使用していて、スケジューリングシステム内のノードが実行された後に DataWorks ノードをトリガーする場合、DataWorks の HTTP トリガーノードを使用して DataWorks ノードをトリガーできます。このトピックでは、外部スケジューリングシステムを使用して DataWorks ノードをトリガーする場合に、DataWorks の HTTP トリガーノードを使用する方法について説明します。また、HTTP トリガーノードを使用する際の注意事項についても説明します。

はじめに

HTTP トリガーノードは特別な仮想ノードです。DataWorks の RunTriggerNode オペレーションを呼び出して、HTTP トリガーノードとその子孫ノードをスケジュールできます。

HTTP トリガーノードは、外部システムと DataWorks スケジューリングシステム間の通信によく使用されます。

HTTP トリガーノードを使用すると、外部スケジューリングシステムのタスクが完了した後に DataWorks タスクをトリガーできます。外部スケジューリングシステムは、次の典型的なシナリオでノードをトリガーするために使用されます。

  • HTTP トリガーノードには、ワークフローのルートノード以外に先祖ノードがありません。

    HTTP トリガーノードを作成した後、外部スケジューリングシステムでトリガーを設定する必要があります。次に、DataWorks の各ノードのスケジューリングプロパティを設定する必要があります。詳細については、「HTTP トリガーノード」をご参照ください。

  • HTTP トリガーノードには先祖ノードがあります。

    • HTTP トリガーノードを作成した後、外部スケジューリングシステムでトリガーを設定する必要があります。次に、DataWorks の各ノードのスケジューリングプロパティを設定する必要があります。

    • デフォルトでは、HTTP トリガーノードはワークフローのルートノードを先祖ノードとして使用します。HTTP トリガーノードの先祖ノードは、必要なノードに手動で変更する必要があります。

    • HTTP トリガーノードは、HTTP トリガーノードの先祖ノードが想定どおりに実行され、HTTP トリガーノードが外部スケジューリングシステムからスケジューリング命令を受信した後にのみ、子孫ノードをトリガーできます。

      HTTP トリガーノードの先祖ノードの実行が完了する前に、HTTP トリガーノードが外部スケジューリングシステムからスケジューリング命令を受信した場合、HTTP トリガーノードは子孫ノードをトリガーしません。 DataWorks スケジューリングシステムは、外部スケジューリングシステムからのスケジューリング命令を保持し、先祖ノードの実行が完了した後に、子孫ノードをトリガーするように HTTP トリガーノードをスケジュールします。

      説明

      外部スケジューリングシステムからのスケジューリング命令は 24 時間のみ保持できます。先祖ノードの実行が 24 時間以内に完了しない場合、外部スケジューリングシステムからのスケジューリング命令は無効になり、破棄されます。

前提条件

  • 使用する RAM ユーザーがワークスペースに追加されていること。

    RAM ユーザーを使用してタスクを開発する場合は、RAM ユーザーをメンバーとしてワークスペースに追加し、[開発] ロールまたは [ワークスペース管理者] ロールを RAM ユーザーに割り当てる必要があります。ワークスペース管理者ロールには、必要以上の権限があります。ワークスペース管理者ロールを割り当てる場合は注意してください。メンバーを追加してロールを割り当てる方法の詳細については、「ワークスペースメンバーを追加し、ロールを割り当てる」をご参照ください。

  • サーバーレスリソースグループがワークスペースに関連付けられていること。詳細については、「サーバーレスリソースグループを使用する」ディレクトリのトピックをご参照ください。

  • HTTP トリガーノードでタスクを開発する前に、HTTP トリガーノードが作成されていること。詳細については、「タスクノードを作成する」をご参照ください。

制限

  • HTTP トリガーノードは、DataWorks Enterprise Edition 以後のエディションでのみサポートされています。 DataWorks のエディションについては、「DataWorks エディション間の違い」をご参照ください。

  • HTTP トリガーノードの場合、インスタンス生成モードパラメーターは翌日だけに設定でき、データのバックフィル時に生成されるデータバックフィルインスタンスはトリガーできません。したがって、HTTP トリガーノードは、本番環境にデプロイされた翌日に、外部スケジューリングシステムによってトリガーできます。

  • HTTP トリガーノードは、他の計算ノードをトリガーするノードとしてのみ機能します。 HTTP トリガーノードを計算ノードとして使用することはできません。トリガーする必要のあるノードを、HTTP トリガーノードの子孫ノードとして設定する必要があります。

  • ワークフローを作成して実行した後、HTTP トリガーノードを再実行する場合は、外部スケジューリングシステムを有効にして、スケジューリング命令を再送信する必要があります。 HTTP トリガーノードを再実行しても、成功状態にある子孫ノードの実行はトリガーされません。

  • ワークフローを作成して実行した後、一定期間内に HTTP トリガーノードの子孫ノードの実行結果を取得する場合は、子孫ノードのデータをバックフィルする必要があります。詳細については、「データをバックフィルし、データバックフィルインスタンスを表示する(新バージョン)」をご参照ください。外部スケジューリングシステムは、データをバックフィルするためにスケジューリング命令を送信する必要はありません。代わりに、HTTP トリガーノードは、子孫ノードのデータバックフィル操作を直接トリガーします。

HTTP トリガーノードでタスクを開発する

説明

HTTP トリガーノードは、次の要件が満たされている場合にのみ実行できます。

  • HTTP トリガーノードに対して自動トリガーインスタンスが生成されます。インスタンスは、オペレーションセンターの [自動トリガーインスタンス] ページにあります。 RunTriggerNode オペレーションが正常に呼び出されてインスタンスが実行されるまで、インスタンスは待機状態です。 HTTP トリガーノードの子孫ノードは、RunTriggerNode オペレーションが想定どおりに呼び出されて HTTP トリガーノード用に生成されたインスタンスが実行されるまでブロックされます。

  • HTTP トリガーノードが依存するすべての先祖ノードが想定どおりに実行されていること。先祖ノードのステータスは成功です。

  • HTTP トリガーノード用に生成された自動トリガーインスタンスのスケジュール時刻が到着していること。

  • HTTP トリガーノードの実行時に、十分なスケジューリングリソースが使用可能であること。

  • HTTP トリガーノードのステータスがフリーズではないこと。

  • HTTP トリガーノードは、保留中の状態の場合にのみトリガーできます。 HTTP トリガーノードがトリガーされると、再度トリガーすることはできません。

HTTP トリガーノードのスケジューリングプロパティを設定する

HTTP トリガーノードを開発した後、HTTP トリガーノードのスケジューリングプロパティを設定します。詳細については、「スケジューリング設定」をご参照ください。

説明

デフォルトでは、HTTP トリガーノードはワークフローのルートノードを先祖ノードとして使用します。 HTTP トリガーノードの先祖ノードは、必要なノードに手動で変更する必要があります。

HTTP トリガーノードをコミットしてデプロイする

  1. ノードコードとスケジューリング設定が構成されたら、HTTP トリガーノードを本番環境にデプロイします。詳細については、「ノードをデプロイする」をご参照ください。

  2. デプロイメントが完了したら、[オペレーションセンター][自動トリガーノード] ページに移動して、デプロイされたノードを表示し、ノードで O&M 操作を実行します。システムは、設定したスケジューリングプロパティに基づいて、ノードを定期的に実行します。詳細については、「オペレーションセンターの概要」をご参照ください。

外部スケジューリングシステムでトリガーを設定する

Alibaba Cloud SDK for Java または Python を使用して、外部スケジューリングシステムでトリガーを設定するか、API オペレーションを呼び出して HTTP トリガーノードを実行できます。

Alibaba Cloud SDK for Java

  1. Alibaba Cloud SDK for Java をインストールします。詳細については、「Alibaba Cloud SDK V1.0 for Java を使用する」をご参照ください。

    DataWorks SDK for Java を使用するには、次の Project Object Model(POM)設定を指定します。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>aliyun-java-sdk-dataworks-public</artifactId>
      <version>3.4.2</version>
    </dependency>
  2. 次の図に示すサンプルコードを使用して、コード内のパラメーターを設定します。

    RunTriggerNode オペレーションのデバッグページに移動し、[SDK サンプルコード] タブで完全なサンプルコードを表示できます。

    // このファイルは自動生成されています。編集しないでください。
    package com.aliyun.sample;
    
    import com.aliyun.tea.*;
    
    public class Sample {
    
        /**
         * <b>説明</b> :
         * <p>AccessKey ペアを使用してクライアントを初期化します。</p>
         * @return Client
         * 
         * @throws Exception
         */
        public static com.aliyun.dataworks_public20200518.Client createClient() throws Exception {
            // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用にのみ提供されています。
            // セキュリティを強化するために、 セキュリティトークンサービス (STS) によって発行された一時的なアクセス認証情報を使用することをお勧めします。詳細については、https://www.alibabacloud.com/help/ja/sdk/developer-reference/v2-manage-access-credentials を参照してください。
            com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                    // 必須。 ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                    .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                    // 必須。 ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                    .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            // エンドポイントの詳細については、https://api.aliyun.com/product/dataworks-public を参照してください。
            config.endpoint = "dataworks.cn-shanghai.aliyuncs.com";
            return new com.aliyun.dataworks_public20200518.Client(config);
        }
    
        public static void main(String[] args_) throws Exception {
            java.util.List<String> args = java.util.Arrays.asList(args_);
            com.aliyun.dataworks_public20200518.Client client = Sample.createClient();
            com.aliyun.dataworks_public20200518.models.RunTriggerNodeRequest runTriggerNodeRequest = new com.aliyun.dataworks_public20200518.models.RunTriggerNodeRequest();
            com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
            try {
                // 必要に応じて、API オペレーションのレスポンスを表示するための独自のコードを記述してください。
                client.runTriggerNodeWithOptions(runTriggerNodeRequest, runtime);
            } catch (TeaException error) {
                // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
                // エラーメッセージ。
                System.out.println(error.getMessage());
                // トラブルシューティング用の URL。
                System.out.println(error.getData().get("Recommend"));
                com.aliyun.teautil.Common.assertAsString(error.message);
            } catch (Exception _error) {
                TeaException error = new TeaException(_error.getMessage(), _error);
                // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
                // エラーメッセージ。
                System.out.println(error.getMessage());
                // トラブルシューティング用の URL。
                System.out.println(error.getData().get("Recommend"));
                com.aliyun.teautil.Common.assertAsString(error.message);
            }        
        }
    }
    

Alibaba Cloud SDK for Python

  1. Alibaba Cloud SDK for Python をインストールします。詳細については、「SDK の依存関係を統合する」をご参照ください。

    次のコマンドを実行して、DataWorks SDK for Python をインストールします。

    pip install aliyun-python-sdk-dataworks-public==2.1.2
  2. 次の図に示すサンプルコードを使用して、コード内のパラメーターを設定します。

    RunTriggerNode オペレーションのデバッグページに移動し、[SDK サンプルコード] タブで完全なサンプルコードを表示できます。

    # -*- coding: utf-8 -*-
    # このファイルは自動生成されています。編集しないでください。
    import os
    import sys
    
    from typing import List
    
    from alibabacloud_dataworks_public20200518.client import Client as dataworks_public20200518Client
    from alibabacloud_tea_openapi import models as open_api_models
    from alibabacloud_dataworks_public20200518 import models as dataworks_public_20200518_models
    from alibabacloud_tea_util import models as util_models
    from alibabacloud_tea_util.client import Client as UtilClient
    
    
    class Sample:
        def __init__(self):
            pass
    
        @staticmethod
        def create_client() -> dataworks_public20200518Client:
            """
            AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。
            @return: Client
            @throws Exception
            """
            # プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。次のサンプルコードは参照用にのみ提供されています。
            # セキュリティ上の理由から、 セキュリティトークンサービス (STS) によって提供される一時的なアクセス認証情報を使用することをお勧めします。詳細については、https://www.alibabacloud.com/help/ja/sdk/developer-reference/v2-manage-php-access-credentials を参照してください。
            config = open_api_models.Config(
                # 必須。 ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                # 必須。 ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
            )
            # エンドポイントの詳細については、https://api.aliyun.com/product/dataworks-public を参照してください。
            config.endpoint = f'dataworks.cn-shanghai.aliyuncs.com'
            return dataworks_public20200518Client(config)
    
        @staticmethod
        def main(
            args: List[str],
        ) -> None:
            client = Sample.create_client()
            run_trigger_node_request = dataworks_public_20200518_models.RunTriggerNodeRequest()
            runtime = util_models.RuntimeOptions()
            try:
                # 必要に応じて、API オペレーションのレスポンスを出力します。
                client.run_trigger_node_with_options(run_trigger_node_request, runtime)
            except Exception as error:
                # 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージが出力されます。
                # エラーメッセージを表示します。
                print(error.message)
                # トラブルシューティング用の URL を表示します。
                print(error.data.get("Recommend"))
                UtilClient.assert_as_string(error.message)
    
        @staticmethod
        async def main_async(
            args: List[str],
        ) -> None:
            client = Sample.create_client()
            run_trigger_node_request = dataworks_public_20200518_models.RunTriggerNodeRequest()
            runtime = util_models.RuntimeOptions()
            try:
                # 必要に応じて、API オペレーションのレスポンスを出力します。
                await client.run_trigger_node_with_options_async(run_trigger_node_request, runtime)
            except Exception as error:
                # 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージが出力されます。
                # エラーメッセージを表示します。
                print(error.message)
                # トラブルシューティング用の URL を表示します。
                print(error.data.get("Recommend"))
                UtilClient.assert_as_string(error.message)
    
    
    if __name__ == '__main__':
        Sample.main(sys.argv[1:])
    

API オペレーションの詳細については、「RunTriggerNode」をご参照ください。