AWS Glue APIを使用したワークフローのクエリ
AWS Glue には、ワークフローを管理するための高度な API が用意されています。AWS Glue API を使用してワークフローの静的ビューまたは実行中のワークフローの動的ビューを取得できます。詳細については、ワークフローを参照してください。
静的ビューのクエリ
GetWorkflow
API オペレーションを使用して、ワークフローの設計を示す静的ビューを取得します。このオペレーションは、ノードおよびエッジで構成される有向グラフを返します。ノードは、トリガー、ジョブ、またはクローラを表します。エッジは、ノード間の関係を定義します。AWS Glue コンソールのグラフでは、エッジがコネクタ (矢印) で表されます。
このオペレーションは、NetworkX、igraph、JGraphT、Java Universal Network/Graph (JUNG) Framework などの一般的なグラフ処理ライブラリでも使用できます。これらのライブラリが表すグラフはすべてが類似しているため、必要な変換は最小限です。
この API から返される静的ビューは、ワークフローに関連付けられているトリガーの最新の定義に基づく最新のビューです。
グラフ定義
ワークフローのグラフ G は順序付きペア (N、E) で、N はノードのセットを表し、E はエッジのセットを表します。ノード はグラフ内の頂点で、一意の数値で識別されます。ノードのタイプは、トリガー、ジョブ、またはクローラです。例: {name:T1, type:Trigger, uniqueId:1}, {name:J1, type:Job,
uniqueId:2}
。
エッジ は、2 タプルの形式(src, dest
) です。 src
と dest
はノードで、src
から dest
への有向エッジがあります。
静的ビューのクエリの例を示します。
ジョブ J1 の完了時にジョブ J2 をトリガーする条件付きのトリガー T を考えます。
J1 ---> T ---> J2
ノード: J1、T、J2
エッジ: (J1、T)、(T、J2)
動的ビューのクエリ
GetWorkflowRun
API オペレーションを使用して、実行中のワークフローの動的ビューを取得します。このオペレーションは、グラフの同じ静的ビューを、ワークフローの実行に関連するメタデータと共に返します。
実行の際、GetWorkflowRun
呼び出しのジョブを表すノードでは、最新のワークフロー実行の一部として開始されたジョブ実行のリストを含んでいます。このリストを使用して、各ジョブの実行ステータスをグラフ自体に表示できます。まだ実行されていないダウンストリームの依存関係の場合、このフィールドは null
に設定されます。グラフ化された情報により、任意の時点における任意のワークフローの現在の状態を確認できます。
この API から返される動的ビューは、ワークフローの実行が開始された時点における静的ビューに基づいています。
ランタイムノードの例: {name:T1, type: Trigger, uniqueId:1}
、{name:J1, type:Job, uniqueId:2,
jobDetails:{jobRuns}}
、{name:C1, type:Crawler, uniqueId:3,
crawlerDetails:{crawls}}
例 1: 動的ビュー
次の例は、単純な 2 トリガーワークフローを示しています。
-
ノード: t1、j1、t2、j2
-
エッジ: (t1, j1)、(j1, t2)、(t2, j2)
GetWorkflow
レスポンスの内容は次のとおりです。
{ Nodes : [ { "type" : Trigger, "name" : "t1", "uniqueId" : 1 }, { "type" : Job, "name" : "j1", "uniqueId" : 2 }, { "type" : Trigger, "name" : "t2", "uniqueId" : 3 }, { "type" : Job, "name" : "j2", "uniqueId" : 4 } ], Edges : [ { "sourceId" : 1, "destinationId" : 2 }, { "sourceId" : 2, "destinationId" : 3 }, { "sourceId" : 3, "destinationId" : 4 } }
GetWorkflowRun
レスポンスの内容は次のとおりです。
{ Nodes : [ { "type" : Trigger, "name" : "t1", "uniqueId" : 1, "jobDetails" : null, "crawlerDetails" : null }, { "type" : Job, "name" : "j1", "uniqueId" : 2, "jobDetails" : [ { "id" : "jr_12334", "jobRunState" : "SUCCEEDED", "errorMessage" : "error string" } ], "crawlerDetails" : null }, { "type" : Trigger, "name" : "t2", "uniqueId" : 3, "jobDetails" : null, "crawlerDetails" : null }, { "type" : Job, "name" : "j2", "uniqueId" : 4, "jobDetails" : [ { "id" : "jr_1233sdf4", "jobRunState" : "SUCCEEDED", "errorMessage" : "error string" } ], "crawlerDetails" : null } ], Edges : [ { "sourceId" : 1, "destinationId" : 2 }, { "sourceId" : 2, "destinationId" : 3 }, { "sourceId" : 3, "destinationId" : 4 } }
例 2: 複数のジョブと 1 つの条件付きのトリガー
次の例は、複数のジョブと 1 つの条件付きのトリガー (t3) を持つワークフローを示しています。
Consider Flow: T(t1) ---> J(j1) ---> T(t2) ---> J(j2) | | | | >+------> T(t3) <-----+ | | J(j3) Graph generated: Nodes: t1, t2, t3, j1, j2, j3 Edges: (t1, j1), (j1, t2), (t2, j2), (j1, t3), (j2, t3), (t3, j3)