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

Python Boto3 라이브러리로 AWS Glue 크롤러 세부 정보 조회하는 방법

이 글에서는 Python의 Boto3 라이브러리를 사용하여 AWS Glue 크롤러의 세부 정보를 조회하는 방법을 알아봅니다. 예시로 crawler_for_s3_file_job이라는 이름의 크롤러 정보를 가져오는 과정을 다룹니다.

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

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

2단계 – crawler_name은 필수 매개변수입니다. 리스트 형태로 전달하기 때문에 여러 개의 크롤러 이름을 한 번에 보내 세부 정보를 일괄 조회할 수 있습니다.

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

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

5단계batch_get_crawlers 함수를 호출하고 크롤러 이름 목록(crawler_names)을 전달합니다.

6단계 – 해당 함수는 요청한 크롤러들의 메타데이터를 반환합니다.

7단계 – 작업 확인 중 오류가 발생할 경우를 대비해 일반 예외도 함께 처리합니다.

예제 코드

아래 코드를 사용하면 크롤러의 세부 정보를 가져올 수 있습니다.

import boto3
from botocore.exceptions import ClientError

def get_crawler_details(crawler_names: list):
    session = boto3.session.Session()
    glue_client = session.client('glue')
    try:
        crawler_details = glue_client.batch_get_crawlers(CrawlerNames=crawler_names)
        return crawler_details
    except ClientError as e:
        raise Exception("boto3 client error in get_crawler_details: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in get_crawler_details: " + e.__str__())

print(get_crawler_details(["crawler_for_s3_file_job"]))

코드 설명 및 참고 사항

위 코드는 다음과 같은 흐름으로 동작합니다.

boto3.session.Session()으로 AWS 세션을 만든 후, session.client('glue')를 호출하여 Glue 클라이언트 객체를 생성합니다. 이후 batch_get_crawlers API에 크롤러 이름 리스트를 전달하면, 각 크롤러의 이름, 데이터베이스, 대상(S3 경로 등), 스케줄, 마지막 실행 상태 등의 메타데이터가 딕셔너리 형태로 반환됩니다.

오류 처리 측면에서는 두 가지 계층으로 나누었습니다. AWS API 호출 자체에서 발생하는 오류는 ClientError로 잡아 boto3 클라이언트 오류 메시지와 함께 재발생시키고, 그 외 예기치 못한 오류는 일반 Exception으로 처리합니다. 이렇게 하면 문제 발생 원인을 더 쉽게 파악할 수 있습니다.

참고로 원본 예제에서는 크롤러 이름을 문자열 형태인 "[crawler_for_s3_file_job]"으로 전달했지만, batch_get_crawlers는 실제 리스트를 기대하므로 위 코드처럼 ["crawler_for_s3_file_job"] 형태로 전달하는 것이 올바른 사용법입니다.

또한 AWS 자격 증명(액세스 키, 시크릿 키)은 환경 변수, ~/.aws/credentials 파일 또는 IAM 역할을 통해 미리 구성되어 있어야 하며, 실행 환경에 적절한 Glue 읽기 권한(예: glue:GetCrawlers, glue:BatchGetCrawlers)이 부여되어 있어야 API 호출이 정상적으로 수행됩니다.