Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Boto3로 AWS 계정에 생성된 Glue 워크플로 목록과 메타데이터 조회하는 방법

AWS Glue는 크롤러, 작업(Job), 트리거 등을 하나의 실행 흐름으로 묶어 관리할 수 있는 워크플로(Workflow) 기능을 제공합니다. 이 글에서는 Python용 AWS SDK인 Boto3를 활용해 사용자 계정에 생성된 모든 워크플로의 목록을 가져오고, 각 워크플로의 상세 메타데이터까지 함께 조회하는 방법을 단계별로 살펴보겠습니다.

문제 해결을 위한 접근 방식 및 알고리즘

1단계 – 예외 처리를 위해 boto3와 botocore.exceptions 모듈을 임포트합니다.

2단계 – 이 함수는 별도의 매개변수가 필요하지 않습니다. 사용자 계정에 등록된 모든 워크플로를 조회한 후, 각 워크플로의 메타데이터를 함께 반환합니다.

3단계 – boto3 라이브러리를 사용해 AWS 세션을 생성합니다. 기본 프로필(default profile)에 region_name이 설정되어 있는지 확인하고, 설정되어 있지 않다면 세션 생성 시 region_name을 명시적으로 전달해야 합니다.

4단계 – AWS Glue 서비스를 위한 클라이언트를 생성합니다.

5단계 – list_workflows 함수를 호출하여 사용자 계정에 등록된 모든 워크플로 목록을 가져옵니다.

6단계 – batch_get_workflows를 호출하면서 앞 단계에서 가져온 워크플로 이름 목록을 전달합니다.

7단계 – 이 함수는 워크플로 목록(list_of_workflows)과 각 워크플로의 상세 메타데이터를 반환합니다.

8단계 – 조회 과정에서 문제가 발생할 경우 일반 예외(generic exception)를 처리합니다.

예제 코드

아래 코드를 사용하면 사용자 계정에서 생성된 각 워크플로의 세부 정보를 조회할 수 있습니다.

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)

실행 결과

# 워크플로 목록
{'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', 'content-type':
'application/x-amz-json-1.1', 'content-length': '91',
'connection': 'keep-alive', 'x-amzn-requestid': '556890ce-bcd1-4bb0-
9c33-3ae1db13f3a9'}, 'RetryAttempts': 0}}

# 각 워크플로의 리소스 메타데이터
{'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}}

위 실행 결과에서 첫 번째 출력은 계정에 등록된 워크플로 이름 목록을 보여주며, 두 번째 출력은 해당 워크플로의 생성 시각, 마지막 수정 시각, 실행 상태(COMPLETED), 전체 액션 수와 성공·실패 액션 수 등 상세 통계 정보를 포함한 메타데이터를 나타냅니다. MissingWorkflows 항목이 비어 있다면 요청한 모든 워크플로가 정상적으로 조회된 것입니다.