Usiamo S3 come database integrando S3-select.
S3 (Simple Storage Service) è il servizio di Amazon Web Services pensato come Object Storage. Lanciato in Europa nel 2007 è uno dei primi servizi cloud di AWS.
Viene usato per svariati contesti:
- backup
- migrazioni
- salvataggio di file statici per siti web
- storage di supporto a flussi di analisi dei dati
- hosting per siti web statici (client-side)
Questi sono solo alcuni casi di utilizzo. Amazon S3 viene integrato in tanti altri servizi di casa AWS diventando quindi uno dei più diffusi e utilizzati.
Nel 2018 è stata rilasciata una funzionalità molto utile e interessante che ha aggiunto ulteriori potenzialità al servizio cloud: S3-Select
Con questa feature è possibile ottenere alcune parti di contenuti effettuando delle Query SQL. Sono presenti alcuni limiti, ma per dettagli rimando alla documentazione ufficiale.
Riassumendo in una frase il vantaggio principale:
È possibile effettuare query SQL su un file JSON o CSV.
Questa opzione ci permette di pensare a S3 non ‘solo’ come uno storage, ma come un database in grado di memorizzare oggetti JSON e di poterli ottenere con normali operazioni sql.
È possibile effettuare query tramite s3-select anche tramite console web. Selezionare il bucket e quindi il file su cui effettuare la query.
Object actions -> Query with S3 Select
Approfondiamo insieme!
Perché non possiamo considerarlo un vero Database
La risposta semplice è perché, effettivamente, non è un servizio di DBMS, ma un servizio di Storage (come infatti lo definisce AWS).
Qui ulteriori considerazioni a supporto.
- I dati devono essere in un unico file e non possono essere raggruppati sotto un prefisso.
- Non si possono effettuare join tra tabelle
- Non si può aggiornare una singola voce, ma occorre sostituire l’intero file
Perché possiamo usarlo come un database
S3-select permette di effettuare query sql per ottenere un subset di dati da un nostro file JSON o CSV.
Questo ci permette di considerarlo un database, avendo anche a disposizione il linguaggio SQL per ottenere i dati.
La gestione database diventa difficile nel caso in cui abbiamo bisogno di un dbms che debba gestire molteplici operazioni di scrittura.
Aws ha aggiunto di recente una nuova feature a S3 che lo rende Strong Consistency. Questo vuol dire che operazioni di lettura avranno sempre il dato più aggiornato (approfondimenti: https://aws.amazon.com/s3/consistency/)..)
Tuttavia l’aggiornamento di un ‘record’ è complicato. È infatti necessario eliminare e sostituire l’intero file.
Quando possiamo utilizzarlo
S3 può essere utilizzato come dbms in determinati contesti.
È sicuramente utile in flussi di analisi dei dati che devono per lo più effettuare operazioni di lettura. S3 è infatti perfettamente integrato con servizi di bigdata quali AWS Redshift o AWS Athena.
È tuttavia possibile utilizzare S3 come database anche per API che necessitano di operazioni in lettura.
Capita spesso di dover esporre API in modalità GET con dati che difficilmente (se non addirittura mai) subiscono modifiche.
Elenchi di indirizzi, nomi, censimenti vari…
In questo caso è possibile integrare s3-select con AWS Lambda e AWS Api Gateway per ottenere:
una chiamata api che eseguira una Lambda per ottenere dati da S3 con s3-select.
Un caso d’uso totalmente serverless!
_A questo indirizzo è possibile visualizzare un esempio di codice nodejs da integrare in una lambda per effettuare query con s3-select. _https://github.com/AndreaCiacciaCodeploy/CodeployAcademyS3select
Conculsioni
S3 è sicuramente uno dei servizi migliori in casa AWS.
Semplicità di utilizzo e soprattutto versatilità. È possibile utilizzarlo per svariati contesti riuscendo sempre a trarne vantaggi!
Abbiamo visto velocemente come sia possibile utilizzarlo anche come database specialmente per operazioni di lettura. Sia per flussi di analisi dei dati sia per esporre api tramite integrazione di lambda e api gateway.
S3 è inoltre molto economico.
Un motivo in più per considerare di utilizzarlo anche come database.
Scrivi a info@codeploy.it o a andrea.ciaccia@codeploy.it per ulteriori approfondimenti.