Boto3でAWS Glueジョブを実行し、実行状態(ステータス)を確認する方法
概要
Pythonのboto3ライブラリを使ってAWS Glueジョブを実行し、その結果が「成功」なのか「失敗」なのかといった実行状態を取得する方法を解説します。例として、run_s3_file_jobというジョブを実行し、そのステータスを確認してみましょう。
解決のためのアプローチ
ステップ1: boto3とbotocoreの例外クラスをインポートし、例外処理に備えます。
ステップ2: 関数の必須パラメータはjob_nameのみで、argumentsは任意パラメータです。引数が必要なジョブの場合は、辞書形式で渡します。
例:arguments = {'argument1': 'value1', 'argument2': 'value2'}
引数を必要としないジョブの場合は、job_nameだけを渡せば問題ありません。
ステップ3: boto3ライブラリでAWSセッションを作成します。デフォルトプロファイルにregion_nameが設定されていることを確認してください。設定されていない場合は、セッション作成時に明示的にregion_nameを指定します。
ステップ4: AWS Glue用のクライアントを作成します。
ステップ5: start_job_run関数を使用し、JobNameと必要に応じてArgumentsを渡してジョブを開始します。
ステップ6: ジョブが起動すると、ジョブのメタデータとともにjob_run_idが返されます。
ステップ7: get_job_run関数に、前のステップで取得したRunIdを渡して呼び出します。ステータス情報を含む辞書が返されます。
ステップ8: 辞書からジョブ固有のステータスを取り出します。ジョブが完了していなければ「RUNNING」、完了していれば「SUCCEEDED」または「FAILED」となります。
ステップ9: ステータス確認中に問題が発生した場合に備え、汎用的な例外処理を実装しておきます。
コード例
以下のコードで、既存のGlueジョブを実行し、そのステータスを取得できます。
import time
import boto3
from botocore.exceptions import ClientError
def run_glue_job_get_status(job_name, arguments = {}):
session = boto3.session.Session()
glue_client = session.client('glue')
try:
job_run_id = glue_client.start_job_run(JobName=job_name, Arguments=arguments)
status_detail = glue_client.get_job_run(JobName=job_name, RunId = job_run_id.get("JobRunId"))
status = status_detail.get("JobRun").get("JobRunState")
return status
except ClientError as e:
raise Exception( "boto3 client error in run_glue_job_get_status: " + e.__str__())
except Exception as e:
raise Exception( "Unexpected error in run_glue_job_get_status: " + e.__str__())
# 1回目:ジョブ直後のステータスを取得
print(run_glue_job_get_status("run_s3_file_job"))
# 10秒待機してから2回目のステータスを取得
time.sleep(10)
print(run_glue_job_get_status("run_s3_file_job"))実行結果
# 1回目(ジョブ実行直後) RUNNING # 2回目(10秒待機後) SUCCEEDED
補足ポイント
- 実際の運用では、ジョブ完了までポーリング(一定間隔でのステータス再取得)を行うのが一般的です。
time.sleep()やループ処理を組み合わせて、RUNNING状態が解除されるまで待機しましょう。 - IAMロールには、
glue:StartJobRunおよびglue:GetJobRunアクションの権限が必要です。 - 大規模なジョブの場合は、タイムアウトや最大試行回数を設定して無限ループを防止することをおすすめします。
-
PythonのBoto3ライブラリを使用してAWS Glueジョブを実行する方法
はじめに本記事では、Pythonのboto3ライブラリを使用して、AWS Glueのジョブを実行する方法を解説します。例として、「run_s3_file_job」という既存のGlueジョブを起動するケースを取り上げます。解決のためのアプローチとアルゴリズムステップ1 − 例外ハンドリングのために、boto3とbotocoreの例外モジュールをインポートします。ステップ2 − 関数のパラメータとして、job_nameは必須、argumentsは任意です。一部のジョブは実行時に引数を必要とします。その場合は、辞書型(dict)として引数を渡します。例:arguments = {argument1:
-
Boto3を使ってAWS Glueジョブの存在を確認する方法
はじめにPythonのboto3ライブラリを使用すると、指定したAWS Glueジョブが存在するかどうかを簡単に確認できます。本記事では、例として run_s3_file_job というジョブがAWS Glue上に存在するかどうかをチェックする方法を解説します。解決のためのアプローチとアルゴリズムステップ1 − boto3とbotocoreの例外クラス(exceptions)をインポートし、例外処理に備えます。ステップ2 − 関数の引数として job_name を受け取れるようにします。ステップ3 − boto3ライブラリを使ってAWSセッションを作成します。デフォルトプロファイルに regi