2015-11-18 13 views
18

Ho un intervallo di file JSON memorizzati in un bucket S3 su AWS.Lettura dati da S3 utilizzando Lambda

Desidero utilizzare il servizio lambda python di AWS per analizzare questo json e inviare i risultati analizzati a un database MySQL AWS RDS.

Ho uno script python stabile per eseguire l'analisi e la scrittura nel database. Ho bisogno di script lambda per scorrere i file JSON (quando vengono aggiunti).

Ogni file JSON contiene un elenco, semplice che consiste di results = [content]

In pseudo-codice quello che voglio è:

  1. Collegare al secchio S3 (jsondata)
  2. Leggere il contenuto della di file JSON (results)
  3. Esegui il mio script per questi dati (results)

posso elencare i secchi che ho da:

import boto3 

s3 = boto3.resource('s3') 

for bucket in s3.buckets.all(): 
    print(bucket.name) 

Dare:

jsondata 

Ma non posso accedere a questo secchio di leggere i suoi risultati.

Non sembra essere una funzione read o load.

auguro per qualcosa come

for bucket in s3.buckets.all(): 
    print(bucket.contents) 

EDIT

sto malinteso qualcosa. Invece di leggere il file in S3, lambda deve scaricarlo da sé.

Da here sembra che si deve dare lambda un percorso di download, da cui si può accedere ai file si

import libraries 

s3_client = boto3.client('s3') 

def function to be executed: 
    blah blah 

def handler(event, context): 
    for record in event['Records']: 
     bucket = record['s3']['bucket']['name'] 
     key = record['s3']['object']['key'] 
     download_path = '/tmp/{}{}'.format(uuid.uuid4(), key) 
     s3_client.download_file(bucket, key, download_path) 

risposta

7

È possibile utilizzare bucket.objects.all() per ottenere un elenco di tutti gli oggetti nel secchio (anche disporre di metodi alternativi come filter, page_size e limit a seconda della necessità)

Questi metodi restituiscono un iteratore con S3.ObjectSummary oggetti in esso, da lì si può utilizzare il metodo object.get per recuperare il file.

11
s3 = boto3.client('s3') 
response = s3.get_object(Bucket=bucket, Key=key) 
emailcontent = response['Body'].read().decode('utf-8') 
+0

Occorre inoltre notare che è necessario creare un oggetto s3 da utilizzare nella risposta. per esempio 's3 = boto3.client ('s3')' – ScottMcC

Problemi correlati