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

DataWorks:ノードのスケジューリング設定

最終更新日:Dec 30, 2025

プロジェクトディレクトリ内のノードとワークフローは、多くの場合、定期的なスケジューリングが必要です。ノードまたはワークフローのスケジューリング設定パネルで、スケジューリング期間、依存関係、パラメーターなどのスケジューリングプロパティを設定できます。このトピックでは、スケジューリングプロパティの設定方法について説明します。

前提条件

  • ノードが作成されている必要があります。DataWorks では、タスクはノードに基づいて開発されます。異なるエンジンタイプのタスクは、異なるノードタイプとしてカプセル化されています。要件に基づいてノードタイプを選択できます。詳細については、「ノード開発」をご参照ください。

  • 定期スケジューリングスイッチがオンになっている必要があります。DataWorks ワークスペース内のタスクは、[定期スケジューリングを有効にする] スイッチがオンになっている場合にのみ、その設定に基づいて自動的にスケジューリングされます。このスイッチは、ワークスペースの [スケジューリング設定] ページでオンにできます。詳細については、「システム設定」をご参照ください。

注意事項

  • タスクのスケジューリング設定は、実行時のプロパティを定義するだけです。タスクは、本番環境に公開された後にのみ、これらの設定に基づいてスケジューリングされます。

  • スケジューリング時間は、タスクの期待される実行時間のみを指定します。実際の実行時間は、先祖ノードの実行ステータスに依存します。タスクの実行条件の詳細については、「実行中のタスクの診断」をご参照ください。

  • DataWorks では、異なるタイプのタスク間に依存関係を作成できます。先に進む前に、「複雑な依存関係のスケジューリング設定の原則と例」のドキュメントを読み、このシナリオにおける DataWorks の事前設定された依存関係を理解することを推奨します。

  • DataWorks では、指定したスケジューリングタイプと期間に基づいて、スケジューリングノードの定期インスタンスが生成されます。例えば、ノードを 1 時間ごとに実行するように設定すると、毎日対応する数の時間単位のインスタンスが生成されます。ノードはこれらの定期インスタンスを使用して自動的に実行されます。詳細については、「定期インスタンスの表示」をご参照ください。

  • スケジューリングパラメーターを使用する場合、DataWorks スケジューリングノードの各サイクルのコード内のリクエストパラメーターは、そのサイクルのスケジュールされた時間と指定したスケジューリングパラメーター式によって決定されます。リクエストパラメーターがスケジューリングパラメーターの設定と置換にどのように関連するかについての詳細は、「スケジューリングパラメーターのソースと式」をご参照ください。

  • ワークフローには、ワークフローノードと内部ノードが含まれます。これらの依存関係は複雑です。このトピックでは、個々のノードの依存関係とスケジューリングについてのみ説明します。ワークフローのスケジューリング依存関係の詳細については、「定期ワークフロー」をご参照ください。

スケジューリング設定ページへの移動

  1. DataWorks コンソールの [ワークスペース] ページに移動します。トップナビゲーションバーで、目的のリージョンを選択します。目的のワークスペースを見つけ、[操作] 列の [ショートカット] > [DataStudio] を選択します。

  2. スケジューリング設定ページに移動します。

    1. DataStudio ページで、ノードを見つけてその設定タブを開きます。

    2. ノード設定タブの右側のナビゲーションバーで、[スケジューリング設定] をクリックして、ノードのスケジューリング設定ページを開きます。

ノードのスケジューリングプロパティの設定

ノードのスケジューリング設定ページでは、ノードの [スケジューリングパラメーター][スケジューリングポリシー][スケジューリング時間][スケジューリング依存関係]、および [ノード出力パラメーター] を設定する必要があります。

(任意) スケジューリングパラメーター

ノードの編集時にコード内で変数を定義した場合、このセクションで変数に値を割り当てる必要があります。

スケジューリングパラメーターは、スケジュールされたタスクのビジネス時間とスケジューリングパラメーターの値のフォーマットに基づいて、特定の値に自動的に置き換えられます。これにより、タスクのスケジューリング時間内でパラメーターを動的に置き換えることができます。

スケジューリングパラメーターの設定

