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

Boto3로 AWS Glue Job의 모든 실행 상태 한 번에 확인하기

문제 정의 − Python에서 boto3 라이브러리를 사용하여 지정된 Glue Job의 모든 실행(Job Run) 상태를 조회해 보겠습니다.

예시 − 'run_s3_file_job'이라는 이름의 Glue Job에 대한 모든 실행 기록과 상태를 가져오는 것이 목표입니다.

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

1단계 − boto3와 botocore 예외 처리 모듈을 임포트하여 오류 상황을 관리할 수 있도록 준비합니다.

2단계job_name은 필수 매개변수입니다. 이 함수는 해당 작업 이름에 대한 세부 정보를 가져옵니다.

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

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

5단계get_job_runs 함수를 호출하고, job_name을 JobName 파라미터로 전달합니다.

6단계 − 해당 작업의 과거 모든 실행 내역을 가져옵니다.

7단계 − for 반복문을 사용하여 각 실행 건의 세부 정보를 하나씩 순회합니다.

8단계 − 각 실행의 상태(JobRunState)와 대응하는 실행 ID(Id)를 추출합니다. 작업이 아직 진행 중이라면 RUNNING, 완료되었다면 SUCCEEDED 또는 FAILED가 표시됩니다.

9단계 − 상태 조회 과정에서 문제가 발생했을 경우 일반 예외(generic exception)를 처리하여 안정성을 확보합니다.

전체 코드 예제

아래 코드를 사용하면 지정된 Glue Job의 모든 실행 상태를 확인할 수 있습니다.

import boto3
from botocore.exceptions import ClientError

def get_status_of_job_all_runs(job_name):
    session = boto3.session.Session()
    glue_client = session.client('glue')
    try:
        response = glue_client.get_job_runs(JobName=job_name)
        for res in response['JobRuns']:
            print("Job Run id is:" + res.get("Id"))
            print("status is:" + res.get("JobRunState"))
    except ClientError as e:
        raise Exception("boto3 client error in get_status_of_job_all_runs: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in get_status_of_job_all_runs: " + e.__str__())

get_status_of_job_all_runs("run_s3_file_job")

실행 결과

job id is: jr_6ef92e90ad66b1a6c7abb1c2659d114a34962b8c6ae4bf9b328ac90b99a33b7d / status is: FAILED
job id is: jr_9fef13265036406e03e7cae79257305353203ab20b5f400e0c429e10a4999dba / status is: FAILED
job id is: jr_f9d715a33e83460fc2ef6dee0840a98ef52c06c2ff569627633c4505fda7d835 / status is: FAILED
job id is: jr_71b57633ac4d8c24f904f0ae01f613f6d54baee440d0ede23f6030cffb0bf4d7 / status is: FAILED
job id is: jr_b7ead6b6ae43da2580888c73d6896c177510df73bd77c843d3e77b4dc5f22e2f / status is: FAILED
job id is: jr_6e757509d51066648d49c22a47c26e728d6f842a1c5d2fd4f41941ca868460e6 / status is: FAILED
job id is: jr_89c1a7b8ea045fac36d25733d7fc657d3560eb159e7e122a8960981dd225a9d0 / status is: FAILED
job id is: jr_87522bcb924e41a6cf0294185b0a09e46a4ff4c67db5007ff7c10f959836a44b / status is: FAILED
job id is: jr_08bb54854c8e5c60e96a3e2bade1184963973c1ea7a1e760029e740d4c4c5d7d / status is: FAILED
job id is: jr_540a90407bb7fbde72b3e1d6cbc98c3b246c21c87d836ff389491bf95520bb41 / status is: FAILED
job id is: jr_f27227cb16ec9d3df665d8753b09c2e2d24d5b5e5263f3d3f17a9bd4669bee67 / status is: FAILED
job id is: jr_a1ae4ad2edcbdac5c948b8be92a79a37c27517113364ddc88c8a93bc712fe6c1 / status is: SUCCEEDED

핵심 정리

boto3의 get_job_runs API를 활용하면 별도의 콘솔 접속 없이 코드만으로 Glue Job의 전체 실행 이력과 상태를 손쉽게 모니터링할 수 있습니다. 위 예제 결과에서 볼 수 있듯이 각 실행 ID와 함께 FAILED 또는 SUCCEEDED 상태가 출력되며, 이를 활용하면 실패한 작업을 자동으로 감지하고 알림을 구성하는 등의 운영 자동화로 확장할 수도 있습니다.