예제 — AWS Glue Data Catalog에서 북마크된 작업 'book-job'의 세부 정보를 조회합니다.
문제 정의 — Python에서 boto3 라이브러리를 사용하여 AWS Glue Data Catalog에 북마크된 작업의 세부 정보를 가져와야 합니다.
문제 해결 접근 방식 및 알고리즘
1단계 — 예외 처리를 위해 boto3와 botocore.exceptions를 임포트합니다.
2단계 — bookmarked_job_name은 필수 매개변수입니다. 이미 북마크되어 있는 job_name을 지정해야 하며, 그렇지 않으면 EntityNotFoundException이 발생합니다.
3단계 — boto3 라이브러리로 AWS 세션을 생성합니다. 기본 프로필(default profile)에 region_name이 설정되어 있는지 확인하고, 설정되어 있지 않다면 세션 생성 시 region_name을 명시적으로 전달해야 합니다.
4단계 — glue 서비스를 위한 AWS 클라이언트를 생성합니다.
5단계 — 이제 get_job_bookmark 함수를 사용하고, JobName 매개변수에 bookmarked_job_name을 전달합니다.
6단계 — 북마크 항목과 관련된 세부 정보가 반환됩니다. 참고로 해당 job_name이 북마크되어 있지 않으면 EntityNotFound 예외가 발생합니다.
7단계 — 작업 확인 중 문제가 발생할 경우를 대비해 일반 예외(generic exception)도 함께 처리합니다.
예제 코드
아래 코드를 사용하면 AWS Glue Data Catalog에서 북마크된 작업의 세부 정보를 조회할 수 있습니다.
import boto3
from botocore.exceptions import ClientError
def retrieves_details_of_bookmarked_job(bookmarked_job_name):
session = boto3.session.Session()
glue_client = session.client('glue')
try:
response = glue_client.get_job_bookmark(JobName=bookmarked_job_name)
return response
except ClientError as e:
raise Exception("boto3 client error in retrieves_details_of_bookmarked_job: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in retrieves_details_of_bookmarked_job: " + e.__str__())
print(retrieves_details_of_bookmarked_job("book-job"))실행 결과
{'JobBookmarkEntry': {'JobName': 'book-job', 'Version': 8, 'Run': 2,
'Attempt': 2, 'PreviousRunId':
'jr_dee547c2f78422e34136aa12c85de010b823787833eee04fbf34bc9b8cb4f7b9',
'RunId':
'jr_a035fe15daa31e9a751f02876c26e5d11a829f2689803a9e9643bd61f70273e4',
'JobBookmark':
'{"gdf":{"jsonClass":"HadoopDataSourceJobBookmarkState","timestamps":{"R
UN":"1","HIGH_BAND":"900000","CURR_LATEST_PARTITION":"0","CURR_LATEST_PA
RTITIONS":",","CURR_RUN_START_TIME":"2020-10-
30T13:03:43.730Z","INCLUDE_LIST":""}}}'}, 'ResponseMetadata':
{'RequestId': 'bacf1497-***************996f05b3c1', 'HTTPStatusCode':
200, 'HTTPHeaders': {'date': 'Sun, 28 Feb 2021 13:00:19 GMT', 'contenttype': 'application/x-amz-json-1.1', 'content-length': '535',
'connection': 'keep-alive', 'x-amzn-requestid': 'bacf1497-
******************996f05b3c1'}, 'RetryAttempts': 0}}