AWS Glue에서 트리거(Trigger)는 특정 조건이나 스케줄에 따라 크롤러나 ETL 작업을 자동으로 실행해 주는 유용한 기능입니다. 이 글에서는 Python의 boto3 라이브러리를 사용하여 계정에 등록된 모든 트리거 목록을 조회하고, 각 트리거의 상세 메타데이터를 한 번에 가져오는 방법을 알아보겠습니다.
문제 정의
Python에서 boto3 라이브러리를 활용하여 계정에서 사용 가능한 트리거들의 상세 정보를 조회하고자 합니다. 예를 들어, 계정에 등록된 모든 트리거의 이름과 메타데이터를 한꺼번에 가져오는 것이 목표입니다.
문제 해결 접근 방식
1단계 − boto3와 botocore의 예외 처리 모듈(ClientError)을 임포트합니다.
2단계 − 이 함수에는 별도의 파라미터가 필요하지 않습니다. 사용자 계정에 등록된 모든 트리거를 자동으로 가져온 후, 각 트리거의 메타데이터를 표시합니다.
3단계 − boto3 라이브러리로 AWS 세션을 생성합니다. 기본 프로필(default profile)에 region_name이 설정되어 있는지 확인하고, 설정되어 있지 않다면 세션 생성 시 명시적으로 region_name을 전달해야 합니다.
4단계 − Glue 서비스를 위한 AWS 클라이언트를 생성합니다.
5단계 − list_triggers 함수를 호출하여 사용자 계정에 등록된 모든 트리거 목록을 가져옵니다.
6단계 − batch_get_triggers 함수를 호출하고, 이전 단계에서 가져온 트리거 이름들을 TriggerNames 파라미터로 전달합니다.
7단계 − 트리거 목록과 함께 각 트리거의 상세 메타데이터가 반환됩니다.
8단계 − 조회 과정에서 오류가 발생하면 일반 예외를 처리하여 적절한 에러 메시지를 출력합니다.
예제 코드
다음 코드를 사용하면 계정에 등록된 각 트리거의 상세 정보를 손쉽게 조회할 수 있습니다.
import boto3
from botocore.exceptions import ClientError
def get_resource_metadata_of_triggers():
session = boto3.session.Session()
glue_client = session.client('glue')
try:
# 계정 내 모든 트리거 목록 조회
list_of_triggers = glue_client.list_triggers()
# 트리거 이름들을 전달하여 상세 정보 일괄 조회
response = glue_client.batch_get_triggers(TriggerNames=list_of_triggers['TriggerNames'])
return list_of_triggers, response
except ClientError as e:
raise Exception("boto3 client error in get_resource_metadata_of_triggers: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in get_resource_metadata_of_triggers: " + e.__str__())
a, b = get_resource_metadata_of_triggers()
# 트리거 목록 출력
print(a)
# 각 트리거의 리소스 메타데이터 출력
print(b)실행 결과
# 트리거 목록
{'TriggerNames': ['01_PythonShellTest1'],
'NextToken': 'eyJleHBpcmF0aW9uIjp7InNlY29uZHMiOjE2MTQxNzE2OTksIm5hbm9zIjo1MTYwMDAwMDB9LC...',
'ResponseMetadata': {'RequestId': '5d3eb19a-41f5-b24e-2d59ed9664b5',
'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Tue, 23 Feb 2021 13:01:39 GMT',
'content-type': 'application/x-amz-json-1.1', 'connection': 'keep-alive',
'x-amzn-requestid': '5d3eb19a-41f5-b24e-2d59ed9664b5'}, 'RetryAttempts': 0}}
# 각 트리거의 리소스 메타데이터
{'Triggers': [{'Name': '01_PythonShellTest1', 'WorkflowName': 'arn:aws:iam::1234:role/dev-edl',
'Id': 'string', 'Type': 'string',
'State': 'CREATING'|'CREATED'|'ACTIVATING'|'ACTIVATED'|'DEACTIVATING'|'DEACTIVATED'|'DELETING'|'UPDATING',
'Description': 'string', 'Schedule': 'string'}]}핵심 포인트 정리
list_triggers는 계정 내 트리거 이름 목록만 반환하며, 실제 상태(State), 스케줄(Schedule), 설명(Description) 같은 상세 정보는 batch_get_triggers를 통해 한 번에 가져올 수 있습니다. 반환되는 State 값은 CREATING, CREATED, ACTIVATING, ACTIVATED, DEACTIVATING, DEACTIVATED, DELETING, UPDATING 등 트리거의 현재 생명주기 상태를 나타냅니다. 또한 결과가 많을 경우 NextToken이 반환되므로, 페이지네이션이 필요하면 해당 토큰을 다음 요청에 전달하면 됩니다.