ワークフロー実行の修復と再開
ワークフロー内の 1 つ以上のノード (ジョブまたはクローラ) が正常に完了しない場合、ワークフローは部分的にしか実行されなかったことを意味します。この根本原因を見つけて修正した上で、ワークフローの実行を再開するノードを 1 つ以上選択し、対象のワークフローを再開します。選択したノードと、それらのノードの下流にあるすべてのノードが実行されます。
ワークフロー実行の再開の仕組み
次の図にある、ワークフロー W1 について考えてみます。
ワークフロー実行は以下のように進行します。
-
トリガー T1 が、ジョブ J1 を開始します。
-
J1 が正常に完了すると、T2 と T3 がトリガーされ、それぞれジョブ J2 と J3 が実行されます。
-
ジョブ J2 と J3 が失敗します。
-
トリガー T4 と T5 は、J2 と J3 の正常な完了に依存するため、これらのトリガーは起動せずジョブ J4 と J5 も実行されません。ワークフロー W1 は部分的にのみ実行されます。
ここで、J2 と J3 の失敗の原因となった問題が修正されたとします。ワークフローの実行を再開する開始点として、J2 および J3 が選択されます。
ワークフローの実行は以下のように再開されます。
-
ジョブ J2 および J3 が正常に実行されます。
-
T4 と T5 がトリガーされます。
-
ジョブ J4 および J5 が正常に実行されます。
実行が再開されたワークフローは、新しい実行 ID を持つ別のワークフローとして追跡されます。ワークフロー履歴を表示することで、以前に行われたすべてのワークフロー実行の実行 ID を表示できます。次のスクリーンショットの例では、実行 ID wr_c7a22...
(2 行目) を持つワークフローには、完了できなかったノードがあります。ユーザーが問題を解決し、ワークフローの実行を再開しました。その結果が、実行 ID wr_a07e55...
(1 行目) として示されています。
注記
この説明の残りの部分では、「再開されたワークフロー実行」という表現は、以前のワークフロー実行が再開された際に作成されたワークフロー実行のことを指します。「元のワークフロー実行」とは、部分的にしか実行されず、再開する必要があったワークフロー実行を指します。
再開されたワークフロー実行のグラフ
再開されたワークフロー実行では、ノードのサブセットのみが実行されますが、実行のグラフは完全な形で表示されます。つまり、再開されたワークフローで実行されなかったノードは、元のワークフロー実行の実行グラフからコピーされています。元のワークフロー実行で実行され、グラフにコピーされたジョブおよびクローラーのノードには、実行の詳細が含まれます。
前の図のワークフロー W1 について、もう一度考えてみます。ワークフロー実行が J2 および J3 から再開されると、再開されたワークフロー実行の実行グラフには、すべてのジョブ (J1 ~ J5)、およびすべてのトリガー (T1 ~ T5) が表示されます。J1 の実行に関する詳細が、元のワークフロー実行からコピーされます。
ワークフロー実行のスナップショット
ワークフローの実行が開始されると、AWS Glue は、その時点でのワークフロー設計グラフのスナップショットを作成します。スナップショットの使用期間は、ワークフローの実行中です。実行の開始後にトリガーを変更した場合、その変更は、実行中のワークフローには影響しません。スナップショットを使用すると、ワークフローの実行を一貫した方法で行うことができます。
スナップショットでは、トリガーのみが不変になります。ワークフローの実行中に下流のジョブとクローラに加えた変更は、その時点の実行に対しても有効になります。
ワークフロー実行を再開する
ワークフローの実行を再開するには、以下の手順に従います。ワークフロー実行は、AWS Glue コンソール、API、または AWS Command Line Interface (AWS CLI) により再開させることができます。
ワークフロー実行を再開するには (コンソール)
-
https://console.aws.amazon.com/glue/
で AWS Glue コンソール を開きます。 ワークフローを表示し、その実行を再開するためのアクセス許可を持つユーザーとして、サインインします。
注記
ワークフローの実行を再開するには、
glue:ResumeWorkflowRun
AWS Identity and Access Management(IAM) のアクセス許可が必要です。 -
ナビゲーションペインで、[Workflows] (ワークフロー) をクリックします。
-
ワークフローを選択し、[History] (履歴) タブを選択します。
-
部分的にしか実行されていないワークフロー実行を選択し、[View run details] (実行の詳細を表示する) をクリックします。
-
実行グラフで、再起動しワークフロー実行の再開ポイントとする、最初の (または唯一の) ノードを選択します。
-
グラフの右側にある詳細ペインで、[Resume] (再開) チェックボックスをオンにします。
ノードの色が変わり、右上に小さな [Resume] (再開) アイコンが表示されます。
-
再起動する追加のノードについて、前述の 2 つのステップを完了します。
-
[Resume run] (実行を再開) をクリックします。
ワークフロー実行を再開するには (AWS CLI)
-
glue:ResumeWorkflowRun
IAM アクセス許可が付与されていることを確認します。 -
再起動するノードのノード ID を取得します。
-
元のワークフロー実行のために、
get-workflow-run
コマンドを実行します。ワークフロー名と実行 ID を指定し、次の例に示すように、--include-graph
オプションを追加します。コンソールの [History] (履歴) タブから実行 ID を取得します。もしくはget-workflow
コマンドを実行し取得します。aws glue get-workflow-run --name cloudtrailtest1 --run-id wr_a07e55f2087afdd415a404403f644a4265278f68b13ba3da08c71924ebe3c3a8 --include-graph
このコマンドは、グラフのノードとエッジを大きな JSON オブジェクトとして返します。
-
ノードオブジェクトの
Type
およびName
プロパティごとに、対象としているノードを見つけます。次に、出力されるノードオブジェクトの例を示します。
{ "Type": "JOB", "Name": "test1_post_failure_4592978", "UniqueId": "wnode_d1b2563c503078b153142ee76ce545fe5ceef66e053628a786ddd74a05da86fd", "JobDetails": { "JobRuns": [ { "Id": "jr_690b9f7fc5cb399204bc542c6c956f39934496a5d665a42de891e5b01f59e613", "Attempt": 0, "TriggerName": "test1_aggregate_failure_649b2432", "JobName": "test1_post_failure_4592978", "StartedOn": 1595358275.375, "LastModifiedOn": 1595358298.785, "CompletedOn": 1595358298.785, "JobRunState": "FAILED", "PredecessorRuns": [], "AllocatedCapacity": 0, "ExecutionTime": 16, "Timeout": 2880, "MaxCapacity": 0.0625, "LogGroupName": "/aws-glue/python-jobs" } ] } }
-
ノードオブジェクトの
UniqueId
プロパティから、ノード ID を取得します。
-
-
resume-workflow-run
コマンドを実行します。次の例に示すように、ワークフロー名、実行 ID、およびノード ID のスペース区切りのリストを指定します。aws glue resume-workflow-run --name cloudtrailtest1 --run-id wr_a07e55f2087afdd415a404403f644a4265278f68b13ba3da08c71924ebe3c3a8 --node-ids wnode_ca1f63e918fb855e063aed2f42ec5762ccf71b80082ae2eb5daeb8052442f2f3 wnode_d1b2563c503078b153142ee76ce545fe5ceef66e053628a786ddd74a05da86fd
このコマンドは、再開された (新しい) ワークフローの実行の ID と、開始されるノードのリストを出力します。
{ "RunId": "wr_2ada0d3209a262fc1156e4291134b3bd643491bcfb0ceead30bd3e4efac24de9", "NodeIds": [ "wnode_ca1f63e918fb855e063aed2f42ec5762ccf71b80082ae2eb5daeb8052442f2f3" ] }
この例での
resume-workflow-run
コマンドでは再起動するノード 2 つをリストしていますが、出力例では 1 つのノードのみが再起動されると表示していることに注意してください。これは、1 つのノードが他のノードの下流にあり、いずれにせよ、この下流のノードはワークフローの通常のフローによって再開されるためです。
ワークフロー実行の再開に関する注意と制限事項
ワークフロー実行を再開する場合には、次の注意事項と制限事項に留意してください。
-
実行を再開できるのは、
COMPLETED
状態のワークフローのみです。注記
ワークフロー実行の中で 1 つ以上のノードが未完了の場合でも、ワークフロー実行の状態は
COMPLETED
となります。実行グラフをチェックして、正常に完了しなかったノードを見つける必要があります。 -
元のワークフロー実行により実行が試みられた任意のジョブまたはクローラのノードから、ワークフロー実行を再開することができます。トリガーノードからは、ワークフロー実行を再開することはできません。
-
ノードを再起動しても、その状態はリセットされません。処理が部分的に完了しているデータのロールバックは行われません。
-
同じワークフロー実行を、複数回再開することが可能です。再開されたワークフローの実行が部分的にしか実行されない場合は、その問題に対処した上で実行を再開します。
-
再起動のために 2 つのノードを選択し、それらが互いに依存している場合には、上流にあるノードが下流ノードより先に実行されます。実際、下流にあるノードはワークフローの通常のフローによって実行されるため、このノードを選択することは冗長的となります。