이 글에서는 Python의 boto3 라이브러리를 사용하여 AWS Glue 리소스에 연결된 태그(Tag)를 조회하는 방법을 알아봅니다.
예제 시나리오
AWS Glue 데이터베이스에서 "glue-db: test"와 같은 태그 정보를 가져오는 것이 목표입니다.
문제 정의: Python에서 boto3 라이브러리를 활용해 AWS Glue 리소스에 설정된 태그를 조회합니다.
문제 해결 접근 방식 및 알고리즘
1단계: 예외 처리를 위해 boto3와 botocore.exceptions(ClientError)를 임포트합니다.
2단계: resource_arn은 이 함수에서 반드시 필요한 파라미터입니다.
resource_arn은 아래 표와 같은 형식을 따라야 합니다.
| Catalog(카탈로그) | arn:aws:glue:region:account-id:catalog |
| Database(데이터베이스) | arn:aws:glue:region:account-id:database/database-name |
| Table(테이블) | arn:aws:glue:region:account-id:table/database-name/table-name |
| Connection(연결) | arn:aws:glue:region:account-id:connection/connection-name |
| Crawler(크롤러) | arn:aws:glue:region:account-id:crawler/crawler-name |
| Job(작업) | arn:aws:glue:region:account-id:job/job-name |
| Trigger(트리거) | arn:aws:glue:region:account-id:trigger/trigger-name |
| Development Endpoint(개발 엔드포인트) | arn:aws:glue:region:account-id:devEndpoint/development-endpoint-name |
| ML Transform(머신 러닝 변환) | arn:aws:glue:region:account-id:mlTransform/transform-id |
3단계: boto3 라이브러리를 사용하여 AWS 세션(Session)을 생성합니다. 이때 기본 프로필(default profile)에 region_name이 설정되어 있는지 확인하세요. 만약 설정되어 있지 않다면, 세션 생성 시 region_name을 명시적으로 전달해야 합니다.
4단계: glue 서비스를 위한 AWS 클라이언트를 생성합니다.
5단계: get_tags 함수를 호출하고, 앞서 준비한 resource_arn 값을 ResourceArn 파라미터로 전달합니다.
6단계: 해당 리소스의 태그(Tags)와 응답 메타데이터(ResponseMetadata)가 반환됩니다.
7단계: 태그 조회 과정에서 오류가 발생할 경우 일반 예외(generic exception)를 처리하여 안정성을 확보합니다.
예제 코드
아래 코드를 사용하면 Glue 리소스의 태그를 조회할 수 있습니다.
import boto3
from botocore.exceptions import ClientError
def get_tags_from_resource(resource_arn):
session = boto3.session.Session()
glue_client = session.client('glue')
try:
response = glue_client.get_tags(ResourceArn=resource_arn)
return response
except ClientError as e:
raise Exception("boto3 client error in get_tags_from_resource: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in get_tags_from_resource: " + e.__str__())
print(get_tags_from_resource("arn:aws:glue:us-east-1:1122225*****88:database/test-db"))
실행 결과(Output)
{'Tags': {'glue-job': 'test'}, 'ResponseMetadata': {'RequestId': 'c9f418b0-8d02-4a26-*************', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Fri, 02 Apr 2021 08:04:54 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '27', 'connection': 'keep-alive', 'x-amzn-requestid': 'c9f418b0-8d02-4a26-**************'}, 'RetryAttempts': 0}}
위 출력 결과에서 볼 수 있듯이, Tags 필드에 해당 리소스에 연결된 태그가 딕셔너리 형태로 반환되며, ResponseMetadata에는 요청 ID, HTTP 상태 코드(200), 재시도 횟수 등 API 호출에 대한 상세 정보가 포함됩니다.