Mengakses objek privat di S3

Pengantar AWS Boto di Python

Maksim Pecherskiy

Data Engineer

Mengunduh file privat

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

Pratinjau

Pengantar AWS Boto di Python

Mengunduh file privat

Unduh file

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

Baca dari disk

pd.read_csv('./potholes_local.csv')
Pengantar AWS Boto di Python

Mengakses file privat

Gunakan '.get_object()'

obj = s3.get_object(Bucket='gid-requests', Key='2019/potholes.csv')
print(obj)
Pengantar AWS Boto di Python

Mengakses file privat

Mengakses file privat

Pengantar AWS Boto di Python

Mengakses file privat

Ambil objek

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

Baca StreamingBody ke Pandas

pd.read_csv(obj['Body'])
Pengantar AWS Boto di Python

URL pra-tanda tangan

  • Kedaluwarsa setelah waktu tertentu
  • Cocok untuk akses sementara

Contoh

https://?AWSAccessKeyId=12345&Signature=rBmnrwutb6VkJ9hE8Uub%2BBYA9mY%3D&Expires=1557624801
Pengantar AWS Boto di Python

URL pra-tanda tangan

Unggah file

s3.upload_file(
  Filename='./potholes.csv', 
  Key='potholes.csv', 
  Bucket='gid-requests')
Pengantar AWS Boto di Python

URL pra-tanda tangan

Buat URL pra-tanda tangan

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

Buka di Pandas

pd.read_csv(share_url)
Pengantar AWS Boto di Python

Muat banyak file ke satu DataFrame

# Buat list untuk menampung DataFrame
df_list = []

# Minta daftar file csv di S3 dengan prefix; ambil konten response = s3.list_objects( Bucket='gid-requests', Prefix='2019/')
# Ambil konten respons request_files = response['Contents']
Pengantar AWS Boto di Python

Muat banyak file ke satu DataFrame

# Iterasi tiap objek
for file in request_files:
    obj = s3.get_object(Bucket='gid-requests', Key=file['Key'])

# Baca sebagai DataFrame obj_df = pd.read_csv(obj['Body'])
# Tambahkan DataFrame ke list df_list.append(obj_df)
Pengantar AWS Boto di Python

Muat banyak file ke satu DataFrame

# Gabungkan semua DataFrame dalam list
df = pd.concat(df_list)

# Pratinjau DataFrame df.head()

Pratinjau DataFrame

Pengantar AWS Boto di Python

Ringkasan Mengakses objek privat di S3

Unduh lalu buka

s3.download_file()

Buka langsung

s3.get_object()

Buat URL pra-tanda tangan

s3.generate_presigned_url()
Pengantar AWS Boto di Python

Ringkasan - Berbagi URL

File Publik: Public Object URL

Buat dengan .format()

'https://{bucket}.{key}'
File Privat: Presigned URL

Buat dengan .get_presigned_url()

'https://?AWSAccessKeyId=12345&Signature=rBmnrwutb6VkJ9hE8Uub%2BBYA9mY%3D&Expires=1557624801'
Pengantar AWS Boto di Python

Ayo berlatih!

Pengantar AWS Boto di Python

Preparing Video For Download...