スケジューリングパラメーターは、以下のいずれかの方法で定義できます。

方法

説明

設定図

パラメーターの追加

スケジューリングノードに複数のスケジューリングパラメーターを設定できます。複数のスケジューリングパラメーターを使用する場合は、[パラメーターの追加] をクリックします。

  • スケジューリングパラメーターに手動で値を割り当てることができます。詳細については、「スケジューリングパラメーターのソースと式」をご参照ください。

  • また、パラメーターの [操作] 列にある image をクリックして、現在のノードで定義されたパラメーターを先祖ノードの出力パラメーターに関連付けることもできます。

image

コードからパラメーターを読み込む

この方法は、現在のノードのコードで定義されている変数名を自動的に検出し、検出された変数名を後で使用するためにスケジューリングパラメーターとして追加するために使用されます。

説明

ほとんどの場合、変数名はコード内で ${カスタム変数名} の形式で定義されます。

PyODPS および一般的な Shell ノードの変数名の定義方法は、他のタイプのノードとは異なります。異なるタイプのノードのスケジューリングパラメーターのフォーマットの詳細については、「異なるタイプのノードのスケジューリングパラメーター設定例」をご参照ください。

image

サポートされているスケジューリングパラメーターのフォーマット

詳細については、「スケジューリングパラメーターのソースと式」をご参照ください。

本番環境でのタスクのスケジューリングパラメーター設定の確認

定期タスクの実行時に予期しないスケジューリングパラメーターによる問題を防ぐため、タスクが公開された後、オペレーションセンターの [定期タスク] ページに移動して、本番環境の定期タスクのスケジューリングパラメーター設定を確認することを推奨します。定期タスクの表示方法の詳細については、「定期タスクの管理」をご参照ください。

スケジューリングポリシー

スケジューリングポリシーは、定期タスクのインスタンス生成モード、スケジューリングタイプ、計算リソース、およびリソースグループを定義します。

パラメーター

説明

インスタンス生成モード

ノードが送信され、本番環境の CDN マッピングシステムに公開されると、プラットフォームはノードに設定された [インスタンス生成モード] に基づいて、自動スケジューリング用の [定期インスタンス] を生成します。

  • 翌日 (T+1) に生成:ノードは本番環境に公開された翌日に自動的にスケジューリングされます。[定期インスタンス] ページに移動して、タスクの実行ステータスを表示できます。当日にタスクを実行するには、タスクの データバックフィル操作を実行できます。ビジネス時間を 昨日 に設定してデータバックフィル操作を実行した定期インスタンスの実行ステータスは、ビジネス時間を 今日 に設定した場合と同じです。

  • 公開後すぐに生成:ノードは本番環境に公開された当日に自動的にスケジューリングされます。[定期インスタンス] ページに移動して、タスクの実行ステータスを表示できます。タスクを作成してこのモードを選択した場合、当日にタスクが実際にデータを実行するか、ドライランを実行するかは、タスクのスケジュールされた時間と公開時間によって異なります。公開済みの本番タスクのスケジューリング期間を変更すると、DataWorks は最新のスケジューリング設定に基づいて将来の時間帯の生成済みインスタンスを置き換えますが、期限切れのインスタンスは削除しません。

