ちょっと話題の記事

AWS Glue ETLワークロードをGUIでオーケストレーションする『Workflows』を実際に試してみました

2019.06.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS Glueは、ワークフローを用いて、クローラ、ジョブ(及びトリガ)の有向非循環グラフ(DAG)を作成して、ETLワークロードをオーケストレーションできるようになりました。AWS Glueが利用可能なすべての地域で利用できるようになりましたので早速試してみます。

Workflowsとは

Workflowsは、既存のクローラ、ジョブ(及びトリガ)をGlueコンソール上のGUIを用いて有向非循環グラフ(DAG)を作成、実行、管理できる新機能です。これからは、クローラ、ジョブ(及びトリガ)の依存関係をWorkflowsのGUIで直感的にETLワークロードを作成、実行、管理できるようになります。コンソール上のWorkflows内のさまざまなエンティティの状態を視覚的に追跡できるため、進捗状況の監視や問題のトラブルシューティングが容易になります。また、Workflows内のエンティティ間でパラメータを共有できます。

Workflowsの作成

Workflowのシナリオ

以下の簡単なシナリオに沿って、Workflowを作成してみます。

  • job_unload_redshift(Python Shell) - RedshiftからデータをS3にUNLOADする
  • job_etl(Spark) - S3を集計して、結果をParttitionしてParquet出力する
  • lineorder_summary(Crawler) - クロールしてAthenaやRedshift SpectrumからクエリができるようにGlue Data Catalogを更新する

新規Workflowの追加

左の[ETL]の[Workflows]を選択して、[Add workflow]を押します。

Workflow Nameを入力して、[Add workflow]を押すと、workflowが追加されます。なお、[Add property]を押してプロパティを設定すると、Workflows内のエンティティ間でパラメータを共有できます。エンティティとは、ジョブやトリガ、クローラなど、workflowを構成する要素です。

Workflowにエンティティを追加

登録したWorkflow「Daily Batch」を選択すると、下の[Graph]にエンティティが表示されます。まだ何も登録されていませんので、最初はWorkflowのエントリポイントとなるトリガを登録します。エントリポイントとなるトリガは、[Add trigger]ボタンを押します。

今回は日次バッチ処理を想定して、Trigger typeはScheduleに設定します。

すると、有向非循環グラフ(DAG)が表示されます。このGraphに対して、エンティティを追加します。

エンティティの追加は、[Add node]を押すと、既存のジョブやクローラの一覧が表示され、その中から選択します。最初はjob_unload_redshiftを選択して、[Add]します。

次はトリガを追加します。追加するには、job_unload_redshiftを選択して、[Add trigger]を表示します。[Add trigger]を押すと、ダイアログが表示されます。

以下のダイアログでは、後続のエンティティを実行する条件を選択します。

  • Start after ANY watched event
  • いずれかのエンティティが完了したら後続のエンティティを実行する
  • Start after ALL watched event
  • 全てのエンティティが完了したら後続のエンティティを実行する

最後に一覧の中からクローラlineorder_summaryを選択して追加します。

job_etlについても同じように追加します。最終的に以下のWorkflowが作成できました。

なお、トリガの設定画面を確認すると、Workflowで設定したトリガは既にACTIVEDに設定されています。

Workflowの実行

Workflowの一覧から[Actions]-[Run]を選択して直ちに実行します。

下の[History]タブのRun statusから現在の状態を確認できます。

上記の一覧から確認したいRun IDを選んで、[View run details]を押すと実行中の状態や結果を確認できます。以下のグラフでは、job_etlが実行中を表しています。

最終的に全て正常に終了すると以下のようなグラフになります。

実行結果の管理

[History]タブのWorkflow一覧から確認したいRun IDを選んで、[View run details]を押すと過去の実行結果を確認できます。また、エンティティ毎のCloudwatchLogsのログは、ジョブの画面から参照できます。

制限事項

Workflowは以下の制限事項にご注意ください。

  • トリガは1つのWorkflowにのみ関連付けることができます
  • Workflowの開始のトリガ(OndemandまたはSchedule)は1つだけ許可されています

まとめ

GUIから既存のエンティティ(ジョブ、トリガ、クローラ)を簡単に組み合わせて、Workflowが作成できることを確認しました。既にトリガを用いて、ETLワークロード構築しているのなら、Workflowで管理すると依存関係を可視化できるのでメンテナンスが著しく向上します。今回の例のようにPython ShellをWorkflowに用いることで、RedshiftやAuroraなどから必要なデータのみをピンポイントで連携できるようになります。また、複雑になりがちな機械学習の前処理などに活用すると処理手順の把握や再利用が容易になるはずです。