AWS Glue 実践入門:Triggerを使ってスケジュールやJob完了イベントでJobを実行する

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

今日は登録したJobをスケジュール実行したり、他のJobの完了イベントでJobを実行させることができる Trigger についてご紹介します。

目次

Trigger の種類

Triggerの種類(Trigger type)は On-demand、Schedule、Jobs completed の3種類です。

On-demand

On-demandは、マネジメントコンソールから Start Trigger して起動します。このTriggerに指定したJobが完了すると、完了を監視するすべての(後述する)Jobs completed の Triggerも起動され、依存するジョブが開始されます。Jobsのジョブをオンデマンドで実行した場合は、Jobs completed の Triggerは起動しません。

Schedule

Scheduleは、cronに基づく時間指定のトリガーです。例えば、毎日・毎週・毎月といった一定の周期(Frequency)やcron形式でスケジュールを設定できます。

Frequency

スケジュールの周期(Frequency)は、以下の一覧から選択します。 20171016-aws-glue-trigger-type-1

Cron expression

上記のスケジュールの周期(Frequency)で、Customを選択した場合は、Cron expressionに指定します。 20171016-aws-glue-trigger-type-2

※ cron指定では5分未満の指定はできません。

  • Cron指定の例
曜日 意味
0 10 * * ? * 毎日10:00 am (UTC) に実行する
15 12 * * ? * 毎日12:15 pm (UTC) に実行する
0 18 ? * MON-FRI * 月曜日から金曜日まで 6:00 pm (UTC) に実行する
0 8 1 * ? * 月の最初の8:00 am (UTC) に実行する
0/15 * * * ? * 15分毎に実行する
0/10 * ? * MON-FRI * 月曜日から金曜日まで 10分毎に実行する
0/5 8–17 ? * MON-FRI * 月曜日から金曜日までの 8:00 am (UTC) から 5:55 pm (UTC) の時間帯に5分毎に実行する

詳細は、Time-Based Schedules for Jobs and Crawlers を御覧ください。

Jobs completed

前のJobまたは複数のJobが完了したイベントに基づくTriggerです。このTriggerは、依存関係があるJobの完了時に起動します。

Schedule

ここではScheduleのTriggerを登録して実行を試してみます。実行する条件と1つ以上のJobをSchedule Triggerに登録します。

Trigger Properties

Trigger nameと、PM17:00(UTC)に自動起動するようにFrequencyはCustom、Cron Expressionは0 17 * * ? *を指定します。 20171016-aws-glue-trigger-schedule-1

Jobs to start

スケジュール実行するJobを指定します。ここでは複数のジョブを指定可能です。ここではflightsdb01ジョブを選択しました。 20171016-aws-glue-trigger-schedule-2

Review all steps

内容の確認です。指定した時刻はUTCであることをご注意ください。 20171016-aws-glue-trigger-schedule-3

Scheduleの有効化

登録直後は、まだスケジュールの状態がCREATEDなので、ACTIVATEDに変更する必要があります。 Click to enable it now をクリックするとダイアログが表示されます。 20171016-aws-glue-trigger-schedule-4

[Enable]ボタンを押すと直ちに有効になります。 20171016-aws-glue-trigger-schedule-5

有効になるとTrigger StatusがACTIVATEDになりました。 20171016-aws-glue-trigger-schedule-6

ACTIVATEDDEACTIVATEDの設定は、Trigger name を選択して、ActionからDisable trigger/Enable triggerで変更可能です。スケジュール登録はするけど、普段は止めておきたいといった場合に便利な機能です。

Job実行の確認

Jobの実行状況は、JobメニューからJob nameを選択して確認します。flightsdb01ジョブがRunningであることが確認できます。 20171016-aws-glue-trigger-schedule-7

On-demand

ここではOn-demandのTriggerを登録して実行を試してみます。1つ以上のJobをOn-demand Triggerに登録します。

Trigger properties

Trigger nameを指定します。 20171016-aws-glue-trigger-ondemand-1

Jobs to Start

スケジュール実行するJobを指定します。ここでは複数のジョブを指定可能です。ここではflightsdb01ジョブとflightsdb02ジョブを選択しました。 20171016-aws-glue-trigger-ondemand-2

Review all steps

2つのジョブが登録されていることが確認できます。 20171016-aws-glue-trigger-ondemand-3

Click to start it now(On-demand Triggerの開始)

Click to start it now をクリックするとダイアログが表示されます。 20171016-aws-glue-trigger-ondemand-4

もちろん、Trigger name を選択して、[Action]から[Satrt trigger]でも実行可能です。 20171016-aws-glue-trigger-ondemand-6

Job実行の確認

複数のJobを登録した場合、全て同時に実行されます。 Jobの実行状況は、JobメニューからJob nameを選択して確認します。flightsdb01ジョブがRunningであることが確認できます。 20171016-aws-glue-trigger-ondemand-7

同様にflightsdb02ジョブがRunningであることが確認できます。 20171016-aws-glue-trigger-ondemand-8

Jobs completed

ここではJobs completedのTriggerを登録して実行を試してみます。依存関係のある1つ以上のジョブ(Watched Jobs)と、実行したい1つ以上のJobをJobs completed の Triggerに登録します。

Trigger properties

Trigger nameと、依存関係のある1つ以上のジョブ(Watched Jobs)を指定します。ここではflightsdb03ジョブをWatched Jobsに選択しました。 20171016-aws-glue-trigger-jobscomplete-1-2

Jobs to Start

1つ以上の実行するJobを指定します。ここではflightsdb02ジョブを選択しました。つまり、flightsdb03ジョブが完了したらflightsdb02ジョブが実行されるというTriggerになります。 20171016-aws-glue-trigger-jobscomplete-2-2

Review all steps

この表示では実行されるflightsdb02ジョブが表示されます。 20171016-aws-glue-trigger-jobscomplete-3

Jobs completed の有効化

登録直後は、まだスケジュールの状態がCREATEDなので、ACTIVATEDに変更する必要があります。 Click to enable it now をクリックするとダイアログが表示されます。 20171016-aws-glue-trigger-jobscomplete-4-2

[Enable]ボタンを押すと直ちに有効になります。 20171016-aws-glue-trigger-jobscomplete-5

有効になるとTrigger StatusがACTIVATEDになりました。 20171016-aws-glue-trigger-jobscomplete-7-2

依存関係のあるflightsdb03ジョブの実行

準備ができましたので、flightsdb03ジョブが完了したらflightsdb02ジョブが実行されるという動作を確認します。 OnDemandTriggerで実行するJobをflightsdb03ジョブに変更して、OnDemandTriggerします。flightsdb03ジョブがRunningになったことを確認できます。 20171016-aws-glue-trigger-jobscomplete-9-2

flightsdb03ジョブの完了イベントで、flightsdb02ジョブの実行

flightsdb03ジョブの実行が完了すると、flightsdb02ジョブが開始されることを確認できました。 20171016-aws-glue-trigger-jobscomplete-11-2

最後に

本番環境のETL Jobは単体で実行するのではなく、関連のある複数のジョブをまとめたり、ジョブ間の依存関係を鑑みて、スケジュール実行することが求められます。AWS Glueではそれらの機能をTriggerとして実装されていることがご理解いただけたと思います。

よって、AWS GlueのTriggerは、

  • 複数のJobをまとめて実行する、ジョブグループ的な使い方ができる
  • 依存関係のある複数のJob間の実行順を定義できる
  • 上記に対して、オンデマンドとスケジュールで実行をできる

本番環境でジョブを実行するときは、この Triggerを活用してJob管理することをお勧めいたします。