スケジューリングタイプ

  • 通常

    • シナリオ:通常状態で実行される定期タスクで、生成される定期インスタンスも通常状態で実行されます。

    • 影響:タスクはスケジューリング期間の設定で指定された時間に実行されるようにスケジュールされ、正常に実行されます (つまり、実際にデータを処理します)。

      現在のノードが正常に実行された後、その子孫ノードもトリガーされて正常に実行されます。デフォルトでは、このオプションがタスクのスケジューリングタイプとして選択されます。

  • 実行をスキップ

    • シナリオ:定期タスクが凍結ステータスにあり、生成された定期インスタンスも凍結ステータスにあります。現在のノードは実行できず、その子孫ノードの実行をブロックします。

      ビジネスプロセスを一定期間実行する必要がない場合は、このスケジューリングタイプを選択してビジネスプロセスのルートノードを凍結できます。ビジネスプロセスを実行する必要がある場合は、ルートノードの凍結を解除できます。タスクの凍結を解除する方法の詳細については、「タスクの凍結と凍結解除」をご参照ください。

    • 影響:タスクはスケジューリング期間の設定で指定された時間に実行されるようにスケジュールされますが、ノードのステータスは一時停止に設定されます (つまり、実際にはデータを処理しません)。

      タスクがスケジュールされると、システムは直接失敗を返し、現在のノードに依存する子孫ノードの実行をブロックします。

  • ドライラン

    • シナリオ:ノードを一定期間実行する必要がなく、その子孫ノードの実行をブロックしない場合は、このスケジューリングタイプを選択できます。

    • 影響:タスクはスケジューリング期間の設定で指定された時間に実行されるようにスケジュールされますが、ノードはドライラン状態になります (つまり、実際にはデータを処理しません)。

      タスクがスケジュールされると、システムは直接成功を返します (実行時間は 0 秒)。実際にはタスクを実行せず (実行ログは空)、現在のノードに依存する子孫ノードの実行をブロックせず (つまり、子孫ノードは正常に実行されます)、リソースを占有しません。

タイムアウト期間

タイムアウト期間を設定すると、実行時間が指定されたタイムアウト期間を超えた場合にタスクは自動的に実行を停止します。設定の詳細は次のとおりです:

  • タイムアウト期間は、定期インスタンス、データバックフィルインスタンス、およびテストインスタンスに有効です。

  • デフォルトのタイムアウト期間は 3〜7 日です。システムは、実際のペイロードに基づいてタスクのデフォルトのタイムアウト期間を動的に調整し、3〜7 日の範囲で変動します。

  • タイムアウト期間を手動で設定する場合、最大値は 168 時間 (7 日) に設定できます。

再実行プロパティ

特定の状況でノードが再実行されるように設定します。

再実行プロパティは空にできません。サポートされているタイプとその適用シナリオは次のとおりです:

  • 成功/失敗に関わらずノードを再実行可能:ノードの複数回の再実行が結果に影響しない場合は、この再実行タイプを選択できます。

  • 成功した場合は再実行不可、失敗した場合は再実行可能:ノードが一度成功し、再実行すると結果に影響するが、失敗後の再実行は結果に影響しない場合は、この再実行タイプを選択できます。

  • 成功/失敗に関わらずノードを再実行不可:ノードの再実行が成功または失敗に関わらず結果に影響する場合 (一部の同期ノードなど)、この再実行タイプを選択できます。

    説明
    • このタイプを選択した場合、システムは障害回復後に対応するノードを自動的に再実行しません。

    • [失敗時の自動再実行] を設定することはできません。

失敗時の自動再実行

この機能を有効にすると、タスクの実行が失敗した場合 (ユーザーがタスクを能動的に停止した場合を除く)、CDN マッピングシステムは再試行回数と再試行間隔に基づいて自動的に再実行をトリガーします。

  • 再試行回数:定期タスクの実行が失敗した場合のデフォルトの自動再試行回数。

    最小再試行回数は 1 (エラー発生後にタスクが自動的に 1 回再実行される)、最大は 10 (エラー発生後にタスクが自動的に 10 回再実行される) です。ビジネスニーズに応じてこの値を変更できます。

  • 再試行間隔:各再試行のデフォルトの間隔は 30 分です。最小間隔は 1 分、最大は 30 分です。

説明
  • [スケジューリング設定] ページに移動して、ワークスペースのデフォルトの再試行回数と再試行間隔を設定できます。詳細については、「システム設定」をご参照ください。

  • ノードの実行時間がタイムアウト期間を超えたために失敗した場合、自動再実行設定は有効になりません。

計算リソース

タスクの実行に必要な DPI エンジンリソースを設定します。新しいリソースを作成するには、計算リソース管理を通じて行うことができます。

計算クォータ

MaxCompute SQL ノードまたは MaxCompute Script ノードでタスクを実行するために必要な計算クォータを設定して、計算ジョブに計算リソース (CPU とメモリ) を提供できます。

スケジュールリソースグループ

タスクの実行に使用するスケジュールリソースグループを設定します。必要に応じて選択してください。

データセット

