Auf private Objekte in S3 zugreifen

Einführung in AWS Boto mit Python

Maksim Pecherskiy

Data Engineer

Eine private Datei herunterladen

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

Vorschau

Einführung in AWS Boto mit Python

Private Dateien herunterladen

Datei herunterladen

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

Von der Festplatte lesen

pd.read_csv('./potholes_local.csv')
Einführung in AWS Boto mit Python

Auf private Dateien zugreifen

Nutze '.get_object()'

obj = s3.get_object(Bucket='gid-requests', Key='2019/potholes.csv')
print(obj)
Einführung in AWS Boto mit Python

Auf private Dateien zugreifen

Auf private Dateien zugreifen

Einführung in AWS Boto mit Python

Auf private Dateien zugreifen

Objekt holen

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

StreamingBody in pandas lesen

pd.read_csv(obj['Body'])
Einführung in AWS Boto mit Python

Vorangemeldete URLs (Pre-signed URLs)

  • Läuft nach einer bestimmten Zeit ab
  • Ideal für temporären Zugriff

Beispiel

https://?AWSAccessKeyId=12345&Signature=rBmnrwutb6VkJ9hE8Uub%2BBYA9mY%3D&Expires=1557624801
Einführung in AWS Boto mit Python

Vorangemeldete URLs (Pre-signed URLs)

Datei hochladen

s3.upload_file(
  Filename='./potholes.csv', 
  Key='potholes.csv', 
  Bucket='gid-requests')
Einführung in AWS Boto mit Python

Vorangemeldete URLs (Pre-signed URLs)

Vorangemeldete URL erzeugen

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

In pandas öffnen

pd.read_csv(share_url)
Einführung in AWS Boto mit Python

Mehrere Dateien in ein DataFrame laden

# Liste für unsere DataFrames erstellen
df_list = []

# CSVs mit Präfix aus S3 anfordern; Inhalte holen response = s3.list_objects( Bucket='gid-requests', Prefix='2019/')
# Antwortinhalte abrufen request_files = response['Contents']
Einführung in AWS Boto mit Python

Mehrere Dateien in ein DataFrame laden

# Über alle Objekte iterieren
for file in request_files:
    obj = s3.get_object(Bucket='gid-requests', Key=file['Key'])

# Als DataFrame lesen obj_df = pd.read_csv(obj['Body'])
# DataFrame an Liste anhängen df_list.append(obj_df)
Einführung in AWS Boto mit Python

Mehrere Dateien in ein DataFrame laden

# Alle DataFrames in der Liste zusammenführen
df = pd.concat(df_list)

# DataFrame ansehen df.head()

DataFrame-Vorschau

Einführung in AWS Boto mit Python

Überblick: Auf private Objekte in S3 zugreifen

Herunterladen und dann öffnen

s3.download_file()

Direkt öffnen

s3.get_object()

Vorangemeldete URL erzeugen

s3.generate_presigned_url()
Einführung in AWS Boto mit Python

Überblick – URLs teilen

Öffentliche Dateien: Öffentliche Objekt-URL

Mit .format() erzeugen

'https://{bucket}.{key}'
Private Dateien: Vorangemeldete URL

Mit .get_presigned_url() erzeugen

'https://?AWSAccessKeyId=12345&Signature=rBmnrwutb6VkJ9hE8Uub%2BBYA9mY%3D&Expires=1557624801'
Einführung in AWS Boto mit Python

Lass uns üben!

Einführung in AWS Boto mit Python

Preparing Video For Download...