- OpenStack Swift prakticky (1): object store pro vás
- OpenStack Swift prakticky (2): verzování objektů
- OpenStack Swift prakticky (3): omezení platnosti objektů
- OpenStack Swift prakticky (4): Dočasné URL
- OpenStack Swift prakticky (5): řízení přístupu
- OpenStack Swift prakticky (6): Object store jako statický web
Na cloudsvet jsme se už seznámili s object storage obecně i s implementací v rámci OpenStack Swift. Přišel čas vyzkoušet ji prakticky.
Klikáním k prvním pokusům
Jak už jsme na cloudsvet zaznělo, Swift je vyvíjen v rámci OpenStack projektu. Dá se použít samostatně a také je součástí všech distribucí OpenStack, protože Swift je typicky místo, ve kterém OpenStack ukládá image pro VM, zálohy volumů nebo Heat šablony. Pro dnešní ukázku použijeme instanci HP Helion OpenStack 1.1.
Ve svém tenantu se přihlašte na GUI a namiřte si to do sekce Object Store, Containers.
Vytvořte nový kontejner – pro začátek použijeme Private přístup (tedy čtení objektů vyžaduje přihlášení).
Kontejner máme připraven.
Uploadujte nějaké soubory, třeba obrázky.
Jsou tam.
Můžete je z GUI stáhnout, smazat a tak podobně.
Na tomto místě nutno poznamenat, že Swift nemá nějaké GUI určené vyloženě pro neznalé koncové uživatele. Se Swift přímo typicky interaguje IT člověk přes GUI nebo příkazovou řádku a aplikace přes API (například web server, jak uvidíme, nebo aplikace zaměřená na uživatele či naopak aplikace, která třeba snímá obrázky či video a sama si to ukládá do Swift). V dalších dílech seriálu si vyzkoušíme pár nadstaveb, které tohle řeší.
Příkazová řádka a API – nic složitého
Příkazová řádka Swift rozhodně není nic, čeho byste se měli bát. První co uděláte je, že do environmentálních proměnných uložíte přihlašovací údaje k OpenStack, abyste je nemuseli zadávat znova a znova při každém příkazu (tohle je rozebráno v našem OpenStack lab guide, který je zde ke stažení). Pak hned můžeme začít s jednoduchými operacemi.
Jaké kontejnery ve vašem tenantu existují?
helion@LabServer:~$ swift list MojeObjekty database_backups
Jaké objekty jsou v kontejneru MojeObjekty?
helion@LabServer:~$ swift list MojeObjekty bike.JPG
Stáhněte si ho.
helion@LabServer:~$ swift download MojeObjekty bike.JPG bike.JPG [auth 0.262s, headers 0.479s, total 0.482s, 0.350 MB/s]
Uploadujte další.
helion@LabServer:~$ swift upload MojeObjekty pes.jpg pes.jpg
Objevil se tam?
helion@LabServer:~$ swift list MojeObjekty bike.JPG pes.jpg
Pro dnešek nám to takhle jednoduše stačí – ostatně síla object store je právě v jednoduchosti. Pro její úspěšné používání vám má stačit pár minut – žádné dlouhé knihy, žádné certifikace, žádná školení, pokud chcete umět používat základní funkce.
Využití v aplikaci
Pojďme si teď napsat nějakou opravdu primitivní aplikaci, která by využívala object store. Ukažme si webovou službu, která vylistuje všechny uložené objekty a po kliknutí vám je zobrazí přímo v prohlížeči. Určitě pak sami přijdete na to, jak to rozvinout dál – třeba přidat možnost uploadovat další fotografie apod. V našem případě použijeme privátní kontejner (tedy uživatel nemá přímý přístup, musí přes náš server) – Swift podporuje i cross-origin řešení, kdy soubor uživateli naservíruje přímo object store (tedy objekt se nemusí nejprve načíst do web serveru a z něj poslat klientovi). To je pro tento typ aplikace asi lepší nápad, ale to si nechme na později. Tak si ukážeme webovou službu, tak může třeba aplikace ukládat obrázky ze scanneru či kamery (čtečka QR kódu, fotoaparát, kamera, rentgen) nebo ukládat či načítat binární obrazy (továrna programující EEPROM či flash) či soubory (backup software).
Pokud máte rádi Python, vypadalo by to nějak takhle – použijte pip pro získání swiftclient a bottle web serveru.
import swiftclient from bottle import route, run, request, response, template @route('/') def index(): mujswift = swiftclient.client.Connection(authurl='https://10.0.10.13:5000/v2.0', user='video', key='helion', tenant_name='video', auth_version='2.0', insecure=True) res, object_body = mujswift.get_container('MojeObjekty') mujswift.close() output = '<h3><table>' for object in object_body: output += '<tr><td><a href=' \ + '"/object/' + object['name'] + '">' \ + object['name'] + '</td></tr>' output += '</table></h3>' return output @route('/object/<name>') def pc(name): mujswift = swiftclient.client.Connection(authurl='https://10.0.10.13:5000/v2.0', user='video', key='helion', tenant_name='video', auth_version='2.0', insecure=True) res, object_body = mujswift.get_object('MojeObjekty', name) mujswift.close() response.content_type = res['content-type'] return object_body run(host='0.0.0.0', port=8080, debug=True)
Spusťte ji a vyzkoušejte.