image をクリックして、作成済みのデータセットをノードに追加します。Shell ノードPython ノード、および Notebook で開発するノードのみが、開発中にデータセットの追加をサポートします。

  • データセット:現在のワークスペースで作成されたすべてのデータセットのドロップダウンリストからデータセットを選択します。

    • Object Storage Service (OSS) タイプのデータセットを選択する場合、初めてリソースグループにバケットへのアクセス権限を付与する必要があります。バケットの認可は一度だけ必要です。

    • ファイルストレージ (NAS) タイプのデータセットを選択する場合、現在の DataWorks リソースグループのネットワークが NAS マウントポイントに接続されていない場合は、VPC ネットワークを調整してリソースグループが NAS マウントポイントに接続されるようにする必要があります。

      説明

      DataWorks リソースグループにバインドされた VPC が NAS マウントポイントにバインドされた VPC と同じである場合、ネットワークは正常に接続できます。

  • マウントパス:データセットに設定されたデフォルトのマウントパスが自動的に読み取られます。手動で変更できます。

  • 詳細設定:ノードを開発して OSS または NAS データセットを読み取る際に、異なるデータセットを設定することで、データセットの読み取り方法マウントプロトコルの設定を調整できます。

  • 読み取り専用:読み取り専用アクセスを有効にすると、データ開発タスクは実行時にデータの読み取りのみが許可され、OSS または NAS へのデータの書き込みはできなくなります。

スケジューリング時間

スケジューリング時間は、スケジューリングノードの自動実行の期間、時間、およびその他の情報を設定するために使用されます。

説明

ノードがワークフロー内にある場合、[スケジューリング時間] に関連するパラメーターは、ワークフローページの [スケジューリング設定] で設定されます。ノードがワークフロー内にない場合、[スケジューリング時間] は各ノードの [スケジューリング設定] で設定されます。

注意事項

  • タスクのスケジューリング頻度は、その先祖タスクのスケジューリング期間とは独立しています

    タスクのスケジューリング頻度は、自身のスケジューリング期間に依存し、その先祖タスクのスケジューリング期間には依存しません。

  • DataWorks は、異なるスケジューリング期間を持つタスク間の依存関係をサポートします

    DataWorks では、指定したスケジューリングタイプと期間に基づいて、スケジューリングノードの定期インスタンスが生成されます。例えば、ノードを 1 時間ごとに実行するように設定すると、毎日対応する数の時間単位のインスタンスが生成されます。ノードはこれらのインスタンスを使用して実行されます。定期タスクに設定された依存関係は、本質的にタスクが生成するインスタンス間の依存関係です。先祖ノードと子孫ノードのスケジューリングタイプが異なる場合、生成される定期インスタンスの数とその依存関係も異なります。異なるスケジューリング期間を持つ先祖ノードと子孫ノード間の依存関係の詳細については、「依存関係タイプの選択 (クロスサイクル依存)」をご参照ください。

  • 毎日スケジュールされないタスクはドライランを実行します

    DataWorks では、週次や月次など、毎日スケジュールされないタスクは、スケジュールされた時間外にドライランを実行します。タスクのスケジュールされた時間に達すると、すぐに成功ステータスを返します。下流に日次スケジューリングタスクが存在する場合、下流タスクの実行をトリガーします。この場合、先祖ノードはドライランを実行し、子孫スケジューリングノードはスケジュールどおりに実行されます。

  • タスク実行時間の説明

    この設定は、タスクの期待されるスケジューリング時間を定義するだけです。タスクの実際の実行時間は、先祖ノードのスケジュールされた時間、タスク実行リソースの可用性、タスクの実際の実行条件など、複数の要因に影響されます。詳細については、「タスクの実行条件」をご参照ください。

スケジューリング時間の設定

パラメーター

説明

スケジューリング期間

