Jak naučit starou Linuxovou aplikaci pracovat s Azure Blob Storage bez změny kódu

Jak už jsem na tomto blogu psal hned v několika příspěvcích použitím Azure Files si tyto můžete namapovat do souborového systému Windows i Linux. Díky tomu beze změny aplikace můžete pracovat se soubory v cloudu. Pokud vám ale primárně vyhovuje Azure Blob Storage a potřebujete jen jednu část Linoxové aplikace naučit s ní mluvit, existuje ještě jedna nová možnost: azure-storage-fuse.

Proč Blob místo Files

Na sdílení souborů jsou Azure Files naprosto ideální. Je to enterprise služba s plnou podporou, univerzální a jednoduché řešení pro Windows i Linux a zejména nedávno uvedený Azure File Sync umožní dělat různé hybridní scénáře jako je záloha share do cloudu či cloud tiering. Proč by tedy vůbec někdo přemýšlel o Blob storage?

Důvodů je hodně a začnu těmi technickými. Blob storage má podstatně menší omezení co do kapacity, počtu objektů či velikosti jednotlivých objektů. Zejména ale tím, že jde o objekt, s ní můžeme pracovat "napřímo". Operace s bloby jsou HTTP, takže při správném nastavení mohou obrázky v Blob storage být přímo vykreslovány na vaší webové stránce. Pokud do blobu uložíte video, můžete jej z něj rovnou přehrávat přímo na webu nebo VLC či jiném streaming přehrávači, nemusíte si nic stahovat dopředu, můžete přeskakovat a tak podobně. Blob je také perfektně integrován do analytických nástrojů v Azure, například umístěné objekty můžete zpracovat v Azure Data Lake Analytics, natáhnout je a streamovat s Azure Media Services a tak podobně.

Další důvody mohou být cenové. Files jsou složitější a pokročilejší služba, Bloby jsou velmi primitivní a díky tomu levnější. Files vyjdou asi na 50 EUR měsíčně za uložeý TB, ale Hot blob jen asi 16 EUR a pokud soubory budou mít spíše archivační povahu tak v případě Cool vás vyjdou na 9 EUR měsíčně a Archiv tier (kde ale data nemáte online) ještě výrazně méně. Díky možnostem Blobů můžete na úrovni objektu plynule přecházet mezi Hot, Cool a Archive - tedy jak vám objekty zastarávají (a snižuje se potřeba je číst) je můžete přesouvat na levnější médium.

Azure Blob je velmi jednoduchý a pokud máte možnost zasáhnout do kódu aplikace, můžete si tuto funkci přidat. Nicméně co když máte Linux aplikaci, kterou upravovat nemůžete. Například je to nějaký nahrávač kamerových záznamů, který ukládá MP4 soubory, které chcete dostat do Blobů tak, aby bylo možné s nimi dál pracovat (například je nabídnout na vaší stránce). Nebo jde o nějaké zálohy či archivy. Pak by se hodilo, aby aplikace ukládala jen do místního adresáře a někdo jiný zajistil replikaci do cloudu

Azure Storage Fuse

Linux nabízí možnost souborových systémů v user space (FUSE) a je tak možné poměrně jednoduše přidat virtuální souborový systém do vašeho systému bez jakýchkoli hlubokých zásahů. Díky tomu je možné napsat FUSE, které na backend bude mít blob storage. Tento projekt je aktuálně v Preview ke stažení zde: https://github.com/Azure/azure-storage-fuse

Je to napsané tak, že vznikne souborový systém, ale současně cache. Tedy soubory, které zapíšete do systému nebo následně čtete jsou řešeny v této cache a na pozadí se replikují s Azure Blob Storage.

Nejprve si vytvořte Azure Blob Storage a poznamenejte si jméno a přístupový klíč.

Vytvořme si kontejner.

V Linux VM si nainstaluji azure-storage-fuse:

https://github.com/Azure/azure-storage-fuse/wiki/Installation

V adresáři najdeme soubor connection.cfg a do něj zapíšeme přístupové údaje k Azure Blob Storage.

accountName myfuse
accountKey smcNE+msAllCVYhRnwkQ3EQDQ9WaHyHvbHqQZlpWB7uNN6FSZjdEGsWf8Wt0p+tRmqEmvPYti18QgAp1vDKJEw==
containerName tomblob

Vytvořím si temp adresář a také adresář, kam si namapujeme storage (ten udělám třeba ve svém home prostoru). Spustíme jednoduchý skript, který FUSE rozjede a nastaví.

tomas@fuse:~/azure-storage-fuse$ sudo mkdir -p /mnt/blobfusetmp
tomas@fuse:~/azure-storage-fuse$ sudo chown tomas /mnt/blobfusetmp/
tomas@fuse:~/azure-storage-fuse$ chmod +x mount.sh
tomas@fuse:~/azure-storage-fuse$ mkdir ~/blobs
tomas@fuse:~/azure-storage-fuse$ ./mount.sh ./mount.sh ~/blobs/

Následně do tohoto adresáře nakopírujeme nějaké soubory a po chvilce se nám objeví v Blob storage.

Pokud nějaký objekt vytvoříte lokálně a následně ho změníte jinde (například přes portál) tak pozor na to, že lokální systém ho bude pravděpodobně stále ještě načítat z místní cache (tedy nebude mít nejnovější verzi). FUSE na pozadí automaticky cache aktualizuje na principu best effort, takže se to eventuálně aktualizuje, ale není zde přísná konzistence. To vám samozřejmě může vadit, ale dost možná nemusí - například pokud aplikace spíše generuje data, která chcete odlévat do cloudu, je to celkem jedno. Nebo pokud aplikace bude takto číst objekty, které jsou ale povětšinou statické (například fotky), tak to také není žádný problém.

Jednoduché, že?

 

Potřebujete plně podporované řešení pro synchronizaci souborů lokálně a v cloudu s pokročilými možnostmi, cloud tieringem a tak podobně? Vyzkoušejte Azure Files a Azure Files Sync. Máte možnost upravit kód aplikace tak, aby používala přímo Azure Blob Storage? Použijte SDK do vašeho jazyka a uděláte to jednoduše. Pokud ale hledáte něco velmi jednoduchého pro vaší Linux aplikaci, kterou nechcete nijak měnit, vyzkoušejte si azure-storage-fuse.

 



Co přinesl rok 2018 v Azure v kontejnerech Storage
Co přinesl rok 2018 v Azure v IaaS službách Storage
Jak jsem přešel z Wordpress na statické stránky Jekyll v Azure a proč Storage
Jak efektivně posílat data do cloudu s Azure Data Box Gateway Storage
Nemodifikovatelná storage v Azure pro zákonné držení vašich dokumentů Storage