AWS per principianti: S3, deduplicazione e URL presigned
Smetti di costruire app giocattolo. Inizia a costruire sistemi di produzione.
Se il tuo server è usa e getta, i tuoi file non possono risiedere sul suo disco. Hai bisogno di AWS S3. S3 è un object storage. Vive indipendentemente dai tuoi server. Questo garantisce che i tuoi file sopravvivano anche se il tuo server crasha o scompare.
Ecco come costruire un flusso di caricamento file professionale:
Usa S3 Buckets e Keys Un bucket è il tuo contenitore. Una key è il percorso completo del tuo file. S3 non ha vere cartelle. Utilizza i prefissi in una struttura piatta. Puoi organizzare i file per tipo, come images/ o documents/, per mantenere tutto in ordine.
Implementa la deduplicazione dei contenuti Non pagare due volte per lo stesso file. Usa l'algoritmo SHA-256 per creare un'impronta digitale univoca per ogni file. Se due utenti caricano esattamente la stessa immagine, l'hash sarà identico. Controlla il tuo database per questo hash prima di caricare su S3. Se l'hash esiste, riutilizza il file esistente.
Streamma file di grandi dimensioni Non caricare mai un video da 200MB nella RAM del tuo server solo per calcolarne l'hash. Usa gli stream di Node.js per elaborare i file in piccoli chunk. Questo mantiene il server veloce e previene i crash.
Applica limiti alla dimensione dei file Un controllo lato frontend serve solo per l'esperienza utente. Non è sicurezza. Devi applicare i limiti di dimensione su tre livelli: • Lato client per la UX. • Validazione backend per rifiutare tempestivamente le richieste errate. • Condizioni S3 tramite URL presigned per bloccare i caricamenti eccessivi alla fonte.
Usa gli URL presigned per la sicurezza Non rendere il tuo bucket pubblico. Mantieni attiva l'opzione "Block all public access". Invece, genera un URL presigned. Questo conferisce all'utente il permesso temporaneo di caricare un file specifico. Puoi impostare un tempo di scadenza. Usa finestre temporali brevi per i file piccoli e più lunghe per i caricamenti di video di grandi dimensioni.
Verifica il caricamento Non fidarti mai del client. Dopo un caricamento, usa il comando HeadObject per verificare se il file esiste effettivamente in S3 e se la dimensione corrisponde ai tuoi record.
Il flusso di produzione:
- Il client richiede un URL di caricamento.
- Il backend valida dimensione e tipo, e controlla i duplicati.
- Il backend genera un URL presigned con scope limitato.
- Il client carica il file direttamente su S3.
- Il backend conferma l'esistenza del file tramite HeadObject.
Costruisci sistemi che siano sicuri per impostazione predefinita.
Fonte: https://dev.to/surajrkhonde/aws-for-newbies-episode-2-3jg5