スケジューリング期間は、スケジューリングシナリオでタスクが自動的に実行される期間です。これは、本番環境の CDN マッピングシステムでノード内のコードロジックが実際に実行される頻度を定義するために使用されます。指定したスケジューリングタイプと期間に基づいて、スケジューリングノードの定期インスタンスが生成されます。例えば、ノードを 1 時間ごとに実行するように設定すると、毎日指定された数の時間単位のインスタンスが生成されます。定期タスクは、定期インスタンスを使用して自動的に実行されます。

  • 分単位のスケジューリング:毎日指定された時間範囲内で、スケジューリングノードは N × 指定された分 の間隔で 1 回実行されます。分単位のスケジューリングの最小 [時間間隔] は 1 分です。

  • 時間単位のスケジューリング:毎日指定された時間範囲内で、スケジューリングノードは N × 1 時間 の間隔で 1 回実行されます。

  • 日単位のスケジューリング:スケジューリングノードは、毎日指定された時間に 1 回実行されます。定期タスクを作成する場合、日単位のスケジューリングのデフォルトのスケジューリング期間は、毎日 00:00 に 1 回実行することです。必要に応じて実行時間を指定できます。

  • 週単位のスケジューリング:スケジューリングノードは、週の特定の曜日の特定の時間に自動的に 1 回実行されます。

  • 月単位のスケジューリング:スケジューリングノードは、月の特定の日に特定の時間に自動的に 1 回実行されます。

  • 年単位のスケジューリング:スケジューリングノードは、年の特定の日に特定の時間に自動的に 1 回実行されます。

重要

週次、月次、および年次のスケジューリングでは、スケジューリング時間外でもインスタンスは毎日生成されます。インスタンスは成功状態を示しますが、実際にはドライランを実行し、タスクを実際には実行しません。

有効日

スケジューリングノードは有効日範囲内で有効になり、自動的にスケジューリングされます。有効日を超えたタスクは自動的にスケジューリングされません。これらのタスクは期限切れタスクです。[O&M ダッシュボード] で期限切れタスクの数を確認し、必要に応じて非公開にすることができます。

Cron 式

この式は時間プロパティの設定に基づいて自動的に生成されるため、設定する必要はありません。

スケジューリング依存関係

DataWorks におけるタスクのスケジューリング依存関係とは、スケジューリングシナリオにおけるノード間の有向非巡回グラフ (DAG) を指します。子孫ノードタスクは、その先祖ノードタスクがすべて正常に実行された後にのみ実行を開始します。スケジューリング依存関係を設定することで、スケジューリングタスクが実行時に正しいデータを取得できるようになります。先祖ノードが正常に実行されると、DataWorks は先祖テーブルの最新データが生成されたことを検出し、子孫ノードがデータを取得できるようになります。これにより、先祖テーブルのデータが生成されていないために子孫ノードがデータの取得に失敗するのを防ぎます。

注意事項

  • ノードの依存関係を設定した後、子孫ノードの実行条件は、依存するすべての先祖ノードが正常に実行されていることです。そうでない場合、現在のタスクはデータの取得時にデータ品質の問題に遭遇する可能性があります。

  • タスクの実際の実行時間は、自身のスケジュールされた時間と先祖タスクの完了時間の両方に依存します。先祖タスクがまだ実行を完了していない場合、そのスケジュールされた時間が先祖タスクよりも早くても、子孫タスクは実行されません。タスクの実行条件の詳細については、「実行中のタスクの診断」をご参照ください。

スケジューリング依存関係の設定

DataWorks におけるタスク依存関係の主な目的は、子孫ノードがデータを正しく取得できるようにすることです。これは本質的に、先祖テーブルと子孫テーブルの間のデータリネージ依存関係です。ビジネスニーズに応じて、テーブルのデータリネージに基づいてスケジューリング依存関係を設定するかどうかを選択できます。ノードのスケジューリング依存関係を設定するプロセスは次のとおりです。

ノードの依存関係を設定した後、デフォルトでは先祖ノードと子孫ノードの出力テーブル間に強い依存関係が存在します。したがって、タスクのスケジューリング依存関係を設定する際には、強いデータリネージ依存関係が存在するかどうかを確認する必要があります。子孫ノードのデータ出力が先祖ノードのデータ出力に依存する場合、強いデータリネージ依存関係が存在します。この確認により、先祖データが生成されていないために現在のタスクがデータを取得できないという問題を回避できます。

順序

説明

現在のタスクが予期しない時間に実行されるのを防ぐために、まずテーブル間に強い依存関係があるかどうかを評価し、データリネージに基づいてスケジューリング依存関係を設定する必要があるかどうかを確認できます。

