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

Boto3を使ってAWSアカウント内のGlueワークフロー一覧とメタデータを取得する方法

AWS Glueで管理されているワークフロー(Workflow)の一覧や、各ワークフローの詳細なメタデータを取得したい場面は多いでしょう。本記事では、PythonのAWS SDKであるBoto3を使用して、アカウント内に作成されたすべてのワークフロー情報を取得する手順を、サンプルコードとともにわかりやすく解説します。

解決のためのアプローチとアルゴリズム

ステップ1: 例外処理のために boto3botocore.exceptions をインポートします。

ステップ2: この処理にパラメータは不要です。ユーザーアカウントに登録されているすべてのワークフローを取得し、それぞれのメタデータを表示します。

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

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

ステップ5: list_workflows 関数を使用して、ユーザーアカウントに登録されているすべてのワークフロー名の一覧を取得します。

ステップ6: batch_get_workflows を呼び出し、前のステップで取得したワークフロー名を引数として渡します。

ステップ7: 戻り値として list_of_workflows および各ワークフローのメタデータが返されます。

ステップ8: 処理中に問題が発生した場合に備え、汎用的な例外ハンドリングを実装します。

サンプルコード

以下のコードを使用すると、ユーザーアカウント内に作成された各ワークフローの詳細情報を取得できます。

import boto3
from botocore.exceptions import ClientError

def get_resource_metadata_of_workflows():
    session = boto3.session.Session()
    glue_client = session.client('glue')
    try:
        list_of_workflows = glue_client.list_workflows()
        response = glue_client.batch_get_workflows(Names=list_of_workflows['Workflows'])

        return list_of_workflows, response
    except ClientError as e:
        raise Exception("boto3 client error in get_resource_metadata_of_workflows: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in get_resource_metadata_of_workflows: " + e.__str__())

a, b = get_resource_metadata_of_workflows()
# ワークフローの一覧
print(a)
# 各ワークフローのリソースメタデータ
print(b)

実行結果

#List of Workflows
{'Workflows': ['dev-aiml-naviga-ods-load'], 'ResponseMetadata':
{'RequestId': '556890ce-bcd1-4bb0-9c33-3ae1db13f3a9', 'HTTPStatusCode':
200, 'HTTPHeaders': {'date': 'Sat, 27 Feb 2021 13:57:37 GMT', 'contenttype': 'application/x-amz-json-1.1', 'content-length': '91',
'connection': 'keep-alive', 'x-amzn-requestid': '556890ce-bcd1-4bb0-
9c33-3ae1db13f3a9'}, 'RetryAttempts': 0}}
#Resource metadata of each Workflow
{'Workflows': [{'Name': 'dev-aiml-naviga-ods-load',
'DefaultRunProperties': {}, 'CreatedOn': datetime.datetime(2020, 5, 27,
3, 10, 57, 967000, tzinfo=tzlocal()), 'LastModifiedOn':
datetime.datetime(2020, 5, 27, 3, 10, 57, 967000, tzinfo=tzlocal())},
'StartedOn': datetime.datetime(2021, 2, 3, 16, 14, 48, 795000,
tzinfo=tzlocal()), 'CompletedOn': datetime.datetime(2021, 2, 3, 16, 28,
6, 207000, tzinfo=tzlocal()), 'Status': 'COMPLETED', 'Statistics':
{'TotalActions': 3, 'TimeoutActions': 0, 'FailedActions': 0,
'StoppedActions': 0, 'SucceededActions': 3, 'RunningActions': 0}}},
'MissingWorkflows': [], 'ResponseMetadata': {'RequestId': 'b328d064-
24ab-48c4-b058-852387a3d474', 'HTTPStatusCode': 200, 'HTTPHeaders':
{'date': 'Sat, 27 Feb 2021 13:57:37 GMT', 'content-type':
'application/x-amz-json-1.1', 'content-length': '2655', 'connection':
'keep-alive', 'x-amzn-requestid': 'b328d064-24ab-48c4-b058-
852387a3d474'}, 'RetryAttempts': 0}}

まとめ

list_workflows でワークフロー名の一覧を取得し、batch_get_workflows にその名前を渡すことで、作成日時・最終更新日時・実行ステータス・アクション統計などの詳細なメタデータを一度に取得できます。エラーハンドリングを適切に実装することで、予期しない障害発生時にも原因を特定しやすくなります。

  1. PythonとBoto3を使ってAWS Glueクローラーの詳細情報を取得する方法

    この記事では、PythonのBoto3ライブラリを使用して、AWS Glueクローラーの詳細情報を取得する方法を解説します。例として、「crawler_for_s3_file_job」というクローラーの詳細を取得するケースを見ていきましょう。 問題を解決するためのアプローチとアルゴリズム ステップ1: 例外を適切に処理できるよう、boto3とbotocore.exceptionsをインポートします。 ステップ2: crawler_nameは必須パラメータです。リスト形式で指定するため、複数のクローラー名を一度に送信して、まとめて詳細情報を取得することも可能です。 ステップ3: boto

  2. PythonのBoto3ライブラリを使ってAWS S3のバケット一覧を取得する方法

    問題の概要: Pythonのboto3ライブラリを使用して、AWSアカウント内に存在するすべてのS3バケットの一覧を取得します。例: BUCKET_1、BUCKET_2、BUCKET_3 のようなバケット名の一覧を取得します。boto3とはboto3は、PythonからAWSの各種サービスを操作するための公式SDKです。S3やEC2、DynamoDBなど、多くのAWSリソースをPythonコードから簡単に扱えます。使用前には pip install boto3 でインストールしておき、AWSの認証情報(アクセスキー・シークレットキー)が適切に設定されていることを確認してください。解決のための手