AWS Glue에서 트리거(Trigger)는 크롤러나 작업(Job)을 특정 조건에 따라 자동으로 시작하도록 예약하거나 연결하는 기능입니다. 이 글에서는 Python의 boto3 라이브러리를 사용해 AWS Glue 데이터 카탈로그(Data Catalog)에서 실행 중인 트리거를 중지하는 방법을 단계별로 살펴보겠습니다.
문제 정의
boto3 라이브러리를 활용하여 지정한 이름의 AWS Glue 트리거를 중지하는 함수를 작성합니다.
해결 접근 방식 및 알고리즘
1단계: 예외 처리를 위해 boto3와 botocore.exceptions 모듈을 임포트합니다.
2단계: 함수의 매개변수로 중지할 트리거의 이름인 trigger_name을 전달받습니다.
3단계: boto3 라이브러리로 AWS 세션을 생성합니다. 기본 프로필에 region_name이 설정되어 있지 않다면, 세션 생성 시 리전을 명시적으로 지정해야 합니다.
4단계: glue 서비스를 위한 AWS 클라이언트를 생성합니다.
5단계: stop_trigger 함수를 호출하고 매개변수 trigger_name을 Name 값으로 전달합니다.
6단계: 호출이 성공하면 응답 메타데이터가 반환되고 해당 트리거가 중지됩니다.
7단계: 트리거 중지 과정에서 오류가 발생할 경우 일반 예외(generic exception)를 처리하여 적절한 에러 메시지를 반환합니다.
예제 코드
다음 코드는 AWS Glue 데이터 카탈로그에서 트리거를 중지합니다.
import boto3
from botocore.exceptions import ClientError
def stop_a_trigger(trigger_name):
session = boto3.session.Session()
glue_client = session.client('glue')
try:
response = glue_client.stop_trigger(Name=trigger_name)
return response
except ClientError as e:
raise Exception("boto3 client error in stop_a_trigger: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in stop_a_trigger: " + e.__str__())
print(stop_a_trigger("test-daily"))실행 결과
{'Name': 'test-daily', 'ResponseMetadata': {'RequestId': 'b2109689-*******************-d', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Sun, 28 Mar 2021 08:00:04 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '26', 'connection': 'keep-alive', 'x-amzn-requestid': 'b2109689-***********************-d'}, 'RetryAttempts': 0}}코드 설명
stop_trigger는 AWS Glue API에서 제공하는 함수로, Name 파라미터에 전달된 트리거를 중지 상태(STOPPED)로 변경합니다.
응답에는 트리거 이름과 함께 HTTP 상태 코드(200)가 포함되어 있으며, 이는 요청이 성공적으로 처리되었음을 의미합니다.
ClientError를 별도로 처리하면 잘못된 트리거 이름, 권한 부족 등 AWS 관련 오류를 보다 구체적으로 진단할 수 있습니다.