Come attivare uno script Python ogni volta che vengono caricati nuovi dati in un bucket s3?
Sto cercando di estrarre i dati da un bucket s3 che ottiene nuovi record al secondo. I dati arrivano a 250+ G all'ora. Sto creando uno script Python che verrà eseguito continuamente per raccogliere nuovi caricamenti di dati in tempo reale ogni secondo .
Ecco la struttura delle chiavi del secchio s3:
o_key=7111/year=2020/month=8/day=11/hour=16/minute=46/second=9/ee9.jsonl.gz
o_key=7111/year=2020/month=8/day=11/hour=16/minute=40/second=1/ee99999.jsonl.gz
Sto usando Boto3 per provare e provare questo ed ecco cosa ho finora:
s3_resource = boto3.resource('s3', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY, verify=False)
s3_bucket = s3_resource.Bucket(BUCKET_NAME)
files = s3_bucket.objects.filter()
files = [obj.key for obj in sorted(files, key=lambda x: x.last_modified, reverse=True)]
for x in files:
print(x)
Questo restituisce tutte le chiavi che si trovano in quel bucket e le ordina in base ai dati last_modified. Tuttavia, esiste un modo per mettere in pausa lo script finché non vengono caricati nuovi dati e quindi elaborare tali dati e così via al secondo ? Potrebbero esserci 20 secondi di ritardo quando vengono caricati i nuovi dati, quindi questa è un'altra cosa che mi dà problemi durante la formazione della logica. Eventuali idee o suggerimenti aiuterebbero.
s3_resource = boto3.resource('s3', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY, verify=False)
s3_bucket = s3_resource.Bucket(BUCKET_NAME)
files = s3_bucket.objects.filter()
while list(files): #check if the key exists
if len(objs) > 0 and objs[0].key == key:
print("Exists!")
else:
time.sleep(.1) #sleep until the next key is there
continue
Questo è un altro approccio che ho provato ma non funziona bene. Sto cercando di dormire ogni volta che non ci sono dati successivi e quindi elaborare i nuovi dati una volta caricati.
Risposte
La funzione di notifica di Amazon S3 ti consente di ricevere notifiche quando si verificano determinati eventi nel tuo bucket. Per abilitare le notifiche, devi prima aggiungere una configurazione di notifica che identifichi gli eventi che desideri che Amazon S3 pubblichi e le destinazioni in cui desideri che Amazon S3 invii le notifiche. Questa configurazione viene archiviata nella sottorisorsa di notifica associata a un bucket. - Tipicamente in Lambda ...
https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html
Spero che questo aiuti
r0ck