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

Boto3로 AWS Glue 데이터 카탈로그의 크롤러 시작하기: 완벽 가이드

이 글에서는 Python의 boto3 라이브러리를 사용하여 AWS Glue 데이터 카탈로그(Data Catalog)에서 크롤러(Crawler)를 시작하는 방법을 단계별로 살펴봅니다.

문제 정의

Python에서 boto3 라이브러리를 활용해 AWS Glue 크롤러를 시작하는 코드를 작성하는 것이 목표입니다.

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

  • 1단계: 예외 처리를 위해 boto3botocore의 예외 클래스를 임포트합니다.

  • 2단계: 함수의 매개변수로 crawler_name(크롤러 이름)을 전달받습니다.

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

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

  • 5단계: start_crawler 함수를 호출하고 crawler_name을 Name 매개변수로 전달합니다.

  • 6단계: 이 함수는 응답 메타데이터를 반환하며, 크롤러의 예약 일정과 무관하게 즉시 크롤러를 실행합니다. 만약 크롤러가 이미 실행 중이라면 CrawlerRunningException 예외가 발생합니다.

  • 7단계: 크롤러 시작 과정에서 오류가 발생할 경우, 일반 예외(generic exception)를 처리하여 적절한 에러 메시지를 출력합니다.

예제 코드

아래 코드는 AWS Glue 데이터 카탈로그에서 크롤러를 시작하는 예제입니다.

import boto3
from botocore.exceptions import ClientError

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

# 첫 번째 크롤러 실행
print(start_a_crawler("Data Dimension"))
# 두 번째 실행 (크롤러가 아직 작업을 완료하지 않은 상태)
print(start_a_crawler("Data Dimension"))

실행 결과

# 첫 번째 크롤러 실행
{'ResponseMetadata': {'RequestId': '73e50130-*****************8e', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Sun, 28 Mar 2021 07:26:55 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '2', 'connection': 'keep-alive', 'x-amzn-requestid': '73e50130-***************8e'}, 'RetryAttempts': 0}}

# 두 번째 실행 (크롤러가 아직 작업 중인 경우)
Exception: boto3 client error in start_a_crawler: An error occurred (CrawlerRunningException) when calling the StartCrawler operation: Crawler with name Data Dimension has already started

결과 분석

첫 번째 호출 시 크롤러가 정상적으로 시작되며 HTTP 상태 코드 200과 함께 응답 메타데이터가 반환됩니다. 반면, 크롤러가 아직 작업을 완료하지 않은 상태에서 다시 호출하면 CrawlerRunningException이 발생하며, "Data Dimension 이름의 크롤러가 이미 시작되었다"는 오류 메시지를 확인할 수 있습니다. 따라서 실무에서는 크롤러 상태를 먼저 조회한 후 실행 여부를 결정하는 것이 좋습니다.