Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】Boto3を使ってAWS Glueの全ジョブ定義を一括取得する方法

課題

Pythonのboto3ライブラリを使用して、AWS Glueデータカタログに登録されているすべてのGlueジョブの定義を一括で取得する方法を解説します。

例:AWS Glueデータカタログに存在するすべてのGlueジョブの定義を取得します。

解決のためのアプローチと手順

ステップ1: まずboto3とbotocore.exceptionsをインポートし、例外処理に備えます。

ステップ2: この関数にはパラメータは不要です。アカウントに登録されているすべてのジョブの定義を自動的に取得します。

ステップ3: boto3ライブラリを使ってAWSセッションを作成します。デフォルトプロファイルにregion_nameが設定されていることを確認してください。設定されていない場合は、セッション作成時に明示的にregion_nameを指定する必要があります。

ステップ4: Glue用のAWSクライアントを作成します。

ステップ5: get_jobs関数を呼び出して、アカウント内のすべてのジョブ定義を取得します。list_jobsget_jobsの違いに注意しましょう。list_jobsはGlueジョブの名前だけを返すのに対し、get_jobsはロール、スクリプトの場所、タイムアウト値など、各ジョブの詳細な定義まで取得できます。

ステップ6: レスポンスとして各ジョブの定義が返されます。

ステップ7: 処理中に予期しないエラーが発生した場合に備えて、汎用的な例外処理も実装しておきます。

サンプルコード

以下のコードで、アカウントに登録されている各ジョブの定義を取得できます。

import boto3
from botocore.exceptions import ClientError

def get_definition_of_glue_jobs():
    session = boto3.session.Session()
    glue_client = session.client('glue')
    try:
        response = glue_client.get_jobs()
        return response
    except ClientError as e:
        raise Exception("boto3 client error in get_definition_of_glue_jobs: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in get_definition_of_glue_jobs: " + e.__str__())

print(get_definition_of_glue_jobs())

出力結果

実行すると、以下のような形式でジョブ定義のリストが返されます。各ジョブには、ジョブ名、IAMロールのARN、作成日時・最終更新日時、最大同時実行数、スクリプトのS3上の場所、Pythonバージョン、タイムアウト値などの情報が含まれます。

{'Jobs': [
  {'Name': '01_PythonShellTest1',
   'Role': 'arn:aws:iam::********:role/devedl-glue-role',
   'CreatedOn': datetime.datetime(2021, 1, 6, 19, 59, 19, tzinfo=tzlocal()),
   'ExecutionProperty': {'MaxConcurrentRuns': 1},
   'Command': {'Name': 'pythonshell',
               'ScriptLocation': 's3://ivz-dev-ds-staging-/01_pythonShellTest/test1/01_PythonShellTest1.py',
               'PythonVersion': '3'},
   'Timeout': 2880, 'MaxCapacity': 0.0625, 'GlueVersion': '1.0'},
  {'Name': '01_pythonSHELL_14012021', ...},
  {'Name': 'GlueConnectionTest', ...}
],
'NextToken': 'eyJleHBpcmF0aW9uIjp7...',
'ResponseMetadata': {'RequestId': '287ad828-****af',
                     'HTTPStatusCode': 200,
                     'RetryAttempts': 0}}

なお、ジョブ数が多い場合はレスポンスにNextTokenが含まれます。この値を次回のget_jobs呼び出し時にNextTokenパラメータとして渡すことで、ページネーション方式で残りのジョブ定義を継続的に取得できます。

  1. Boto3を使って複数のAWS Glueジョブの詳細を一括取得する方法

    この記事では、指定したジョブ名のリストに対して、リソースメタデータの一覧を取得する方法を解説します。課題 − Pythonのboto3ライブラリを使用して、自分のアカウントに存在するジョブの情報を取得します。例として、アカウント内で利用可能なすべてのジョブの詳細情報を取得してみましょう。問題を解決するためのアプローチとアルゴリズムステップ1 − 例外処理のために、boto3とbotocoreの例外モジュールをインポートします。ステップ2 − この関数にはパラメータは不要です。ユーザーアカウントに登録されているすべてのジョブを取得し、各ジョブのメタデータを表示します。ステップ3 − boto3ラ

  2. Boto3でAWS Glueジョブを実行し、実行状態(ステータス)を確認する方法

    概要Pythonのboto3ライブラリを使ってAWS Glueジョブを実行し、その結果が「成功」なのか「失敗」なのかといった実行状態を取得する方法を解説します。例として、run_s3_file_jobというジョブを実行し、そのステータスを確認してみましょう。解決のためのアプローチステップ1: boto3とbotocoreの例外クラスをインポートし、例外処理に備えます。ステップ2: 関数の必須パラメータはjob_nameのみで、argumentsは任意パラメータです。引数が必要なジョブの場合は、辞書形式で渡します。例:arguments = {argument1: value1, argumen