문제 상황 – Python에서 Boto3 라이브러리를 사용하여 AWS 계정에 존재하는 모든 S3 버킷의 목록을 조회하고자 합니다.
예시 – BUCKET_1, BUCKET_2, BUCKET_3처럼 각 버킷의 이름을 가져오는 것이 목표입니다.
문제 해결 접근 방식
1단계 – boto3와 botocore의 예외 처리 모듈(ClientError)을 임포트합니다.
2단계 – Boto3 라이브러리를 이용해 AWS 세션(Session)을 생성합니다.
3단계 – 해당 세션으로 S3 전용 AWS 클라이언트를 생성합니다.
4단계 – list_buckets() 함수를 호출하여 ResponseMetadata, Buckets 등 버킷 관련 속성 전체를 딕셔너리 형태로 저장합니다.
5단계 – for 반복문을 사용해 딕셔너리에서 이름(Name), 생성일(Creation Date) 등 버킷별 세부 정보만 추출합니다.
6단계 – 버킷 정보 중 Name(이름) 값만 골라 리스트에 저장합니다.
7단계 – 실행 중 발생할 수 있는 예외 상황을 적절히 처리합니다.
8단계 – 최종적으로 버킷 이름 리스트를 반환합니다.
코드 구현 예시
아래 코드는 S3에 존재하는 버킷 목록을 조회합니다.
import boto3
from botocore.exceptions import ClientError
# S3 클라이언트를 사용해 AWS에 있는 버킷 목록 가져오기
def get_buckets_client():
session = boto3.session.Session()
# 필요하다면 access_key, secret_key, token을 직접 전달할 수도 있습니다
s3_client = session.client('s3')
try:
response = s3_client.list_buckets()
buckets = []
for bucket in response['Buckets']:
buckets.append(bucket["Name"])
except ClientError:
print("버킷 목록을 가져올 수 없습니다.")
raise
else:
return buckets
print(get_buckets_client())실행 결과
['BUCKET_1', 'BUCKET_2', 'BUCKET_3'……..]
추가 팁
기본 설정에서는 AWS CLI에 구성된 자격 증명(profile)이 자동으로 사용됩니다. 특정 자격 증명을 지정하고 싶다면 boto3.session.Session(aws_access_key_id='...', aws_secret_access_key='...', aws_session_token='...') 형태로 파라미터를 전달하면 됩니다. 또한 버킷 개수가 많은 대형 계정이라면 반환된 결과를 정렬하거나 리전별로 필터링하면 관리가 더욱 편리합니다.