จะเรียกสคริปต์ python ได้อย่างไรเมื่อใดก็ตามที่ข้อมูลใหม่ถูกโหลดลงในที่เก็บข้อมูล s3

Aug 19 2020

ฉันพยายามดึงข้อมูลจากที่เก็บข้อมูล s3 ซึ่งได้รับการบันทึกใหม่ภายในวินาที ข้อมูลมาที่ 250+ G ต่อชั่วโมง ฉันกำลังสร้างสคริปต์ Python ที่จะทำงานอย่างต่อเนื่องเพื่อรวบรวมโหลดข้อมูลใหม่แบบเรียลไทม์ภายในไม่กี่วินาที

นี่คือโครงสร้างของปุ่มถัง 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

ฉันใช้ Boto3 เพื่อลองทำสิ่งนี้และนี่คือสิ่งที่ฉันมีจนถึงตอนนี้:

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)

สิ่งนี้จะส่งออกคีย์ทั้งหมดที่อยู่ในที่เก็บข้อมูลนั้นและจัดเรียงตามข้อมูล last_modified อย่างไรก็ตามมีวิธีหยุดสคริปต์ชั่วคราวจนกว่าข้อมูลใหม่จะถูกโหลดจากนั้นประมวลผลข้อมูลนั้นเป็นต้นในครั้งที่สองหรือไม่? อาจมีความล่าช้า 20 วินาทีเมื่อโหลดข้อมูลใหม่นั่นจึงเป็นอีกสิ่งหนึ่งที่ทำให้ฉันมีปัญหาเมื่อสร้างตรรกะ ความคิดหรือข้อเสนอแนะใด ๆ จะช่วยได้

 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 

นี่เป็นอีกแนวทางหนึ่งที่ฉันพยายาม แต่ไม่ได้ผล ฉันพยายามนอนเมื่อใดก็ตามที่ไม่มีข้อมูลถัดไปจากนั้นประมวลผลข้อมูลใหม่เมื่อโหลดเสร็จแล้ว

คำตอบ

r0ck Aug 19 2020 at 20:52

คุณสมบัติการแจ้งเตือนของ Amazon S3 ช่วยให้คุณสามารถรับการแจ้งเตือนเมื่อมีเหตุการณ์บางอย่างเกิดขึ้นในที่เก็บข้อมูลของคุณ ในการเปิดใช้งานการแจ้งเตือนก่อนอื่นคุณต้องเพิ่มการกำหนดค่าการแจ้งเตือนที่ระบุเหตุการณ์ที่คุณต้องการให้ Amazon S3 เผยแพร่และปลายทางที่คุณต้องการให้ Amazon S3 ส่งการแจ้งเตือน คุณเก็บการกำหนดค่านี้ไว้ในแหล่งข้อมูลย่อยการแจ้งเตือนที่เชื่อมโยงกับที่เก็บข้อมูล - โดยปกติในแลมด้า ...

https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html

หวังว่านี่จะช่วย
r0ck