Ich schreibe eine AWS Lambda-Funktion, die 100.000 Objekte pro Lambda-Funktionsaufruf aus S3-Bucket löscht. Ich versuche zu sehen, ob ich die Löschung auf einem Hintergrundthreads verursachen und laufen lassen kann. Ich habe den folgenden Code.AWS Lambda mehrere Threads und boto3
import boto3
import boto3.session
from threading import Thread
http_response = []
MAX = 999
threads = []
class myThread(Thread):
def __init__(self, objects_to_delete, bucket_name):
Thread.__init__(self)
self.objects_to_delete = objects_to_delete
self.bucket_name = bucket_name
def run(self):
session = boto3.session.Session().client('s3')
s3 = session.client('s3')
####
COMES HERE AND PRINTS THE NAME OF THE BUCKET.
####
print(self.bucket_name)
response = s3.delete_objects(Bucket=bucket_name, Delete={'Objects': objects_to_delete[0:MAX] })
####
THIS IS NOT GETTING PRINTED. MEANING, delete_object IS BREAKING/NOT EXECUTING
####
print(response)
def handler(event, context):
keys = event['keys']
bucket_name = event["bucket"]
if (len(keys) == 0 or len(bucket_name) == 0):
return {
"message": http_response
}
try:
t = myThread(objects_to_delete[0:MAX], bucket_name)
t.start()
threads.append(t)
except:
print("Something Went wrong!!! " + str(objects_to_delete))
del keys[0:MAX]
for i in range(len(threads)):
threads[i].start()
handler({'keys': keys, 'bucket': bucket_name}, context)
Gibt es etwas falsch, was ich hier mache? Es scheint so, als ob der Thread gestartet wird, es wird jedoch kein "delete_objects" -Aufruf ausgeführt. Es werden nicht einmal Fehlermeldungen ausgegeben, um den Fehler zu erfahren. Irgendwelche Gedanken oder Ideen?
Noch eine Sache, wenn ich diese Funktion lokal auf meinem Computer ausführen, läuft es problemlos ohne Probleme.
Warum verwenden Sie Threading? Sie können bis zu 1000 Schlüssel auf einmal löschen, und Sie machen eine einzige Anforderung, um 999 zu löschen. Wenn Sie mehr löschen, sehe ich keine Iterationslogik oder den Boto3-Paginator. –
Entschuldigung, ich werde bis zu 100, 000 löschen Objekte für jeden Lambda-Funktionsaufruf. – Harish
Randbemerkung: Eine effiziente Methode zum Löschen vieler Objekte aus Amazon S3 besteht in der Verwendung einer Lebenszyklusregel, die für einen bestimmten Pfad gilt. Löschungen sind nicht sofort, aber sie werden kostenlos durchgeführt. –