You are currently viewing AWS S3 paikallisena levynä Raspberryn kautta

AWS S3 paikallisena levynä Raspberryn kautta

Amazonin AWS-palvelun S3 on järkevän hintainen pilvipalvelu tiedostoille. Sen käyttö on ollut hieman tylsähköä, koska omaa S3-säilöä, jota myös bucketiksi kutsutaan, on täytynyt käyttää joko selaimella webliittymän kautta tai sitten kömpelöillä, ja osaksi myös maksullisilla, lisäosilla. Ainakin Windowsissa. Minulla toimii Raspberry Pi monen muun asian lisäksi verkkolevyjä jakavana NAS-serverinä, joten päätin hyödyntää sitä S3-bucketin käytössä.

Minulla on Raspberryssä Ubuntun serveriasennus. Ainoa tapa käyttää S3:a on komentorivin kautta, mutta Amazon käyttää omaa systeemiään, jonka takia esimerkiksi rsync ei onnistu omalta koneelta Amazonin servereille.

Tuohon tarpeeseen on tehty awscli, joka on Amazonin eri palveluiden käyttöön rakennettu komentorivilaajennos. Toimii kaikilla linux-jakeluilla, Windowseilla ja Maceillä ainakin. Jo pelkästään sen kanssa saisi siirrettyä tiedostoja verko yli Amazonille, mutta halusin jotain helpompaa tai käyttäjäystävällisempää. Mielellään myös niin, että ratkaisu toimisi yhtä helposti koko kodin sisäverkossa.

Se onnistuu mounttaamalla ensin S3-hakemisto paikalliseksi Raspberryyn ja antamalla sitten samban jakaa sama mountti Windows-koneisiin.

Ohjeet ovat Ubuntulle, mutta pakettien asennuseroja huomioimatta kaikki toiminnee samalla tavalla – mutta ei, en tiedä käsitteleekö vaikka CentOS fstab-tiedostoa eri tavalla. Osannet säätää kohdalleen ja googlella loput.

Minä kirjaudun asennushommissa aina komennolla sudo -s koska en kerta kaikkiaan jaksa takoa sudoa joka hemmetin välissä. Jos toimit toisin, niin yhdessäkään esimerkissä ei ole sudoa erikseen mainittu,

Tiedostojärjestelmät yhteen

Jakoja varten ei ole pakko asentaa awscli-laajennosta, mutta se kannattaa. Joten asenna se ensin.

Linux ei osaa luonnostaan tarvittavaa protokollaan, joten se on asennettava. Kyseessä on FUSE:n muunnos, sama joka tarvitaan vfat/exFAT levyjä varten. Asennus on tuttua ja turvallista:

apt install s3fs

s3fs:n asettaminen

Asetuksia varten tarvitset AWS:n IAM-käyttäjää luodessa kerrotut 20 merkkisen Access Key ja 40 merkkisen Secret Key tiedot.

Laita ne komentoon paikalleen (ja nyt oleellista, että olet rootin roolissa):

echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs

Tuo luo komennon antaneet käyttäjän kotihakemistoon tiedoston, jossa ovat AWS:n vaatimat tunnisteet. Jos (siis kun…) asensit awscli:n, niin tekstien mukaan s3fs:n pitäisi osata käyttää niitä, jolloin tätä ei tarvitsisi tehdä. Se saattaa toimia, jos mounttaa erikseen suoraan komentoriviltä, mutta fstabin kanssa minä en onnistunut. Joten lienee pakko tehdä toinen sinällään täysin samanlainen, joskin niissä on eri syntaksi.

Jos ongelma fstabin kanssa on tiedostosijainti, niin periaatteessa symbolinen linkki tiedostosta ~/.aws/credentials tiedostoon ~/.passwd-s3fs voisi riittää. En ole kuitenkaan kokeillut. Huutele kommenteissa jos testaat.

Salsanatiedoston luomisessa olisi polkuna voinut tietysti käyttää /root tai pelkästään ~/ mutta muuttujana se osaa tehdä tiedoston aina oikeaan paikkaan. Se myös sallii käyttäjille omien mounttien luomisen, jos se halutaan sallia. Itseasiassa – jos käyttäjä tietää, että s3fs on asennettu, niin hän ei tarvitse edes lupaa. Ja miksi tarvitsisikaan.

Koska tunnus ja salasana ovat tekstimuodossa, niin estetään kurkkiminen:

chmod 600 ${HOME}/.passwd-s3fs

S3 bucketin mounttaaminen

Jos haluat mountata lennossa, niin komento on yksinkertainen:

s3fs mybucket /hakemisto/mount-pisteeseen -o passwd_file=${HOME}/.passwd-s3fs

Tämä näkyy vain mountin tehneelle käyttäjälle. Jos haluaa sen näkyvän kaikille, niin lisätään -o jälkeen allow_other

 

