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