AWS Glueのワークフロー機能がリリースされたようなので触ってみました

AWS Summitで発表されたようですが、Glueの標準機能でワークフローが組めるようになったと聞いたので早速試してみました。

Glueでワークフローを組むのは大変だった

Glue主な使い方をざっくり言えば、以下のようになるかと思います。

  • CrawlerでS3上のファイルやRDBMSを読み込んで、データカタログにスキーマ情報等を取り込む
  • ETL Job(Spark) でデータカタログの情報を利用して変換処理を実行
  • Crawler で変換後のデータも読み込んでデータカタログに取り込む

例えばCSVからParquetに単純変換するだけでも、最低これくらいは組まないといけません。

f:id:yomon8:20190612180648p:plain

そのためには、去年2018/11の時点では以下のようにLambda組み合わせるしかありませんでした。

この発表では以下のようにGlue内で、以下のようにグラフィカルにワークフローが組めるようになったというものです。

やってみる

CSVからParquetに変換する処理をワークフローに乗せてみます。

CrawlerとJobを用意

変換前後のCrawlerとETLジョブを準備しました。

ワークフロー作成

Glueの画面の左側、ETLの部分にWorkflowsのメニューが追加されています。

ワークフローを作ってみます。プロパティも設定できます。これが何に使えるのかまだわからないです。

トリガー作成

ワークフローを起動するためのトリガーから作成していきます。ここで作成したトリガーは従来のGlueのトリガーとして使えます。

ワークフロー作成

トリガーの後ろはノードが来ます。

ノードはCrawlerかJobのことです。どちらかを設定します。

トリガー→ノード→トリガー→ノード→トリガー・・・といった具合で順番にフローを組んでいきます。

ワークフロー完成

1分くらいカチカチとマウスで操作したらフローが完成しました。今回は直列にしていますが、イベントは複数待ちとかできるので、並列のフローも問題無く組めます。

ワークフロー開始

GUIからそのままスタートしたり、

コマンドからスタートすることも可能です。

$ aws glue start-trigger --name MyTrigger

実行状態はリアルタイムで確認できます。これも今までのLambdaとCloudWatch Eventで連携していた時には、ほぼ不可能なことだったことなのでありがたいです。

f:id:yomon8:20190612174607p:plain

所感

技術的には今までもLambdaとかStepFunctionsとか組み合わせればできた部分も多いのですが、あくまで技術的な話で現実問題大量の本数のETL処理を扱うなら実装が複雑になるのが避けられない状況でした。(StepFunctionsもGlue連携は現時点まだまだですし)

所謂ETLツールと呼ばれるソフトウェアと比較した場合、Glueの利用の敷居は低いものでは無いと思っています。サーバーレスのSpark基盤として、コードを書けばほぼ何でもできるという強さがある一方、使うためにはそれなりの技術を持ったエンジニアが必要という課題もあると感じています。

技術的なハードルとして一つ挙げられるSparkですが、こちらはコードを生成するGUIのウィザードが提供されているので、最低限はコード書けなくても動くようなアプローチがされています。

その次に挙げられるのが、CrawlerやJobといったGlue内のコンポーネントの連携で、これは従来はLambdaやCloudWatch Event、場合によってはStepFunctionsなどを駆使して実装する必要がありました。

この連携部分は、このワークフローの機能でかなり楽になるかなと思いました。