Creare un server FTP usando Amazon S3

 

In questo post vedremo come tirare un server FTP utilizzando una istanza Amazon EC2 che sincronizza automaticamente  i dati verso un bucket Amazon S3. Questa soluzione dirty-cheap sfrutta la libreria s3fs che ci permette in sostanza di montare un bucket S3 come un volume locale, usando il celebre FUSE e di eseguire letture/scritture senza alcun problemi, proprio come se i file fossero in locale. Configureremo successivamente un server FTP basato sul collaudato vsftpd  per interagire dall’esterno con l’istanza EC2.

Perché S3?

Amazon S3 è una garanzia, un pilastro del cloud object storage ed offre una durabilità del 99,999999999% (ci basta?) e ci permette di non avere alcun limite di storage. Costruiremo, in effetti, un backup server FTP con storage illimitato.

Perché FTP?

FTP non è un protocollo sicuro, ma è stabile, perfettamente compatibile con App di qualsiasi genere. A fornire maggiore protezione ci penseremo noi sfruttando le potenzialità dei Security Group di Amazon EC2. Per il momento concentriamoci sulla costruzione del servizio, pensando in futuro all’implementazione di un FTP-sicuro (FTPS) oppure un SFTP via SSH.

Come funziona s3fs

Gli hard disk locali, SAN o iSCSI conservano le informazioni come blocchi. Questo significa che potenzialmente, ogni memoria di questo tipo potrebbe funzionare universalmente con un sistema operativo Unix. Amazon S3, invece, è costruita sul concetto di object storage, per questo non direttamente compatibile con un sistema operativo standard.

La libreria s3fs risolve questo problema: si occupa di emulare come un filesystem locale (sul quale possiamo creare, cancellare, rinominare i file, etc.) un object storage remoto.

Ci siamo, abbiamo capito come trasferire i file sulla nostra istanza EC2, tramite il protocollo FTP, e come poi spostare questi file su Amazon S3, tramite la libreria s3fs. Procediamo allora.

Installiamo e configuriamo s3fs

Come root, procediamo all’installazione dei pacchetti di supporto:

Scarichiamo e compiliamo s3fs:

A questo punto, aggiungiamo le nostre credenziali AWS al file auto-discovery:

Creiamo una directory, che sarà quella automaticamente sincronizzata con un bucket S3:

La nostra directory /home/ec2-user/s3mount , quindi, farà la magia.

Procediamo quindi a montare, come fosse un comune volume, il nostro bucket backupBucket (che abbiamo creato in precedenza) puntandolo proprio a questa directory:

Controlliamo che il volume sia montato correttamente:

Perfetto. Facciamo una piccola prova. Creiamo un file vuoto e controlliamo dalla console AWS S3 che questo file ci sia:

Installiamo vsftpd

Sempre come root, installiamo il pacchetto vsftpd :

Procediamo subito alla sua configurazione editando il file vsftpd.conf :

Impostiamo il file come segue. Possiamo configurarlo a piacimento, ma ricordiamoci di impostare local_enable=YES : permetterà a tutti gli utenti locali di accedere all’FTP.

Salviamo il file e lanciamo vsftpd:

Lanciamo vsftp al boot

Per sopravvivere al reboot, configuriamo il lancio all’avvio:

Apriamo le porte necessarie

Ricordiamoci di aprire le porte 20-21 e il range 15393-15592 nel Security Group dell’istanza! Decidiamo se “aprire a tutto il mondo” o stringere l’accesso ad uno o più indirizzi IP.

Creiamo un utente FTP

A questo punto, non ci resta che creare l’utente FTP con il quale effettueremo il login sul server FTP:

Impostiamo quindi i permessi sulla sua directory per evitare problemi:

Fatto. A questo punto, proviamo a collegarci all’IP pubblico della nostra istanza EC2 e proviamo ad eseguire l’upload di un file, lo troveremo nel nostro bucket Amazon S3!