Jos haluat tehdä pysyvän mountin, niin avataan ensin /etc/fstab
nano /etc/fstab

Lisää sinne tämä oikeaksi muokattuna:

bucketin_nimi /hakemisto/moint-pisteeseen fuse.s3fs _netdev,nonempty,allow_other 0 2

  • huomaa: mountpisteen nimi ei saa olla sama kuin bucketin nimi

Otetaan mount käyttöön:

mount -a

Sitten testaat, että tiedostot liikkuvat molempiin suuntiin.

Tunnusta ja salasanaa ei tarvinnut erikseen kertoa, koska se löytyy rootin kotihakemistosta ja bootissa asiat tehdään rootina.

Tämä näkyy kaikille käyttäjille. Jos haluat estää sen ja rajata käytön vain rootille, niin ota allow_other pois. Itse tein näitä kaksi. Toinen on tavallinen NAS, mutta tarkoitettu varastointiin – edelleenkin, asennus on omassa sisäverkossa ja asioita voi tehdä vapaammin kuin isommissa järjestelmissä. Toinen on tehty automatisoidumpaan backupiin ja sijaitsee rootin kotihakemistossa. Haluan sen olevan kokonaan erillään käyttäjien, itseni mukaanlukien, tekemisistä.

Otetaan Windows mukaan

Toki halusin Raspberryssäkin (tai missä tahansa linux-boksissa) vaivattoman pääsyn S3-hakemistoon, mutta vahva peruste oli saada helppo pääsy määrättyyn buckettiin. Selailuun bucketien välillä tämä ei anna mahdollisuuksia, ellei sitten jaa jokaista haluamaansa. Ei sekään huono vaihtoehto ole.

Koska teknisesti S3:n jako on mountin jälkeen levy Raspberryssä, niin se on jaettavissa NAS:n kautta aivan samoin kuin fyysisempi levy. Vilkaise täältä tarkemmat ohjeet, jos sinulla ei ole sambaa asennettuna.

Avaa samban asetukset:

nano /etc/samba/smb.conf

Lisää loppuun tämä, sopivaksi muokattuna:

[S3]
   comment = Jaettu S3 bucket
   path = /hakemisto/mount-pisteeseen
   browseable = yes
   writable = yes
   guest ok = yes

Käynnistetään palvelut uudestaan:

systemctl restart smbd nmbd

Seuraavaksi suuntaat Windowsiin ja liität verkkolevyn normaalisti. Verkkopolku on\\<NAS-serverin-IP>\SMB-nimi. Nyt sinulla on Windowsista yhteys S3:en buckettiin Raspberryssä pyörivän NAS-serverin kautta.

Tismalleen sama tekniikka toimii kaikissa muissakin, on asiakkaana sitten linux tai mac.

Parempi kuin awscli

Minulla on kaikissa koneissa asennettuna awscli – niin Windowskoneissa kuin Raspberryn Ubuntussa. Siltä osin en välttämättä tarvitsisi S3-bucketin mounttaamista mihinkään. Toki Windowseissa raahaaminen on helpompaa kuin komentorivityöskenty, mutta silti. Raspberryssä voisin siirtää backup- ja muut tiedoston S3:een turvaan ja säilöön vaikka sync-komennolla. Ja tässä päästäänkin siihen syyhyn miksi S3 kannattaa mountata. Asiat kun saa tehdä helpoksi.

Kun S3-säilö on paikallinen, niin en tarvitse awscli:tä ja sen sync komentoa mihinkään. Kaikki toimii tutulla rsync-komennolla tai mitä sitten käyttääkin. Ilman mounttia joutuisin tekemään ensin backupin rsyncillä johonkin. Sitten joutuisin siirtämään syncillä saman backupin taivaalle S3:en huomaan. Nyt, kun S3-bucket on tavallinen massamuisti, niin siirrän backupit suoraan rsyncillä sinne, ja kaikki siirtyvät pilveen itsestään.

awscli on ehdoton työkalu, kun täytyy operoida suoraan AWS:n palveluiden kanssa. Kuten vaikka luotaessa uutta buckettia tai poistettaessa unohtuneita glacier-varastoja. Mutta peruskomentoihin sitä ei kannata käyttää, kun on käytettävissä tutumpikin työkalu.

 

Jakke Lehtonen

Teen B2B-markkinoille sisällöntuottoa sekä UX-testauksia. Samaan liittyy myös koulutukset yrityksille ja webmaailman kanssa muutoin painiville. Serverien sielunelämää on joutunut ohessa opettelmaan. Toinen puoli toiminnasta on koirien ravitsemuksen ja ruokinnan suunnittelua sekä varsinkin omistajien kouluttamista hoitamaan koiriaan oikein ja vielä paremmin. Profiili: Jakke Lehtonen

Keskustele foorumilla Meta/KATISKA