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

Boto3로 AWS Glue 작업을 실행하고 성공·실패 상태를 확인하는 방법

문제 상황

Python의 boto3 라이브러리를 사용해 AWS Glue 작업을 실행한 뒤, 해당 작업이 성공했는지(SUCCEEDED) 실패했는지(FAILED) 상태를 확인하는 방법을 알아보겠습니다. 예를 들어 run_s3_file_job이라는 Glue 작업을 실행하고 그 결과 상태를 조회하는 시나리오입니다.

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

1단계 – boto3와 botocore의 예외 클래스(ClientError)를 임포트하여 예외 처리에 대비합니다.

2단계 – 함수에서 job_name은 필수 매개변수이고, arguments는 선택적 매개변수입니다. 일부 Glue 작업은 실행 시 인자(arguments)를 필요로 하며, 이 경우 딕셔너리 형태로 전달할 수 있습니다.

예시: arguments = {'argument1': 'value1', 'argument2': 'value2'}

작업이 인자를 필요로 하지 않는다면 job_name만 전달하면 됩니다.

3단계 – boto3 라이브러리로 AWS 세션을 생성합니다. 기본 프로필(default profile)에 region_name이 설정되어 있는지 확인하세요. 설정되어 있지 않다면 세션 생성 시 region_name을 명시적으로 전달해야 합니다.

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

5단계start_job_run 함수를 호출하고 JobName과 필요한 경우 Arguments를 전달하여 작업을 시작합니다.

6단계 – 작업이 시작되면 작업 메타데이터와 함께 job_run_id가 반환됩니다.

7단계get_job_run 함수를 호출하고 이전 단계에서 반환된 RunId를 파라미터로 전달합니다. 이 함수는 작업 상태 정보가 담긴 딕셔너리를 반환합니다.

8단계 – 반환된 값에서 작업의 구체적인 상태를 추출합니다. 작업이 아직 완료되지 않았다면 Running, 완료되었다면 SUCCEEDED(성공) 또는 FAILED(실패)가 표시됩니다.

9단계 – 상태 확인 과정에서 문제가 발생할 경우를 대비해 일반 예외(generic exception)도 함께 처리합니다.

예제 코드

아래 코드를 사용하면 기존 Glue 작업을 실행하고 상태를 조회할 수 있습니다.

import boto3
import time
from botocore.exceptions import ClientError

def run_glue_job_get_status(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)
        status_detail = glue_client.get_job_run(JobName=job_name, RunId=job_run_id.get("JobRunId"))
        status = status_detail.get("JobRun").get("JobRunState")
        return status
    except ClientError as e:
        raise Exception("boto3 client error in run_glue_job_get_status: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in run_glue_job_get_status: " + e.__str__())

# 첫 번째 상태 조회
print(run_glue_job_get_status("run_s3_file_job"))

# 10초 대기 후 두 번째 상태 조회
time.sleep(10)
print(run_glue_job_get_status("run_s3_file_job"))

실행 결과

## 첫 번째 상태 조회
Running

## 10초 대기 후 두 번째 상태 조회
SUCCEEDED

정리

Glue 작업은 시작 직후에는 Running 상태로 표시되며, 작업이 완료된 후 다시 조회하면 최종 결과인 SUCCEEDED 또는 FAILED를 확인할 수 있습니다. 실무에서는 time.sleep()으로 단순 대기하기보다는 상태가 Running일 때 반복 조회하는 폴링(polling) 방식을 활용하면 더 안정적으로 작업 완료 여부를 감지할 수 있습니다.