이 글에서는 Python의 boto3 라이브러리를 사용하여 AWS Glue 카탈로그에 생성된 워크플로(Workflow)의 세부 정보를 업데이트하는 방법을 알아봅니다.
문제 정의
계정에 이미 생성되어 있는 워크플로의 설명(Description)과 기본 실행 속성(Default Run Properties)을 boto3를 활용해 수정하는 것이 목표입니다.
해결 접근 방식 및 알고리즘
- 1단계: 예외 처리를 위해 boto3와 botocore.exceptions 모듈을 임포트합니다.
- 2단계: 이 함수에서 workflow_name은 필수 파라미터이며, Description과 default_run_properties는 선택적 파라미터입니다. 이 함수는 지정된 워크플로의 세부 정보를 갱신합니다.
- 3단계: boto3 라이브러리를 사용해 AWS 세션을 생성합니다. 기본 프로필에 region_name이 설정되어 있는지 확인하고, 설정되어 있지 않다면 세션 생성 시 명시적으로 region_name을 전달해야 합니다.
- 4단계: glue 서비스를 위한 AWS 클라이언트를 생성합니다.
- 5단계: update_workflow 함수를 호출하면서 Name 파라미터에는 workflow_name을, Description 파라미터에는 설명을, DefaultRunProperties 파라미터에는 default_run_properties를 전달합니다.
- 6단계: 호출 결과로 해당 워크플로의 메타데이터가 반환됩니다.
- 7단계: 작업 수행 중 오류가 발생할 경우 일반 예외(generic exception)를 처리합니다.
예제 코드
아래 코드는 사용자 계정에 생성된 워크플로의 세부 정보를 업데이트하는 예시입니다.
import boto3
from botocore.exceptions import ClientError
def update_resource_detail_of_workflow(workflow_name, description=None, default_run_properties=None):
session = boto3.session.Session()
glue_client = session.client('glue')
try:
response = glue_client.update_workflow(
Name=workflow_name,
Description=description,
DefaultRunProperties=default_run_properties
)
return response
except ClientError as e:
raise Exception("boto3 client error in update_resource_detail_of_workflow: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in update_resource_detail_of_workflow: " + e.__str__())
a = update_resource_detail_of_workflow('dev-aiml-naviga-ods-load', 'test')
print(a)
실행 결과
코드를 실행하면 아래와 같이 업데이트된 워크플로의 이름과 응답 메타데이터가 출력됩니다. HTTP 상태 코드 200은 요청이 성공적으로 처리되었음을 의미합니다.
{'Name': 'dev-aiml-naviga-ods-load', 'ResponseMetadata': {'RequestId': 'b328d064-24ab-48c4-b058-852387a3d474', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Sat, 27 Feb 2021 13:57:37 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '2655', 'connection': 'keep-alive', 'x-amzn-requestid': 'b328d064-24ab-48c4-b058-852387a3d474'}, 'RetryAttempts': 0}}정리
boto3의 update_workflow API를 사용하면 별도의 콘솔 작업 없이 코드만으로 AWS Glue 워크플로의 설명과 기본 실행 속성을 손쉽게 변경할 수 있습니다. ClientError와 일반 Exception을 분리하여 처리하면 오류 원인을 더 명확하게 진단할 수 있다는 점도 기억해 두면 좋습니다.