Comment déclencher un script python chaque fois que de nouvelles données sont chargées dans un bucket s3?
J'essaie d'extraire les données d'un seau s3 qui obtient de nouveaux enregistrements à la seconde. Les données arrivent à plus de 250 G par heure. Je crée un script Python qui fonctionnera en continu pour collecter de nouvelles charges de données en temps réel par secondes .
Voici la structure des clés de compartiment 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
J'utilise Boto3 pour essayer et essayer ceci et voici ce que j'ai jusqu'à présent:
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)
Cela génère toutes les clés qui se trouvent dans ce compartiment et trie par les données last_modified. Cependant, existe-t-il un moyen de suspendre le script jusqu'à ce que de nouvelles données soient chargées, puis de traiter ces données et ainsi de suite à la seconde ? Il pourrait y avoir des retards de 20 secondes lors du chargement des nouvelles données, c'est donc une autre chose qui me pose des problèmes lors de la formation de la logique. Toutes les idées ou suggestions seraient utiles.
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
C'est une autre approche que j'ai essayée mais qui ne fonctionne pas très bien. J'essaie de dormir chaque fois qu'il n'y a pas de données suivantes, puis de traiter les nouvelles données une fois qu'elles sont chargées.
Réponses
La fonctionnalité de notification Amazon S3 vous permet de recevoir des notifications lorsque certains événements se produisent dans votre compartiment. Pour activer les notifications, vous devez d'abord ajouter une configuration de notification qui identifie les événements que vous souhaitez qu'Amazon S3 publie et les destinations où vous souhaitez qu'Amazon S3 envoie les notifications. Vous stockez cette configuration dans la sous-ressource de notification associée à un compartiment. - Typiquement dans Lambda ...
https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html
J'espère que cela aide à
r0ck