문제 정의
Python의 boto3 라이브러리를 사용하여 S3 버킷의 위치(리전) 정보를 조회해야 합니다. 예를 들어, S3에 존재하는 Bucket_1이 어느 리전에 생성되어 있는지 확인하는 것이 목표입니다.
해결 접근 방식
1단계 – boto3와 botocore.exceptions를 임포트하여 발생 가능한 예외를 처리할 수 있도록 준비합니다.
2단계 – 함수의 매개변수로 bucket_name을 전달받습니다.
3단계 – boto3 라이브러리를 이용해 AWS 세션(Session)을 생성합니다.
4단계 – 해당 세션으로 S3 전용 AWS 클라이언트 객체를 만듭니다.
5단계 – get_bucket_location 함수를 호출하고 버킷 이름을 인자로 넘깁니다.
6단계 – 함수는 S3 버킷 관련 세부 정보가 담긴 딕셔너리를 반환합니다.
7단계 – 작업 도중 오류가 발생하면 일반 예외(generic exception)를 처리하여 안정성을 확보합니다.
예제 코드
다음 코드를 사용하면 버킷의 위치를 손쉽게 확인할 수 있습니다.
import boto3
from botocore.exceptions import ClientError
def get_bucket_location_of_s3(bucket_name):
session = boto3.session.Session()
s3_client = session.client('s3')
try:
result = s3_client.get_bucket_location(Bucket=bucket_name,)
except ClientError as e:
raise Exception("boto3 client error in get_bucket_location_of_s3: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in get_bucket_location_of_s3 function: " + e.__str__())
return result
print(get_bucket_location_of_s3("Bucket_1"))실행 결과
{
'LocationConstraint': 'us-west-2'|'us-west-1'|'us-east-2'|'us-east1',
'ResponseMetadata': {
'...': '...',
},
}추가 팁
응답 결과의 LocationConstraint 값은 해당 버킷이 생성된 리전을 의미합니다. 다만 주의할 점이 하나 있는데, 미국 동부(버지니아 북부) 리전인 us-east-1에 생성된 버킷은 LocationConstraint가 None으로 반환됩니다. 따라서 실무에서는 반환값이 None일 경우 기본값으로 us-east-1을 처리하는 로직을 추가하는 것이 좋습니다.