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

Python에서 Boto3 라이브러리로 AWS Glue 작업을 실행하는 방법

문제 개요

Python의 boto3 라이브러리를 사용하여 AWS Glue 작업을 실행하는 방법을 알아보겠습니다. 예를 들어, run_s3_file_job이라는 이름의 기존 Glue 작업을 실행해 보겠습니다.

문제 해결 접근 방식

1단계: 필요한 모듈 임포트

예외 처리를 위해 boto3botocore.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를 통해 해당 작업의 진행 상태를 추적할 수 있습니다.