Was ist das beste Design eines Systems, das eine Datei auf S3 hochlädt, als die Größe mit Lambda zu ändern, aber mit dem gleichen Schlüssel wie hochgeladen, ohne die Größe Lambda-Funktion zweimal oder mehr auszulösen?
user
Hier ist ein mögliches Design für ein System, das eine Datei auf S3 hochlädt und mit AWS Lambda die Größe ändert, ohne die Größe der Lambda-Funktion mehrmals zu ändern: Der Benutzer lädt eine Datei auf einen S3 Eimer hoch. S3 erzeugt ein "Put Object"-Ereignis und löst eine Lambda-Funktion aus. Die Lambda-Funktion überprüft, ob die hochgeladene Datei bereits durch Überprüfung der Größe der Datei in demselben S3 Eimer mit derselben Taste, aber einer anderen Dateierweiterung (z.B. ".Resized") verändert wurde. Wenn die Größe der Datei existiert, kehrt die Lambda-Funktion ohne weitere Änderungen zurück. Wenn die Größe der Datei nicht existiert, liest die Lambda-Funktion die Originaldatei von S3 aus, führt die Größe der Datei zurück und schreibt die Größe der Datei mit demselben Schlüssel zurück auf S3, aber mit einer anderen Dateierweiterung. Die Lambda-Funktion aktualisiert die Metadaten der Originaldatei in S3 mit einer Flagge, die anzeigt, dass die Datei verändert wurde. Dieses Design stellt sicher, dass die Lambda-Funktion nur einmal für jede hochgeladene Datei ausgelöst wird, und dass die Größe der Speicher in der gleichen Datei in der Originaldatei gespeichert wird.
assistant
Vorschlagen Sie einen alternativen Ansatz, der die ursprünglichen Dateinamen behält.
user
Eine mögliche Lösung für dieses Problem ist die Verwendung von Amazon S3s Objekt-Metadaten und AWS Step-Funktionen zur Koordinierung des Datei-Uploads und Bild-Resizing-Prozess. Hier ist eine hochrangige Übersicht über das System-Design: Datei-Upload: Wenn ein Benutzer eine Datei in den S3 Eimer hochlädt, wird ein Metadaten-Eintrag zu dem Objekt hinzugefügt, das eine Flagge enthält, die anzeigt, dass die Datei nicht verarbeitet wurde. Schritt-Funktion: Die Schritt-Funktion wird durch ein S3 Bucket Objekt-Erstellungsereignis ausgelöst, und es enthält zwei Zustände: einen Wartezustand und einen Lambda-Funktionszustand. Wartezustand: In diesem Zustand wartet die Schritt-Funktion auf einen bestimmten Zeitraum (z.B. 5 Minuten), um sicherzustellen, dass das S3 Objekt hochgeladen wurde und vollständig verfügbar ist. Lambda-Funktionsstatus: Der Lambda-Funktionszustand ist verantwortlich für die Überprüfung der Metadaten-Flagge auf dem S3 Objekt. Wenn die Flagge anzeigt, dass die Datei nicht verarbeitet wurde, wird die Lambda-Funktion die Datei aktualisiert und die Metadaten-Flagge aktualisiert, um anzugeben, dass die Datei verarbeitet wurde.
assistant