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

Boto3로 AWS Glue 단일 크롤러 상세 정보 조회하는 방법

AWS Glue 크롤러(Crawler)는 S3 버킷, JDBC 데이터베이스, DynamoDB 등 다양한 데이터 소스를 자동으로 탐색하여 스키마를 추론하고 데이터 카탈로그에 테이블을 등록하는 중요한 구성 요소입니다. 운영 환경에서 크롤러의 상태나 설정 정보를 프로그래밍 방식으로 확인해야 할 때 Python의 boto3 라이브러리를 활용하면 매우 편리합니다.

문제 정의

목표 − Python의 boto3 라이브러리를 사용하여 특정 크롤러의 상세 정보를 조회합니다.

예시 − crawler_for_s3_file_job이라는 이름의 크롤러 상세 정보를 가져옵니다.

문제 해결 접근 방식

1단계 − boto3와 botocore 예외 처리 모듈(ClientError)을 임포트하여 예외 상황에 대비합니다.

2단계 − crawler_name은 필수 파라미터입니다. 문자열 타입이므로 한 번에 하나의 크롤러 이름만 전달할 수 있습니다.

3단계 − boto3 라이브러리로 AWS 세션을 생성합니다. 기본 프로파일에 region_name이 설정되어 있지 않다면, 세션 생성 시 반드시 region_name을 명시적으로 지정해야 합니다.

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

5단계get_crawler 함수를 호출하고 crawler_name을 인자로 전달합니다.

6단계 − 해당 크롤러의 메타데이터(이름, 역할, 대상 경로, 상태, 마지막 실행 결과 등)가 반환됩니다.

7단계 − 조회 과정에서 오류가 발생할 경우 클라이언트 오류(ClientError)와 일반 예외를 각각 처리합니다.

예제 코드

다음 코드를 사용하면 특정 크롤러의 상세 정보를 손쉽게 조회할 수 있습니다 −

import boto3
from botocore.exceptions import ClientError

def get_one_crawler_details(crawler_name: str):
    session = boto3.session.Session()
    glue_client = session.client('glue')
    try:
        crawler_details = glue_client.get_crawler(Name=crawler_name)
        return crawler_details
    except ClientError as e:
        raise Exception("boto3 client error in get_one_crawler_details: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in get_one_crawler_details: " + e.__str__())

print(get_one_crawler_details("crawler_for_s3_file_job"))

실행 결과

{'Crawler': {'Name': 'crawler_for_s3_file_job', 'Role': 'glue-role',
'Targets': {'S3Targets': [{'Path': 's3://test/', 'Exclusions': []}],
'JdbcTargets': [], 'DynamoDBTargets': [], 'CatalogTargets': []},
'DatabaseName': 'default', 'Classifiers': [], 'SchemaChangePolicy':
{'UpdateBehavior': 'UPDATE_IN_DATABASE', 'DeleteBehavior':
'DEPRECATE_IN_DATABASE'}, 'State': 'READY', 'TablePrefix': 'prod_scdk_',
'CrawlElapsedTime': 0, 'CreationTime': datetime.datetime(2018, 9, 24,
20, 42, 7, tzinfo=tzlocal()), 'LastUpdated': datetime.datetime(2020, 4,
27, 14, 49, 12, tzinfo=tzlocal()), 'LastCrawl': {'Status': 'SUCCEEDED',
'LogGroup': '/aws-glue/crawlers', 'LogStream':
'crawler_for_s3_file_job', 'MessagePrefix': ************-90ad1',
'StartTime': datetime.datetime(2020, 4, 27, 14, 49, 19,
tzinfo=tzlocal())}, 'Version': 15}, 'ResponseMetadata': {'RequestId':
'8c7dcbde-***********************-774', 'HTTPStatusCode': 200,
'HTTPHeaders': {'date': 'Sun, 28 Feb 2021 11:34:32 GMT', 'content-type':
'application/x-amz-json-1.1', 'content-length': '805', 'connection':
'keep-alive', 'x-amzn-requestid': '8c7dcbde-**********************774'},
'RetryAttempts': 0}}

결과 분석

반환된 응답에는 크롤러의 핵심 정보가 담겨 있습니다. NameRole(크롤러가 사용하는 IAM 역할), Targets(탐색 대상인 S3 경로), DatabaseName(결과가 저장될 데이터베이스), State(현재 상태로 여기서는 READY), 그리고 LastCrawl(마지막 실행 상태 및 로그 스트림 정보) 등을 확인할 수 있습니다. 이 정보를 활용하면 크롤러의 동작 여부를 모니터링하거나 자동화된 관리 시스템을 구축할 수 있습니다.