現在のシナリオに、定期タスクによって生成されたテーブルデータが含まれているかどうかを確認します。DataWorks で定期スケジュールによって生成されないテーブルデータの場合、DataWorks はタスクの実行ステータスを通じてデータ出力を監視できません。そのため、一部のテーブルはスケジューリング依存関係の設定をサポートしていません。

DataWorks で定期スケジュールによって生成されないデータを持つテーブルには、以下のようなタイプが含まれますが、これらに限定されません:

  • リアルタイム同期によって生成されたテーブル

  • ローカルから DataWorks にアップロードされたテーブル

  • ディメンションテーブル

  • ワンタイムタスクによって生成されたテーブル

  • DataWorks のスケジューリングノードによって生成されない定期的に変更されるテーブル

③④

先祖ノードの昨日または今日のデータに依存する必要があるか、また、時間単位または分単位のタスクが自身の前の時間または分のインスタンスに依存する必要があるかに基づいて、先祖ノードの同一サイクルまたは前のサイクルに依存するかを選択します。

  • 同一サイクルスケジューリング依存関係:子孫ノードは、今日先祖ノードによって生成されたテーブルデータに依存します。

  • 前サイクルスケジューリング依存関係 (クロスサイクル依存):

    • 子孫ノードは、昨日先祖ノードによって生成されたテーブルデータに依存します。

    • 時間単位および分単位のタスクの特別な依存関係シナリオ:

      • 自身の前の時間または分のサイクルインスタンスのデータに依存するには、クロスサイクル依存を設定できます。

      • 時間単位のタスクが別の時間単位のタスクに依存し、それらのスケジュールされた時間がまったく同じである場合、クロスサイクル依存を設定すると、子孫ノードの 2:00 のインスタンスが先祖ノードの 1:00 のインスタンスに依存するようになります。分単位のタスクが分単位のタスクに依存する場合も原理は同じです。

説明

データリネージに基づくスケジューリング依存関係シナリオの設定の詳細については、「依存関係タイプの選択 (同一サイクル依存)」をご参照ください。

⑤⑥⑦

依存関係が設定され、本番環境に公開された後、オペレーションセンターの [定期タスク] セクションでタスクの依存関係が期待どおりであるかを確認できます。

カスタムノード依存関係の設定

DataWorks のタスク間に強いデータリネージ依存関係が存在しない場合、または依存するデータが定期スケジューリングノードによって生成されたテーブルからのものでない場合は、ノードの依存関係をカスタマイズできます。例えば、タスクが先祖データの特定のパーティションに強く依存せず、現在の時間に最新のパーティションからデータを取得するだけの場合などです。別の例として、データがローカルにアップロードされたテーブルからのものである場合です。次の方法でカスタム依存関係を設定できます:

  • ワークスペースのルートノードに依存する

    同期タスクの入力データが他のビジネスデータベースから取得されるシナリオや、SQL タイプのタスクがリアルタイム同期タスクによって生成されたテーブルデータを処理するシナリオでは、依存関係をワークスペースのルートノードに直接アタッチできます。

  • ゼロロードノードに依存する

    ワークスペースに多数または複雑なビジネスプロセスが含まれている場合は、ゼロロードノードを使用してそれらを管理できます。中央管理が必要なノードの依存関係を特定のゼロロードノードにアタッチして、ワークスペース内のデータ転送パスを明確にすることができます。例えば、ビジネスプロセスの全体的なスケジューリング時間を制御したり、凍結 (スケジューリングの無効化) を含む全体的なスケジューリングを制御したりできます。

ノード出力パラメーター

先祖ノードの出力パラメーターとその値を定義した後、子孫ノードの入力パラメーターを定義し、その値を先祖ノードの出力パラメーターを参照するように設定できます。これにより、子孫ノードはこのパラメーターを使用して、先祖ノードから渡された値を取得できます。

