Boto3を使ってAWS Glueジョブの存在を確認する方法
はじめに
Pythonのboto3ライブラリを使用すると、指定したAWS Glueジョブが存在するかどうかを簡単に確認できます。本記事では、例として run_s3_file_job というジョブがAWS Glue上に存在するかどうかをチェックする方法を解説します。
解決のためのアプローチとアルゴリズム
ステップ1 − boto3とbotocoreの例外クラス(exceptions)をインポートし、例外処理に備えます。
ステップ2 − 関数の引数として job_name を受け取れるようにします。
ステップ3 − boto3ライブラリを使ってAWSセッションを作成します。デフォルトプロファイルに region_name が設定されていることを確認してください。設定されていない場合は、セッション作成時に明示的に region_name を渡す必要があります。
ステップ4 − Glue用のAWSクライアントを作成します。
ステップ5 − get_job 関数を呼び出し、JobName を引数として渡します。
ステップ6 − ジョブが存在する場合、レスポンスにはそのジョブに関するすべての詳細情報が含まれます。存在しない場合は例外がスローされます。
ステップ7 − ジョブの確認中に何らかの問題が発生した場合に備えて、汎用例外もハンドリングしておきます。
サンプルコード
以下のコードを使用すると、Glueジョブの有無を確認できます。
import boto3
from botocore.exceptions import ClientError
def check_glue_job_exists(job_name):
session = boto3.session.Session()
glue_client = session.client('glue')
try:
response = glue_client.get_job(JobName=job_name)
return response
except ClientError as e:
raise Exception( "boto3 client error in check_glue_job_exists: " + e.__str__())
except Exception as e:
raise Exception( "Unexpected error in check_glue_job_exists: " + e.__str__())
#既存ジョブの確認
print(check_glue_job_exists("run_s3_file_job"))
#存在しないジョブの確認
print(check_glue_job_exists("run_s3_file_job_not_exist"))
実行結果
#既存ジョブの確認
{'Job': {'Name': 'run_s3_file_job', 'Description': 'Glue job for the
test', 'Role': 'arn:aws:iam::12345:role/delegated/glue-service-role',
'CreatedOn': datetime.datetime(2021, 02, 10, 15, 7, 3, 638000,
tzinfo=tzlocal()), 'LastModifiedOn': datetime.datetime(2021, 02, 10, 15,
7, 3, 638000, tzinfo=tzlocal()), 'ExecutionProperty':
{'MaxConcurrentRuns': 1}, 'Command': {'Name': 'glueetl',
'ScriptLocation': 's3://test/pipeline.py', 'PythonVersion': '3'},
'DefaultArguments': { '--job-language': 'python', 'Step': '0'},
'MaxRetries': 0, 'AllocatedCapacity': 4, 'Timeout': 2880, 'MaxCapacity':
4.0, 'WorkerType': 'G.1X', 'NumberOfWorkers': 4, 'GlueVersion': '2.0'},
'ResponseMetadata': {'RequestId': 'e3ec9e2c-e75d-4443-bfeafef674fff7e9', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Sat, 13
Feb 2021 13:20:27 GMT', 'content-type': 'application/x-amz-json-1.1',
'content-length': '1501', 'connection': 'keep-alive', 'x-amznrequestid': 'e3ec9e2c-e75d-4443-bfea-fef674fff7e9'}, 'RetryAttempts':
0}}
#存在しないジョブの確認
botocore.errorfactory.EntityNotFoundException: An error occurred
(EntityNotFoundException) when calling the GetJob operation: Job with
name: run_s3_file_job_not_exist not found.
まとめ
boto3の get_job 関数を使えば、ジョブが存在する場合は詳細情報を含むレスポンスを受け取り、存在しない場合は EntityNotFoundException が発生することで判定できます。この仕組みを利用することで、Glueジョブの事前チェックやエラーハンドリングを自動化されたパイプラインに組み込むことが可能です。
-
Pythonでファイルの存在を確認する2つの方法|os.path.isfile()と例外処理の使い方
Pythonでは、特定のファイルがコンピューター上に存在するかどうかを、主に2つの方法で確認できます。1つ目はos.pathモジュールのisfile()関数を使う方法、2つ目は例外処理(try-except)を活用する方法です。それぞれの使い方を詳しく見ていきましょう。 方法1:os.path.isfile() 関数を使う os.path.isfile()は、指定したパスにファイルが存在する場合にTrueを返し、存在しない場合はFalseを返す関数です。最もシンプルで一般的な確認方法といえます。 >>> import os >>> os.path.is
-
Pythonでファイルが存在するかどうかを確認する方法
os.access()によるファイルの存在確認と権限チェックPythonでは、os.access(path, mode)関数を使うことで、ファイルの存在確認だけでなく、読み取り・書き込み・実行といったアクセス権限の有無も同時にチェックできます。引数modeには以下の定数を指定します。os.F_OK: ファイルが存在するかどうかos.R_OK: 読み取り権限があるかどうかos.W_OK: 書き込み権限があるかどうかos.X_OK: 実行権限があるかどうか使用例>>> import os>>> os.access(my_file, os.F_OK) # ファイ