S3에서 비공개 객체 액세스

Python으로 시작하는 AWS Boto

Maksim Pecherskiy

Data Engineer

비공개 파일 다운로드

df = pd.read_csv('https://gid-staging.potholes.csv')

미리보기

Python으로 시작하는 AWS Boto

비공개 파일 다운로드

파일 다운로드

s3.download_file(
  Filename='potholes_local.csv',
  Bucket='gid-staging', 
  Key='2019/potholes_private.csv')

디스크에서 읽기

pd.read_csv('./potholes_local.csv')
Python으로 시작하는 AWS Boto

비공개 파일 액세스

'.get_object()' 사용

obj = s3.get_object(Bucket='gid-requests', Key='2019/potholes.csv')
print(obj)
Python으로 시작하는 AWS Boto

비공개 파일 액세스

비공개 파일 액세스

Python으로 시작하는 AWS Boto

비공개 파일 액세스

객체 가져오기

obj = s3.get_object(
  Bucket='gid-requests', 
  Key='2019/potholes.csv')

StreamingBody를 Pandas로 읽기

pd.read_csv(obj['Body'])
Python으로 시작하는 AWS Boto

사전 서명된 URL

  • 일정 시간 후 만료됨
  • 임시 액세스에 적합

예시

https://?AWSAccessKeyId=12345&Signature=rBmnrwutb6VkJ9hE8Uub%2BBYA9mY%3D&Expires=1557624801
Python으로 시작하는 AWS Boto

사전 서명된 URL

파일 업로드

s3.upload_file(
  Filename='./potholes.csv', 
  Key='potholes.csv', 
  Bucket='gid-requests')
Python으로 시작하는 AWS Boto

사전 서명된 URL

사전 서명 URL 생성

share_url = s3.generate_presigned_url(
  ClientMethod='get_object',
  ExpiresIn=3600,
  Params={'Bucket': 'gid-requests','Key': 'potholes.csv'}
)

Pandas에서 열기

pd.read_csv(share_url)
Python으로 시작하는 AWS Boto

여러 파일을 하나의 DataFrame으로 로드

# DataFrame을 담을 리스트 생성
df_list = []

# 접두사로 S3에서 csv 목록 요청; 내용 가져오기 response = s3.list_objects( Bucket='gid-requests', Prefix='2019/')
# 응답 내용 가져오기 request_files = response['Contents']
Python으로 시작하는 AWS Boto

여러 파일을 하나의 DataFrame으로 로드

# 각 객체 순회
for file in request_files:
    obj = s3.get_object(Bucket='gid-requests', Key=file['Key'])

# DataFrame으로 읽기 obj_df = pd.read_csv(obj['Body'])
# 리스트에 DataFrame 추가 df_list.append(obj_df)
Python으로 시작하는 AWS Boto

여러 파일을 하나의 DataFrame으로 로드

# 리스트의 모든 DataFrame 연결
df = pd.concat(df_list)

# DataFrame 미리보기 df.head()

DataFrame 미리보기

Python으로 시작하는 AWS Boto

검토: S3 비공개 객체 액세스

다운로드 후 열기

s3.download_file()

바로 열기

s3.get_object()

사전 서명 URL 생성

s3.generate_presigned_url()
Python으로 시작하는 AWS Boto

검토 - URL 공유

공개 파일: 공개 객체 URL

.format()으로 생성

'https://{bucket}.{key}'
비공개 파일: 사전 서명 URL

.get_presigned_url()로 생성

'https://?AWSAccessKeyId=12345&Signature=rBmnrwutb6VkJ9hE8Uub%2BBYA9mY%3D&Expires=1557624801'
Python으로 시작하는 AWS Boto

연습해 봅시다!

Python으로 시작하는 AWS Boto

Preparing Video For Download...