注意事項

  • ノードの [出力パラメーター] は、子孫ノードの入力パラメーターとしてのみ使用されます。子孫ノードのスケジューリングパラメーターセクションにパラメーターを追加し、[操作] 列の image をクリックして先祖パラメーターに関連付けることができます。一部のノードは、先祖ノードのクエリ結果を子孫ノードに直接渡すことはできません。先祖ノードのクエリ結果を子孫ノードに渡すには、代入ノードを使用できます。詳細については、「代入ノード」をご参照ください。

  • ノード出力パラメーターをサポートするノードは、EMR HiveEMR Spark SQLODPS ScriptHologres SQLAnalyticDB for PostgreSQL、および MySQL ノードです。

ノード出力パラメーターの設定

[ノード出力パラメーター] の値は、[定数] または [変数] にすることができます。

出力パラメーターを定義し、現在のノードを送信した後、子孫ノードのスケジューリングパラメーターを設定する際に、[先祖ノードの出力パラメーターをバインド] を選択して、子孫ノードの入力パラメーターとして使用できます。

image

  • パラメーター名:定義された出力パラメーターの名前。

  • パラメーター値:出力パラメーターの値。値のタイプは定数または変数にすることができます:

    • 定数は固定の文字列です。

    • 変数は、システムでサポートされているグローバル変数、組み込みのスケジューリングパラメーター、またはカスタムパラメーターにすることができます。

関連ドキュメント

ノード関連付けロールの設定

DataWorks の関連付けロール機能を使用すると、特定のタスクノードに事前設定された RAM ロールを指定できます。タスクの実行時に、Alibaba Cloud Security Token Service (STS) を通じてロールの一時的なアクセス認証情報を動的に取得します。これにより、コードに永続的な AccessKey ペアをハードコーディングすることなく、他のクラウドリソースにアクセスできます。

重要
  • リソースグループの制限:この機能は、Serverless リソースグループで実行されるノードでのみサポートされます。

  • ノードタイプの制限:この機能は、Python、Shell、Notebook、PyODPS 2、および PyODPS 3 ノードでのみサポートされます。

1. DataWorks ノードでの関連付けロールの設定

  1. ノード編集ページの右側のナビゲーションウィンドウで、[デバッグ設定] を見つけてクリックします。

  2. スケジューリング設定パネルで、[関連付けロール] タブに切り替えます。

  3. [RAM ロール] ドロップダウンリストから、準備した RAM ロールを選択します。

    重要

    ドロップダウンリストが空であるか、必要なロールが見つからない場合は、「STS を使用して他の Alibaba Cloud サービスにアクセスするための関連付けロールの設定」をご参照ください。

  4. 設定が完了したら、ノードを送信します。この設定はデバッグ実行にのみ有効です。

2. コードでの一時的な認証情報の取得と使用

関連付けロールを設定すると、タスクの実行時に DataWorks は取得した一時的な認証情報を実行環境に注入します。コード内で次の 2 つの方法で認証情報を取得できます。

方法 1:環境変数の読み取り (Shell および Python に推奨)

システムは自動的に次の 3 つの環境変数を設定し、コード内で直接読み取ることができます。

  • LINKED_ROLE_ACCESS_KEY_ID:一時的な AccessKey ID。

  • LINKED_ROLE_ACCESS_KEY_SECRET:一時的な AccessKey Secret。

  • LINKED_ROLE_SECURITY_TOKEN:一時的なセキュリティトークン。

コード例 (Python):

重要

この場合、実行には oss2 がインストールされたカスタム Python イメージを選択する必要があります。詳細については、「カスタムイメージ」をご参照ください。

import os
import oss2

# 1. 環境変数から一時的な認証情報を取得します。
access_key_id = os.environ.get('LINKED_ROLE_ACCESS_KEY_ID')
access_key_secret = os.environ.get('LINKED_ROLE_ACCESS_KEY_SECRET')
security_token = os.environ.get('LINKED_ROLE_SECURITY_TOKEN')

# 認証情報が取得されたか確認します。
if not all([access_key_id, access_key_secret, security_token]):
    raise Exception("環境変数から関連付けロールの認証情報を取得できませんでした。")

# 2. 一時的な認証情報を使用して OSS クライアントを初期化します。
# 'your-bucket-name' へのアクセス権限がロールに付与されていると仮定します。
auth = oss2.StsAuth(access_key_id, access_key_secret, security_token)
bucket = oss2.Bucket(auth, 'http://oss-<regionID>-internal.aliyuncs.com', 'your-bucket-name')

