【Glue】トリガーイベントでジョブを動かしたいのにうまくいかないのはなぜなのか?

AWS関連

今回は監視対象のジョブが成功した際に、対象のジョブを起動させたいのでトリガーを使いました。

しかし、いくら監視対象のジョブが成功しても対象のジョブが起動しなかったので解決方法を紹介します。

今回やりたいことと、状況

詳しく僕がやりたかったことを説明します。

とりあえず答えだけ教えてくれやって方はスキップして下さい。

今回やりたいことは、Lambdaでジョブを起動させます。1番目のジョブが成功した時点でトリガーが起動して、対象の2つ目のジョブを起動させるということです。

ややこしいので↓見てみてください。

こんな風なことをやりたかったわけです。

だけど、いくら1番目のジョブが成功しても2番目のジョブが起動しないんです。

なので色々解決策を探ってみました。

解決策

結論

結論Lambdaでジョブを起動させるのではなく、トリガーを利用して1つ目のジョブを起動させる必要があるようです。

流れとしてはこんな感じ↓

なので、Lambdaからはトリガーを起動させる必要があるのです。

詳しい解決方法とどのように解決したのか。

わかんねえからとりあえずジョブを動かしてみよっと。

そんなことを思って、とりあえず1番目のジョブを手動で動かしてみるとこんな表示が出ました。

ジョブ test のみが実行されます。ジョブ test の完了に依存するジョブは実行されません。ジョブを実行し、依存ジョブをトリガーするには、オンデマンドトリガーを定義します。

あら、怪しいですね。

たぶん、このままだったらトリガーうまいこと動かないよ~みたいなことを言っているみたいですね。

というわけで、いったんオンデマンドトリガーを作成して、トリガーから1番目のジョブを起動させてみることにしました。

トリガーの作成は簡単ですよね。

オンデマンドトリガーの場合、適当な名前を付けてオンデマンドにチェックします。

そして、トリガー発生時に開始するジョブを選択して終了です。

今回の場合はLambdaからオンデマンドトリガーが開始されるようにします。

そしていったんオンデマンドトリガーを開始します!

すると,,,

お!1つ目のジョブが成功したら2つ目のジョブが動くようになりましたね!

大成功!!

今回僕はLambdaからオンデマンドトリガーを開始させたいのでlambdaも作ります。

Lambda関数の作成←ここに関数の作成方法は記載しているので参考にしてみてください。

start_trigger()という関数があるようなのでそれを利用。

import boto3

client = boto3.client('glue')

def lambda_handler(event, context):
    response = client.start_trigger(
    Name='トリガー名'
    )
    return response

ほい、ではテストしてみます。

すると…

はい、全部いい感じに動いた!

ということで問題解決ですね。

まとめ

これってよく考えたら初めに答えを表示してくれるようなものですよね。

でも見逃しているってことはやはり適当になっている部分があるわけです。

やっているつもりでもできていない。

ポチポチボタンを押すだけでなく、確認しながらやっていきたいものです。

では。

コメント

タイトルとURLをコピーしました