martedì 15 giugno 2021

Come montare un bucket S3 localmente su Linux

In molti modi, i bucket S3 si comportano come i dischi rigidi cloud, ma sono solo “archiviazione a livello di oggetto”, non bloccano storage di livello come EBS o EFS. Tuttavia, è possibile montare un bucket come filesystem e accedervi direttamente leggendo e scrivendo file.

I vantaggi e i limiti di S3 come filesystem La magia che fa funzionare l’intera configurazione è un’utilità chiamata s3fs-fuse. FUSE sta per Filesystem in Userspace e crea un filesystem virtuale montato. s3fs si interfaccia con S3 e supporta un ampio sottoinsieme di POSIX, inclusa la lettura, la scrittura, la creazione di directory e l’impostazione dei metadati dei file.

Uno dei grandi vantaggi dell’utilizzo di S3 rispetto allo storage tradizionale è che èefficace a memorizzazione di singoli oggetti a lungo termine, senza alcun limite alla dimensione totale del secchio. È possibile memorizzare 33 foto o 10 milioni di foto in S3 e funzionerà in gran parte allo stesso modo. Nelle applicazioni in cui è necessario un disco di grandi dimensioni (ed economico), S3 ha senso e se l’applicazione che stai integrando richiede l’accesso ai file, questo è un buon modo per collegare i due.

Certo, non è senza limitazioni. Sebbene funzioni in modo abbastanza comparativo con un’API S3 in termini di prestazioni durante l’archiviazione e il recupero di interi file, ovviamente non sostituisce completamente lo storage a blocchi collegato alla rete molto più veloce. C’è un motivo per cui questa configurazione non è ufficialmente supportata da AWS: incontrerai problemi di concorrenza con più client che utilizzano file, soprattutto se disponi di client in regioni diverse che accedono allo stesso bucket. Naturalmente, anche S3 ha questa limitazione e non ti impedisce di avere più client collegati, ma è più evidente quando FUSE sembra darti un accesso “diretto”. Non lo è e dovrai tenere a mente queste limitazioni.

AWS ha un servizio simile a questo: Storage Gateway, che può fungere da NAS locale e fornisce storage a blocchi locale sostenuto da S3. Tuttavia, questa è più una soluzione aziendale e richiede un intero server fisico su cui distribuire un’immagine VMWare. s3fs, d’altra parte, è una semplice soluzione a server singolo, sebbene non esegua molta memorizzazione nella cache.

Quindi, se puoi convertire le applicazioni per utilizzare l’API S3 anziché un FUSE, dovresti farlo. Ma, se sei d’accordo con una soluzione un po’ ingannevole, s3fs può essere utile.

Impostazione di s3fs-fuse Rispetto a quanto sia hacky, è sorprendentemente facile da configurare. s3fs-fuse è disponibile dalla maggior parte dei gestori di pacchetti, sebbene possa essere chiamato semplicemente s3fs su alcuni sistemi. Per i sistemi basati su Debian come Ubuntu, sarebbe:

sudo apt install s3fs Dovrai creare un utente IAM e concedergli l’autorizzazione per accedere al bucket che desideri montare. Alla fine, otterrai una chiave di accesso segreta:

Puoi incollarli nel file delle credenziali AWS standard, ~/.aws/credentials, ma se lo desideri per utilizzare una chiave diversa, s3fs supporta un file di password personalizzato. Incolla sia l’ID della chiave di accesso che il segreto in /etc/passwd-s3fs , nel seguente formato:

echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > /etc/passwd-s3fs E assicurati che i permessi su questo keyfile sono impostati correttamente, o si lamenterà:

chmod 601 /etc/passwd-s3fs Quindi, puoi montare il bucket con il seguente comando:

s3fs bucket-name /mnt/bucket-name Se non funziona, puoi abilitare l’output di debug con alcuni flag extra:

-o dbglevel=info -f -o curldbg Se vuoi che questo venga montato all’avvio, dovrai aggiungere quanto segue al tuo /etc/fstab:

s3fs#bucket-name /mnt/bucket-name fuse _netdev,allow_other,umask=227,uid=33,gid=33,use_cache=/root/cache 0 0