ノードが本番環境にデプロイされた直後にインスタンスを生成して実行するには、そのインスタンス生成モードを [デプロイ後即時] に設定します。
背景情報
ノードをデプロイすると、オペレーションセンターでその最新の構成を確認できます。DataWorks は毎晩、各定期タスクの構成に基づいて、翌日のスケジュールのための定期インスタンスを生成します。新規または更新されたノードを本番環境にデプロイする際、選択したインスタンス生成モードによって、変更が定期インスタンスとその依存関係にいつ影響するかが決まります。
DataWorks では、インスタンス生成モードには、変更が有効になるタイミングを制御する 2 つのオプションがあります:[翌日] と [デプロイ後即時] です。
-
[翌日]:ノードの作成および更新操作は、翌日の定期インスタンスに影響します。タスクを本番環境にデプロイした直後に実行する必要がある場合は、タスクに対してバックフィルデータ操作を実行できます。
-
[デプロイ後即時]:ノードの作成および更新操作は即時に有効になります。ただし、デプロイメントから実行可能なインスタンスが生成されるまでにはタイムラグが存在します。このラグはシナリオによって異なる影響を及ぼします。詳細については、「即時インスタンス生成の適用シナリオ」をご参照ください。
注意事項
-
インスタンス生成モードを [デプロイ後即時] に設定した場合、再実行プロパティへの変更は、すでに期限切れになったインスタンスには適用されません。
-
ワークフロー内のノードを個別に即時生成用に設定することはできません。このオプションは、スケジューリング設定ページでワークフロー全体に対して設定する必要があります。
-
スケジューリング設定で [翌日] または [デプロイ後即時] のどちらを選択したかに関わらず、システムは毎日 22:00 から 24:00 の間に翌日のすべての定期インスタンスを生成します。この期間中にデプロイされたタスクは、明後日までインスタンスを生成しません。
-
上流タスクと下流タスクでインスタンス生成モードが一致しない場合、孤立ノードが作成される可能性があります。
-
即時インスタンス生成のタイムラグ:予期しない動作を防ぐため、即時生成プロセスには 10 分のタイムラグが組み込まれています。タスクが最新の構成で実行されるには、タスクのスケジュール時刻がデプロイ時刻の少なくとも 10 分後である必要があります。
-
即時インスタンス生成の範囲 (タスクコードとスケジュール設定の違い):すべての変更が即時に有効になるわけではありません。有効になるロジックが異なるため、タスクコードの変更とスケジュール設定の変更を区別する必要があります。
-
タスクコード (SQL や Shell スクリプトのロジックなど):インスタンスは、ランタイム時にタスクの最新のコードを読み取ります。したがって、コードエラーがランタイム例外を引き起こした場合、通常はコードを修正して再デプロイし、対応するインスタンスを再実行するだけで回復できます。インスタンスを再生成する必要はありません。
-
スケジュール設定 (スケジューリングパラメーターや再実行ポリシーなど):これらのプロパティは、生成時にインスタンスに固定されます。インスタンスが生成された後にタスクのスケジュール設定を変更しても、既存のインスタンスは自動的に更新されず、生成された時点の古い構成で実行されます。
例:スケジューリングパラメーターを
${bizdate}から${datehour}に変更してデプロイした場合、コード内の${datehour}への参照は即時に有効になります。しかし、すでに生成されたインスタンスに固定されている古いパラメーターコンテキストは更新されません。この不一致により、ランタイム時にパラメーターの解析に失敗する可能性があります。ノードに関連付けられたデータソースの変更など、他のシナリオでも同様です。当日にすでに生成されているインスタンスは、変更前の構成で実行されます。
スケジュール設定の変更をすでに生成されたインスタンスに適用するには、次のいずれかの方法があります。
-
オペレーションセンターで、更新されたタスクを見つけ、[インスタンスのリフレッシュ] 操作を使用して、すでに生成されたインスタンスのスケジュール設定を一括更新します。
-
または、タスクに対してバックフィルデータ操作を実行します。バックフィル操作は、最新のタスク構成に基づいてインスタンスを生成し、実行します。
-
即時インスタンス生成の仕組み
デプロイ後の即時インスタンス生成は、将来のスケジュール時刻にのみ適用されます。具体的には、タスクのスケジュール時刻がデプロイ時刻より後の場合にのみインスタンスが実行されます。
-
新しいタスクが作成された日には定期インスタンスが生成されますが、実行されるのはスケジュール時刻が将来のインスタンスのみです。
-
ノードのスケジュール時刻を更新し、新しいスケジュール時刻が過去である場合、インスタンスは生成されません。新しいスケジュール時刻が将来である場合、新しい構成に基づいて新しいインスタンスが生成され、以前のインスタンスを置き換えます。
説明インスタンスが即時に正しく生成されるには、スケジュール時刻がノードのデプロイ時刻の少なくとも 10 分後である必要があります。
スケジュール時刻が通常の実行範囲内にある場合
-
シナリオ 1:新しいノードが作成された日に、実際の定期インスタンスが生成されます。スケジュール時刻がインスタンス生成時刻に対して将来であり、2 つの時刻の差が 10 分より大きい場合、インスタンスは正常にスケジューリングされ、実行されます。詳細については、「新しいノードをデプロイした後の即時インスタンス生成」をご参照ください。
-
シナリオ 2:ノード構成を更新した後、スケジュール時刻がインスタンス生成時刻に対して将来であり、2 つの時刻の差が 10 分より大きい場合、インスタンスは正常にスケジューリングされ、実行されます。実行されたインスタンスには、更新された構成が反映されます。詳細については、「デプロイ済みタスクのスケジュールの更新」をご参照ください。
-
シナリオ 4:スケジュール時刻の変更が下流の依存関係に与える影響。
-
インスタンスの新しいスケジュール時刻がインスタンス生成時刻に対して将来であり、2 つの時刻の差が 10 分より大きい場合、インスタンスは正常にスケジューリングされ、実行されます。まだ実行されていない下流のインスタンスは、変更後の新しいインスタンスに依存します。詳細については、「スケジュール時刻の変更が下流の依存関係に与える影響」をご参照ください。
-
インスタンスの新しいスケジュール時刻がインスタンス生成時刻に対して過去である場合、ドライランインスタンスが生成され、まだ実行されていない下流のインスタンスは孤立ノードになります。詳細については、「上流タスクと下流タスクでインスタンス生成モードが一致しない」をご参照ください。
-
本番ノードのスケジュール設定を変更する際には、この機能を使用しないことを推奨します。この機能は、依存関係の変更、依存関係の不整合、インスタンスの置き換え、またはインスタンスの削除を引き起こす可能性があり、当日の依存関係が複雑になることがあります。ただし、タスクの依存関係は翌日には正常に戻ります。
スケジュール時刻がドライランの範囲内にある場合
スケジュール時刻がノードのデプロイ時刻に対して過去である場合でも、定期インスタンスは生成されますが、インスタンスはドライランされます。インスタンスのステータスは [リアルタイムで生成された期限切れインスタンス] となり、実際のコードロジックは実行されません。詳細については、「新しいノードをデプロイした後の即時インスタンス生成」をご参照ください。
-
シナリオ 1: スケジュール時刻がインスタンス生成時刻より後で、かつその 2 つの時点の差が 10 分未満の場合、インスタンスステータスは [リアルタイムで生成された期限切れインスタンス] になります。
例:ノード A のスケジュール時刻が
09:05で、ノードが09:00にデプロイされたとします。インスタンスのスケジュール時刻がインスタンス生成時刻に対して将来であっても、2 つの時刻の差が 10 分未満の場合、ノード A はステータスが [リアルタイムで生成された期限切れインスタンス] のドライランインスタンスを生成します。 -
シナリオ 2:スケジュール時刻がインスタンス生成時刻に対して過去である場合。[リアルタイムで生成された期限切れインスタンス] のインスタンスが即時に生成されます。
例:ノード A のスケジュール時刻が
09:00で、10:00にデプロイされたとします。インスタンス生成時刻がデプロイ時刻より前です。ノード A は、ステータスが [リアルタイムで生成された期限切れインスタンス] のドライランインスタンスを即時に生成します。
即時インスタンス生成の適用シナリオ
Instant generation after publishing モードを使用してインスタンスを生成する場合、関連するシナリオにおけるインスタンスの実行と上流/下流の依存関係の動作は次のとおりです。