Was ist das beste Design eines Systems, das eine Datei auf S3 hochlädt, sie dann mit Lambda verkleinert, aber den gleichen Schlüssel wie beim Hochladen verwendet, ohne die Resize-Lambda-Funktion zweimal oder öfter auszulösen?
Eine mögliche Lösung für dieses Problem besteht darin, einen S3-Bucket-Ereignisauslöser zu verwenden, um die Verkleinerungs-Lambda-Funktion auszulösen, wenn eine neue Datei auf den S3-Bucket hochgeladen wird. Sie können das Ereignis so einstellen, dass die Lambda-Funktion nur ausgelöst wird, wenn ein neues Objekt erstellt wird und nicht, wenn es geändert wird. Die Lambda-Funktion kann dann die Datei verkleinern und die verkleinerte Version im selben S3-Bucket mit demselben Schlüssel wie die Originaldatei speichern, jedoch mit einem anderen Dateiformat (z.B. durch Hinzufügen von "_resized" zum Dateinamen).

Zusätzlich können Sie in der Lambda-Funktion eine Überprüfung hinzufügen, um sicherzustellen, dass die Datei nur einmal verkleinert wird. Sie können z.B. Metadaten im Objekt-Metadaten in S3 speichern, um anzuzeigen, ob die Datei bereits verkleinert wurde oder nicht. Vor der Verkleinerung kann die Lambda-Funktion diese Metadaten überprüfen und die Datei nur verkleinern, wenn sie noch nicht verkleinert wurde.

Durch Kombination dieser beiden Strategien können Sie sicherstellen, dass die Lambda-Funktion nur einmal für jede neue Datei, die auf den S3-Bucket hochgeladen wird, ausgelöst wird und dass die verkleinerte Version mit dem gleichen Schlüssel wie die Originaldatei im selben S3-Bucket gespeichert wird.