Glueの使い方的な㊵(Workflowsでジョブフローの可視化)

# アップデート

https://aws.amazon.com/jp/about-aws/whats-new/2019/06/aws-glue-now-provides-workflows-to-orchestrate-etl-workloads/

# Glue Workflows とは

Glueのジョブとクローラーのワークフローを作る
GlueのTrigger機能をクローラーにも対応させ、状態とフローを可視化させる
Glueのリソースだけでフローを作りたい場合に有用

しっかりとエラーハンドリングしたい時、通知飛ばしたい時、他のAWSリソースと連携させたフローを作りたい場合はStepFunctionsがよい

# Workflowsを作る

## 内容

以下の記事で書いたクローラーやジョブを使いワークフローを作ります
https://qiita.com/pioho07/items/a24d188d67fe97034b34

クローラー -> ジョブ(PySpark) -> ジョブ(PythonShell)

シンプルにS3のcsvファイルをクローリングしてparquetにしてファイル名をリネームするです

* 1つ目のクローラー：S3のcsvファイルをクローリングしGlue Data Catalogのテーブル(スキーマ)を作る
* 2つ目のジョブ：PySparkでフォーマットをparquetにしたり、country,year,month,day,hourでパーティション化したり、圧縮してS3に出力
* 3つ目のジョブ：PythonShellで出力されたファイルをリネームする

※詳細なコードの内容は上のリンクを参照ください

## リソース名

### クローラー名
se2_in0

### ジョブ名
se2_job15
se2_job16

## Workflow作成

Glueの画面の左メニューから"Workflows"をクリックし[Add workflow]をクリック

<img width="482" alt="スクリーンショット 0031-06-12 12.29.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/60e99805-b990-98c6-707f-ae2894ca2f08.png">

以下を入力して[Add workflow]をクリック
Workflow name: se2_workflow1

<img width="709" alt="スクリーンショット 0031-06-12 21.07.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/e4754ef5-35b7-272c-13a2-f22771944f1b.png">

作成されたworkflowの"se2_workflow1"にチェックを入れ、画面下の[Graph]タブをクリックし[Add trigger]をクリックする

※ここで作ったTriggerはGlueのTriggerとして作られます

<img width="946" alt="スクリーンショット 0031-06-12 21.09.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/04737514-9f13-4d95-403e-96c7c65b9f10.png">

"Add new"タブをクリックし、Nameに"se2_wf_trigger1"を入れ、Trigger typeを"On demand"にチェックを入れ、[Add]をクリック

※"Clone existing"タブで既存のTriggerからコピーもできます

<img width="736" alt="スクリーンショット 0031-06-12 21.17.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/f4744950-34e9-3e43-91b3-0a5304b4e729.png">

こんなのが出来きる

<img width="1250" alt="スクリーンショット 0031-06-12 21.18.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/9a3acbf3-951b-6359-a67d-dd92452a2e76.png">

とりあえず全画面表示にもしてみて、"Add node"の箇所をクリック

<img width="1270" alt="スクリーンショット 0031-06-12 21.19.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/3ef17e63-10a9-32c3-cfcd-bd7d3dbd11a5.png">

ポップアップ画面が出るので、"Crawlers"タブをクリックし、該当のクローラー"se2_in0"にチェックを入れ、[Add]をクリックする

※"Jobs"タブをクリックすればジョブを選べる

<img width="737" alt="スクリーンショット 0031-06-12 21.20.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/f9295123-9c83-171f-68e1-8692d79d5987.png">

左の丸いのがスタート、虫みたいなアイコンがクローラー

<img width="1235" alt="スクリーンショット 0031-06-12 21.22.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/a535da0d-e4e2-82a7-ca98-23db14a3daab.png">

クローラーのアイコンをクリックすると以下のようになり、"Add trigger"をクリックする

<img width="1258" alt="スクリーンショット 0031-06-12 21.23.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/467dac6a-97aa-b3f7-7aed-3ab593659110.png">

ポップアップ画面でnameに"se2_wf_trigger2"を入れ[Add]をクリックする

<img width="733" alt="スクリーンショット 0031-06-12 21.24.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/00dfd59a-0a9e-b9a0-8750-bc432a5464ae.png">

このように一瞬変な感じになったと思うが、気にせず右側の"Add node"をクリックする

<img width="1263" alt="スクリーンショット 0031-06-12 21.29.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/3dcda163-b7ed-4972-9b9c-48e003bf13a8.png">

"Jobs"のタブをクリックし、該当のジョブ"se2_job15"にチェックを入れ、[Add]をクリックする

<img width="735" alt="スクリーンショット 0031-06-12 21.30.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/51bca944-c4ad-14ce-0415-c3c9610d73d6.png">

2つ目のジョブが出来る

<img width="1266" alt="スクリーンショット 0031-06-12 21.32.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/f927eb5b-b93e-cfa3-e3e0-5e3e330e0c75.png">

あとは同じ要領で3つ目のジョブを追加する

<img width="1269" alt="スクリーンショット 0031-06-12 21.33.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/a1307d9a-2ca5-6a98-a13a-49e0a4820d12.png">

数珠つなぎにしたいジョブまたはクローラーをTriggerでつなげていく流れです。

## Workflow実行

対象のworkflowにチェックを入れ、[Action]->[Run]をクリック

<img width="545" alt="スクリーンショット 0031-06-12 21.34.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/4652d8c8-0dac-be18-ec56-064fd036ebdc.png">

対象のworkflowにチェックを入れ、画面下の"History"タブをクリックし、”RunID"にチェックを入れ、[View run detail]をクリックする

<img width="1055" alt="スクリーンショット 0031-06-12 21.36.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/6cc1816b-439e-9a21-b38f-59d7f9c5bda9.png">

Workflowの状態が確認できる
緑色は完了を表しクローラーが完了していることがわかり、青色が実行中を表し次のジョブが実行中であることがわかる

## 注意点

* これ今の所ほっておいてもステータスが変わらないので手動でリロードが必要そう

<img width="1209" alt="スクリーンショット 0031-06-12 21.37.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/b399c49c-abbc-10a9-a45a-d8b2cbae92ac.png">

* 途中で止められない。ジョブ単位なら止められるがワークフロー単位で止められない

* GUIの使いやすさは人それぞれということで慣れればいいのかな


## こちらも是非

Glue Workflows の公式ドキュメント
Performing Complex ETL Activities Using Workflows in AWS Glue
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/orchestrate-using-workflows.html

Glueの使い方的な㉜(Python Shellを使う)
https://qiita.com/pioho07/items/a24d188d67fe97034b34

Glueの使い方まとめ
https://qiita.com/pioho07/items/32f76a16cbf49f9f712f