Boto3を使って複数のAWS Glueジョブの詳細を一括取得する方法
この記事では、指定したジョブ名のリストに対して、リソースメタデータの一覧を取得する方法を解説します。
課題 − Pythonのboto3ライブラリを使用して、自分のアカウントに存在するジョブの情報を取得します。例として、アカウント内で利用可能なすべてのジョブの詳細情報を取得してみましょう。
問題を解決するためのアプローチとアルゴリズム
ステップ1 − 例外処理のために、boto3とbotocoreの例外モジュールをインポートします。
ステップ2 − この関数にはパラメータは不要です。ユーザーアカウントに登録されているすべてのジョブを取得し、各ジョブのメタデータを表示します。
ステップ3 − boto3ライブラリを使用してAWSセッションを作成します。デフォルトプロファイルにregion_nameが設定されていることを確認してください。設定されていない場合は、セッション作成時に明示的にregion_nameを渡す必要があります。
ステップ4 − AWS Glue用のクライアントを作成します。
ステップ5 − list_jobs関数を使用して、ユーザーアカウントに登録されているすべてのジョブの一覧を取得します。
ステップ6 − batch_get_jobsを呼び出し、前のステップで取得したジョブ名を引数として渡します。
ステップ7 − list_of_jobs(ジョブ一覧)と各ジョブのメタデータが返されます。
ステップ8 − ジョブの確認中に何らかのエラーが発生した場合に備えて、汎用例外をハンドリングします。
サンプルコード
以下のコードを使用すると、ユーザーアカウントに登録されている各ジョブの詳細情報を取得できます。
import boto3
from botocore.exceptions import ClientError
def get_resource_metadata_of_glue_jobs():
session = boto3.session.Session()
glue_client = session.client('glue')
try:
list_of_jobs = glue_client.list_jobs()
response = glue_client.batch_get_jobs(JobNames=list_of_jobs['JobNames'])
return list_of_jobs, response
except ClientError as e:
raise Exception( "boto3 client error in get_resource_metadata_of_glue_jobs: " + e.__str__())
except Exception as e:
raise Exception( "Unexpected error in get_resource_metadata_of_glue_jobs: " + e.__str__())
a, b = get_resource_metadata_of_glue_jobs()
#ジョブの一覧
print(a)
#各ジョブのリソースメタデータ
print(b)実行結果
#ジョブの一覧
{'JobNames': ['01_PythonShellTest1', '01_pythonSHELL_14012021'],
'NextToken':
'eyJleHBpcmF0aW9uIjp7InNlY29uZHMiOjE2MTQxNzE2OTksIm5hbm9zIjo1MTYwMDAwMDB
9LCJsYXN0RXZhbHV
zFiMzAzNzAxMzRmNDk3NWM3M2MyMjhjYTk5MDgzZTA3YjQ0ZWEyOTZlIn19fQ==',
'ResponseMetadata': {'RequestId': '5d3eb19a-41f5-b24e-2d59ed9664b5',
'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Tue, 23 Feb 2021
13:01:39 GMT', 'content-type': 'application/x-amz-json-1.1', 'contentlength': '1134', 'connection': 'keep-alive', 'x-amzn-requestid':
'5d3eb19a-41f5-b24e-2d59ed9664b5'}, 'RetryAttempts': 0}}
#各ジョブのリソースメタデータ
{'Jobs': [{'Name': '01_PythonShellTest1', 'Role':
'arn:aws:iam::1234:role/dev-edl-glue-role', 'CreatedOn':
datetime.datetime(2021, 1, 6, 19, 59, 19, 387000, tzinfo=tzlocal()),
'LastModifiedOn': datetime.datetime(2021, 2, 9, 21, 47, 31, 614000,
tzinfo=tzlocal()), 'ExecutionProperty': {'MaxConcurrentRuns': 1},
'Command': {'Name': 'pythonshell', 'ScriptLocation':
's3://test/01_pythonShellTest/test1/01_PythonShellTest1.py',
'PythonVersion': '3'}, 'DefaultArguments': {'--job-bookmark-option':
'job-bookmark-disable', '--job-language': 'python'}, 'MaxRetries': 0,
'AllocatedCapacity': 0, 'Timeout': 2880, 'MaxCapacity': 0.0625,
'GlueVersion': '1.0'},
{'Name': '01_pythonSHELL_14012021', 'Role': 'arn:aws:iam::1234:role/devedl-glue-role', 'CreatedOn': datetime.datetime(2021, 1, 14, 20, 22, 40,
965000, tzinfo=tzlocal()), 'LastModifiedOn': datetime.datetime(2021, 1,
14, 20, 22, 40, 965000, tzinfo=tzlocal()), 'ExecutionProperty':
{'MaxConcurrentRuns': 1}, 'Command': {'Name': 'pythonshell',
'ScriptLocation': 's3://test/01_pythonSHELL_14012021_123.py',
'PythonVersion': '3'}, 'DefaultArguments': {'--job-bookmark-option':
'job-bookmark-disable'}, 'MaxRetries': 0, 'AllocatedCapacity': 0,
'Timeout': 2880, 'MaxCapacity': 0.0625, 'GlueVersion': '1.0'}]}このように、list_jobsでジョブ名の一覧を取得し、batch_get_jobsに渡すことで、複数のGlueジョブの詳細なメタデータ(ロール、作成日時、スクリプトの場所、タイムアウト設定など)を一度に効率的に取得できます。ジョブ数が多い場合は、NextTokenを使用したページネーションにも対応できるため、大規模な環境でも柔軟に運用できます。
-
Boto3でAWS Glueジョブを実行し、実行状態(ステータス)を確認する方法
概要Pythonのboto3ライブラリを使ってAWS Glueジョブを実行し、その結果が「成功」なのか「失敗」なのかといった実行状態を取得する方法を解説します。例として、run_s3_file_jobというジョブを実行し、そのステータスを確認してみましょう。解決のためのアプローチステップ1: boto3とbotocoreの例外クラスをインポートし、例外処理に備えます。ステップ2: 関数の必須パラメータはjob_nameのみで、argumentsは任意パラメータです。引数が必要なジョブの場合は、辞書形式で渡します。例:arguments = {argument1: value1, argumen
-
PythonのBoto3ライブラリを使用してAWS Glueジョブを実行する方法
はじめに本記事では、Pythonのboto3ライブラリを使用して、AWS Glueのジョブを実行する方法を解説します。例として、「run_s3_file_job」という既存のGlueジョブを起動するケースを取り上げます。解決のためのアプローチとアルゴリズムステップ1 − 例外ハンドリングのために、boto3とbotocoreの例外モジュールをインポートします。ステップ2 − 関数のパラメータとして、job_nameは必須、argumentsは任意です。一部のジョブは実行時に引数を必要とします。その場合は、辞書型(dict)として引数を渡します。例:arguments = {argument1: