
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)は、以下の一覧から選択します。

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

※ 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 * * ? *を指定します。

Jobs to start
スケジュール実行するJobを指定します。ここでは複数のジョブを指定可能です。ここではflightsdb01ジョブを選択しました。

Review all steps
内容の確認です。指定した時刻はUTCであることをご注意ください。

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

[Enable]ボタンを押すと直ちに有効になります。

有効になるとTrigger StatusがACTIVATEDになりました。

ACTIVATEDやDEACTIVATEDの設定は、Trigger name を選択して、ActionからDisable trigger/Enable triggerで変更可能です。スケジュール登録はするけど、普段は止めておきたいといった場合に便利な機能です。
Job実行の確認
Jobの実行状況は、JobメニューからJob nameを選択して確認します。flightsdb01ジョブがRunningであることが確認できます。

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

Jobs to Start
スケジュール実行するJobを指定します。ここでは複数のジョブを指定可能です。ここではflightsdb01ジョブとflightsdb02ジョブを選択しました。

Review all steps
2つのジョブが登録されていることが確認できます。

Click to start it now(On-demand Triggerの開始)
Click to start it now をクリックするとダイアログが表示されます。

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

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

同様にflightsdb02ジョブがRunningであることが確認できます。

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

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

Review all steps
この表示では実行されるflightsdb02ジョブが表示されます。

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

[Enable]ボタンを押すと直ちに有効になります。

有効になるとTrigger StatusがACTIVATEDになりました。

依存関係のあるflightsdb03ジョブの実行
準備ができましたので、flightsdb03ジョブが完了したらflightsdb02ジョブが実行されるという動作を確認します。
OnDemandTriggerで実行するJobをflightsdb03ジョブに変更して、OnDemandTriggerします。flightsdb03ジョブがRunningになったことを確認できます。

flightsdb03ジョブの完了イベントで、flightsdb02ジョブの実行
flightsdb03ジョブの実行が完了すると、flightsdb02ジョブが開始されることを確認できました。

最後に
本番環境のETL Jobは単体で実行するのではなく、関連のある複数のジョブをまとめたり、ジョブ間の依存関係を鑑みて、スケジュール実行することが求められます。AWS Glueではそれらの機能をTriggerとして実装されていることがご理解いただけたと思います。
よって、AWS GlueのTriggerは、
- 複数のJobをまとめて実行する、ジョブグループ的な使い方ができる
- 依存関係のある複数のJob間の実行順を定義できる
- 上記に対して、オンデマンドとスケジュールで実行をできる
本番環境でジョブを実行するときは、この Triggerを活用してJob管理することをお勧めいたします。







