Truy cập đối tượng riêng tư trên S3

Giới thiệu về AWS Boto trong Python

Maksim Pecherskiy

Data Engineer

Tải xuống tệp riêng tư

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

Xem trước

Giới thiệu về AWS Boto trong Python

Tải xuống tệp riêng tư

Tải tệp

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

Đọc từ đĩa

pd.read_csv('./potholes_local.csv')
Giới thiệu về AWS Boto trong Python

Truy cập tệp riêng tư

Dùng '.get_object()'

obj = s3.get_object(Bucket='gid-requests', Key='2019/potholes.csv')
print(obj)
Giới thiệu về AWS Boto trong Python

Truy cập tệp riêng tư

Truy cập tệp riêng tư

Giới thiệu về AWS Boto trong Python

Truy cập tệp riêng tư

Lấy đối tượng

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

Đọc StreamingBody vào Pandas

pd.read_csv(obj['Body'])
Giới thiệu về AWS Boto trong Python

URL có chữ ký trước

  • Hết hạn sau một khoảng thời gian
  • Tốt cho truy cập tạm thời

Ví dụ

https://?AWSAccessKeyId=12345&Signature=rBmnrwutb6VkJ9hE8Uub%2BBYA9mY%3D&Expires=1557624801
Giới thiệu về AWS Boto trong Python

URL có chữ ký trước

Tải tệp lên

s3.upload_file(
  Filename='./potholes.csv', 
  Key='potholes.csv', 
  Bucket='gid-requests')
Giới thiệu về AWS Boto trong Python

URL có chữ ký trước

Tạo URL có chữ ký

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

Mở bằng Pandas

pd.read_csv(share_url)
Giới thiệu về AWS Boto trong Python

Tải nhiều tệp vào một DataFrame

# Tạo danh sách để chứa các DataFrame
df_list = []

# Lấy danh sách các csv từ S3 theo tiền tố; lấy nội dung response = s3.list_objects( Bucket='gid-requests', Prefix='2019/')
# Lấy nội dung phản hồi request_files = response['Contents']
Giới thiệu về AWS Boto trong Python

Tải nhiều tệp vào một DataFrame

# Lặp qua từng đối tượng
for file in request_files:
    obj = s3.get_object(Bucket='gid-requests', Key=file['Key'])

# Đọc thành DataFrame obj_df = pd.read_csv(obj['Body'])
# Thêm DataFrame vào danh sách df_list.append(obj_df)
Giới thiệu về AWS Boto trong Python

Tải nhiều tệp vào một DataFrame

# Nối tất cả DataFrame trong danh sách
df = pd.concat(df_list)

# Xem nhanh DataFrame df.head()

Xem trước DataFrame

Giới thiệu về AWS Boto trong Python

Ôn tập Truy cập đối tượng riêng tư trên S3

Tải xuống rồi mở

s3.download_file()

Mở trực tiếp

s3.get_object()

Tạo URL có chữ ký

s3.generate_presigned_url()
Giới thiệu về AWS Boto trong Python

Ôn tập - Chia sẻ URL

Tệp công khai: URL đối tượng công khai

Tạo bằng .format()

'https://{bucket}.{key}'
Tệp riêng tư: URL có chữ ký

Tạo bằng .get_presigned_url()

'https://?AWSAccessKeyId=12345&Signature=rBmnrwutb6VkJ9hE8Uub%2BBYA9mY%3D&Expires=1557624801'
Giới thiệu về AWS Boto trong Python

Ayo berlatih!

Giới thiệu về AWS Boto trong Python

Preparing Video For Download...