Bagaimana cara memicu skrip python setiap kali data baru dimuat ke dalam ember s3?

Aug 19 2020

Saya mencoba menarik data dari ember s3 yang mendapat catatan baru setiap detik. Data masuk dengan kecepatan 250+ G per jam. Saya membuat skrip Python yang akan berjalan terus menerus untuk mengumpulkan beban data baru secara real-time per detik .

Berikut adalah struktur kunci bucket 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

Saya menggunakan Boto3 untuk mencoba dan mencoba ini dan inilah yang saya miliki sejauh ini:

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)

Ini mengeluarkan semua kunci yang ada di keranjang itu dan diurutkan berdasarkan data last_modified. Namun apakah ada cara untuk menghentikan sementara skrip sampai data baru dimuat dan kemudian memproses data tersebut dan seterusnya setiap detik ? Mungkin ada penundaan 20 detik saat memuat data baru sehingga hal lain yang memberi saya masalah saat membentuk logika. Ide atau saran apa pun akan membantu.

 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 

Ini adalah pendekatan lain yang saya coba tetapi tidak berhasil dengan baik. Saya mencoba untuk tidur setiap kali tidak ada data berikutnya dan kemudian memproses data baru setelah dimuat.

Jawaban

r0ck Aug 19 2020 at 20:52

Fitur pemberitahuan Amazon S3 memungkinkan Anda menerima pemberitahuan saat peristiwa tertentu terjadi di bucket Anda. Untuk mengaktifkan pemberitahuan, Anda harus terlebih dahulu menambahkan konfigurasi pemberitahuan yang mengidentifikasi peristiwa yang Anda inginkan untuk diterbitkan oleh Amazon S3 dan tujuan tempat Anda ingin Amazon S3 mengirimkan pemberitahuan. Anda menyimpan konfigurasi ini di subresumber notifikasi yang terkait dengan bucket. - Biasanya di Lambda ...

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

Semoga ini membantu
r0ck