¿Cómo activar un script de Python cada vez que se cargan nuevos datos en un bucket de s3?
Estoy tratando de extraer datos de un depósito s3 que obtiene nuevos registros por segundo. Los datos llegan a más de 250 G por hora. Estoy creando un script Python que se ejecutará continuamente para recopilar nuevas cargas de datos en tiempo real por segundos .
Aquí está la estructura de las claves del depósito 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
Estoy usando Boto3 para intentarlo y esto es lo que tengo hasta ahora:
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)
Esto genera todas las claves que están en ese depósito y las clasifica por los datos last_modified. Sin embargo, ¿hay alguna manera de pausar la secuencia de comandos hasta que se carguen nuevos datos y luego procesar esos datos y así sucesivamente por segundo ? Podría haber retrasos de 20 segundos cuando se cargan los nuevos datos, por lo que es otra cosa que me está dando problemas al formar la lógica. Cualquier idea o sugerencia ayudaría.
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
Este es otro enfoque que probé pero no está funcionando bien. Intento dormir cada vez que no hay datos siguientes y luego procesar los nuevos datos una vez que se cargan.
Respuestas
La función de notificación de Amazon S3 le permite recibir notificaciones cuando ocurren ciertos eventos en su depósito. Para habilitar las notificaciones, primero debe agregar una configuración de notificación que identifique los eventos que desea que Amazon S3 publique y los destinos a los que desea que Amazon S3 envíe las notificaciones. Almacena esta configuración en el subrecurso de notificación que está asociado con un depósito. - Normalmente en Lambda ...
https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html
Espero que esto ayude a
r0ck