문제 개요
Python의 boto3 라이브러리를 사용하여 AWS Glue 작업을 실행하는 방법을 알아보겠습니다. 예를 들어, run_s3_file_job이라는 이름의 기존 Glue 작업을 실행해 보겠습니다.
문제 해결 접근 방식
1단계: 필요한 모듈 임포트
예외 처리를 위해 boto3와 botocore.exceptions를 임포트합니다.
2단계: 함수 파라미터 정의
job_name은 필수 파라미터이며, arguments는 선택적 파라미터입니다. 일부 Glue 작업은 실행 시 인수를 필요로 하는데, 이 경우 arguments를 딕셔너리(dict) 형태로 전달할 수 있습니다.
예시:
arguments = {'argument1': 'value1', 'argument2': 'value2'}반면 작업에 인수가 필요 없다면 job_name만 전달하면 됩니다.
3단계: AWS 세션 생성
boto3 라이브러리를 사용하여 AWS 세션을 생성합니다. 이때 기본 프로필(default profile)에 region_name이 설정되어 있는지 확인하세요. 설정되어 있지 않다면 세션 생성 시 region_name을 명시적으로 지정해야 합니다.
4단계: Glue 클라이언트 생성
AWS Glue를 위한 클라이언트 객체를 생성합니다.
5단계: start_job_run 호출
start_job_run 함수를 사용하고, JobName과 필요한 경우 Arguments를 전달합니다.
6단계: 작업 실행 ID 확인
작업이 시작되면 job_run_id와 함께 작업 메타데이터가 반환됩니다.
7단계: 예외 처리
작업 확인 중 오류가 발생할 경우를 대비하여 일반 예외(generic exception)를 처리합니다.
전체 코드 예제
다음 코드를 사용하여 기존 Glue 작업을 실행할 수 있습니다.
import boto3
from botocore.exceptions import ClientError
def run_glue_job(job_name, arguments = {}):
session = boto3.session.Session()
glue_client = session.client('glue')
try:
job_run_id = glue_client.start_job_run(JobName=job_name, Arguments=arguments)
return job_run_id
except ClientError as e:
raise Exception("boto3 client error in run_glue_job: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in run_glue_job: " + e.__str__())
print(run_glue_job("run_s3_file_job"))실행 결과
코드가 성공적으로 실행되면 다음과 같이 작업 실행 ID와 응답 메타데이터가 출력됩니다.
{'JobRunId':
'jr_5f8136286322ce5b7d0387e28df6742abc6f5e6892751431692ffd717f45fc00',
'ResponseMetadata': {'RequestId': '36c48542-a060-468b-83ccb067a540bc3c', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Sat, 13 Feb 2021 13:36:50 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '82', 'connection': 'keep-alive', 'x-amzn-requestid': '36c48542-a060-468b-83cc-b067a540bc3c'}, 'RetryAttempts': 0}}HTTP 상태 코드 200은 Glue 작업이 정상적으로 시작되었음을 의미하며, 반환된 JobRunId를 통해 해당 작업의 진행 상태를 추적할 수 있습니다.