# 3. クライアントを使用して OSS リソースにアクセスします。
try:
    # バケット内のオブジェクトをリストアップします。
    for obj in oss2.ObjectIterator(bucket):
        print('object name: ' + obj.key)
    print("関連付けロールで OSS に正常にアクセスしました。")
except oss2.exceptions.OssError as e:
    print(f"OSS へのアクセス中にエラーが発生しました: {e}")

コード例 (Shell):

#!/bin/bash
access_key_id=${LINKED_ROLE_ACCESS_KEY_ID}
access_key_secret=${LINKED_ROLE_ACCESS_KEY_SECRET}
security_token=${LINKED_ROLE_SECURITY_TOKEN}

# OSS にアクセスします。regionID、bucket_name、file_name を実際の情報に置き換えてください。
echo "ID: "$access_key_id
echo "token: "$security_token
ls -al /home/admin/usertools/tools/
/home/admin/usertools/tools/ossutil64 cp --access-key-id $access_key_id --access-key-secret $access_key_secret --sts-token $security_token --endpoint http://oss-<regionID>-internal.aliyuncs.com os://<bucket_name>/<file_name> test_dw.py
echo "************************ 正常に取得しました ************************, 結果を出力します"
cat test_dw.py
方法 2:Credentials クライアントの使用 (Python に推奨)

コード例 (Python):

重要

この場合、実行には oss2alibabacloud_credentials がインストールされたカスタム Python イメージを選択する必要があります。詳細については、「カスタムイメージ」をご参照ください。

from alibabacloud_credentials.client import Client as CredentialClient
import oss2

# 1. SDK を使用して自動的に認証情報を取得します。
# 環境変数内の LINKED_ROLE_* などの認証情報を自動的に見つけます。
cred_client = CredentialClient()
credential = cred_client.get_credential()

access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()

if not all([access_key_id, access_key_secret, security_token]):
    raise Exception("SDK 経由で関連付けロールの認証情報を取得できませんでした。")

# 2. 認証情報を使用して OSS クライアントを初期化します。
auth = oss2.StsAuth(access_key_id, access_key_secret, security_token)
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'your-bucket-name')

# 3. OSS にアクセスします。
print("バケット内のオブジェクトをリストアップしています...")
for obj in oss2.ObjectIterator(bucket):
    print(' - ' + obj.key)
print("SDK 経由で関連付けロールを使用して OSS に正常にアクセスしました。")

3. 実行と検証

重要
  • Shell と Python:タスクの実行時に、指定された RAM ロールを使用して他のクラウドプロダクトにアクセスします。

  • PyODPS:OSS などの他のクラウドプロダクトにアクセスする場合、タスクは設定した RAM ロールの ID を使用します。ただし、MaxCompute データにアクセスする場合は、プロジェクトレベルで計算リソースに設定されたアクセス ID を自動的に使用します。

スケジューリングプロパティの設定

ノードをデバッグした後、[デバッグ設定][関連付けロール][スケジューリング][関連付けロール] > [RAM ロール] 設定に同期する必要があります。ノードを公開すると、タスクはこのロールとして実行されます。

デバッグ設定でカスタムイメージを設定した場合は、その設定をスケジューリング設定にも同期する必要があります。

オペレーションセンターでの実行ロールの表示

タスクの実行後、[オペレーションセンター] に移動してタスクインスタンスの詳細を表示し、指定されたロールが使用されたかどうかを確認できます。

  1. [オペレーションセンター] > [自動トリガーノード O&M] > [自動トリガーインスタンス] に移動します。

  2. 実行したノードインスタンスを見つけ、その名前をクリックして詳細ページに移動します。

  3. インスタンス詳細ページの [プロパティ] セクションで、[実行 ID] フィールドを表示します。このフィールドには、実行に使用された関連付けロールの ARN が表示されます。

    Alibaba Cloud リソースネーム (ARN) は、リソースの一意の識別子です。詳細については、「アクセスポリシーの基本要素」をご参照ください。

関連ドキュメント