OpenStack laino-konputazio plataforma librea da. Erreminta izugarri interesgarria da, itzelezko potentziala duena eta pixkana hainbat hornitzaile azaltzen ari dira. Librea/irekia izaki beste cloud provider-ekin gertatu litekeen vendor lock-in fenomenoa ekidin dezakegu. Hau da, gure enpresa hornitzaileak (à la Amazon) salneurria, ezaugarriak… aldatuko balitu, beste nonbaitera salto egin genezake aplikazioaren kodea aldatu gabe. Hobe oraindik! Zure laino propioa instalatu dezakezu!

OVH enpresa frantsesak urte batzuk daramatza proiektuan parte hartu eta azpiegitura garatu eta frogatzen. Duela gutxi RunAbove azpimarkan frogatutako OpenStack zerbitzu batzuk marka nagusian, zerbitzu orokorrean, eskeintzen hasi da. Data-center-ak, gainera, hemendik gertu dituzte (OpenStack Gravelines eta Strasbourg-en dute martxan oker ez banago), hemen inguruan erabiliko diren zerbitzuak eskeintzeko aukera paregabea da.

Lehen gida honetan Node.js erabiliko degu OVH-ren OpenStack zerbitzuarekin autentikatu eta Object Storage zerbitzua erabiltzeko (zerbitzu hau Swift moduluak eskeintzen du).

Object Storage

Object Storage zerbitzuarekin fitxategiak gorde (eta kudeatu) ditzakegu. Fitxategi hauek edukiontzitan gordetzen dira eta edukiontzi hauek hiru motatakoak izan daitezke: pribatuak, publikoak edo static assets erakoak. Edukiontzi pribatuetan gordetako fitxategiak atzitzeko baimen bereziak behar dira, publikoetakoak berriz url publiko bat izango dute, hau jakinda edonork jetsi ahal izango lituzke. Static assets erako edukiontziak webguneen eduki estatikoak eskeintzeko bereziki prestatuak daude (zure azpi/domeinu bat konfigura dezakezu eta edukiontzi hontara apuntatzen), baina azken finean edukiontzi publiko bat litzateke.

Gauzarik onena OVH-ek jetsierako trafikoa tarifikatzen duela bakarrik (zuzenketak) salneurri merke askoa duela: 0,01€ (BEZ gabe) GB bakoitza/hilabeteko + beste hainbeste jaitsierako trafiko GB bakoitzeko. Erabiltzen ez bada ez da ordaintzen. Honek aukera izugarriak irekitzen ditu backup-ak egiteko orduan adibidez, erabiltzean bakarrik ordaintzen denez gustura ordainduko dituzu zentimo batzuk!, oso merke gorde hala izango dira eta.

Badira beste kasuak ere, Ttan Ttakun irratiarena adibidez. Podcast-ak audio.ttanttakun.org-era igotzen dira FTP bidez eta bertatik zerbitzatzen dira. Gaur egun 80 bat gigabyte audio fitxategi daude online (128kbps-en gainera, kalitate baxuan) eta etorkizunera begira (kalitatea hobetuko bagenu, ala “SD” eta “HD” kalitatean eskeiniko bagenitu) jasangarritasun ekonomikoa bermatu nahi baldin bagenuen zer edo zer egin beharrean topatzen ginen. On-demand tarifikazioa ideala da irratiarentzat, kontsumitzen den heinean ordaintzea… ehundaka giga izan ditzakegu online, beti eskura, baina erabili hala ordaindu!

OVH-en frogatzen

Beno, goazen ba, oso erraza da berez. OVHn topatu dedan informazio urria dela eta (OVH beraren endpoint-en informazio falta, ez OpenStack-ena) arratsalde osoa behar izan det bezeroaren bidezko konfigurazioa lortzeko eta horrek bultzatu nau post hau idaztera. OVHren bezeroa ez bazara balio batzuk aldatu beharko dituzu eta ez zenuke arazorik izan beharko beste OpenStack hornitzaile batekin lan egiteko.

OVHren manager panelean Cloud atalean proiektu bat sortu (dagoeneko bezeroa bazara baliteke ordainketa metodorik sartu gabe proiektua sortzen uztea) eta bertan Storage->Create a container, zeuk erabaki zein motakoa. Storage-ra bueltan goian ezkerrean Project management and resource usage -> OpenStack eta erabiltzaile berri bat sortu, hau erabiliko degu orain.

APIa nola erabili azaltzen duen gidarik ez det topatu beraien webgunean eta bueltaka eta bueltaka azkenean OVH-ren Horizon-ean (OpenStack-en kontrol panela) sartu naiz eta bertan topatu det behar nuen informazioa frogatzen jaraitzeko. Aurreko pausuan sortu dugun erabiltzailearekin sar gaitezke.

Node.js

pkgcloud laino-hornitzaile ezberdinekin lan egiteko modulua da eta OpenStack erabili dezakegu besteak beste. Bezeroa konfiguratzea nahikoa da metodo ezberdinak erabili ahal izateko:

var pkgcloud = require('pkgcloud');

var client = pkgcloud.storage.createClient({
    provider: 'openstack',
    username: 'erabiltzailea', // OVH manager-ean sortu dugun OpenStack erabiltzailea
    password: 'pasahitza', // OVH manager-ean sortu dugun OpenStack erabiltzailearen pasahitza
    //tenantId: '', ez da beharrezkoa. Edukiontziaren helbidetik lortu dezakezu: AUTH_blablablabla zatia da, AUTH_ gabe
    version: 'v2.0', // ez da beharrezkoa, pkgcloud-ek berez v2.0 erabiltzen duelako eta OVH-ek baita ere
    region: 'GRA1', // beharrezkoa, aukeratu duzun datacenter-aren kodea da, Europan GRA1 eta SBG1 dituzte
    authUrl: 'https://auth.cloud.ovh.net/', // Hau argiago jarri beharko lukete, kostatu zait topatzea
  });
Kode horrek ez digu ezer esaten, ez ondo ez gaizki. Martxan dagoen frogatzeko erabili behar dugu. [Edukiontzi](https://github.com/pkgcloud/pkgcloud/blob/master/docs/providers/openstack/storage.md#container-apis) eta [fitxategiekin](https://github.com/pkgcloud/pkgcloud/blob/master/docs/providers/openstack/storage.md#file-apis) lan egiteko metodoak eskeintzen dizkigu. Edukiontzien zerrenda eskatuko dugu:
client.getContainers(function(err, containers){
  if(err) return  console.log("ERR", err);
  for(var i in containers){
    console.log(
      containers[i].name, '|',
      containers[i].count, 'fitxategi', '|',
      containers[i].bytes,'B'
    );
  }
});

Arazorik egon ezean lehenago sortu dugun edukiontziaren informazioa azalduko zaigu. Fitxategi bat igoko dugu orain:

var fs = require('fs');
// karpeta berean `igotzeke.txt` fitxategia sortu, edo aldatu nahi duzun fitxategiarekin
var readStream = fs.createReadStream('igotzeke.txt');
var writeStream = client.upload({
  container: 'test', // sortu dugun edukiontziaren izena
  remote: 'igota.txt'
});

writeStream.on('error', function(err) {
  console.log("Igotzean errorea:", err);
});

writeStream.on('success', function(file) {
 console.log("Igota!", file);
});

readStream.pipe(writeStream);

Xinple eta erraza. Pipe-ak erabili daitezke gainera, fitxategi erraldoiak igo ditzakegu memoria matxakatu gabe. Dena batera:

var pkgcloud = require('pkgcloud');
var fs = require('fs');

var client = pkgcloud.storage.createClient({
  provider: 'openstack',
  username: 'erabiltzailea', // OVH manager-ean sortu dugun OpenStack erabiltzailea
  password: 'pasahitza', // OVH manager-ean sortu dugun OpenStack erabiltzailearen pasahitza
  //tenantId: '', ez da beharrezkoa. Edukiontziaren helbidetik lortu dezakezu: AUTH_blablablabla zatia da, AUTH_ gabe
  version: 'v2.0', // ez da beharrezkoa, pkgcloud-ek berez v2.0 erabiltzen duelako eta OVH-ek baita ere
  region: 'GRA1', // beharrezkoa, aukeratu duzun datacenter-aren kodea da, Europan GRA1 eta SBG1 dituzte
  authUrl: 'https://auth.cloud.ovh.net/', // Hau argiago jarri beharko lukete, kostatu zait topatzea
});

// edukiontzi zerrenda
client.getContainers(function(err, containers){
  if(err) return  console.log("ERR", err);
  for(var i in containers){
    console.log(
      containers[i].name, '|',
      containers[i].count, 'fitxategi', '|',
      containers[i].bytes,'B'
    );
  }
});

// fitxategia igo
var readStream = fs.createReadStream('igotzeke.txt');
var writeStream = client.upload({
  container: 'test',
  remote: 'igota.txt'
});

writeStream.on('error', function(err) {
  console.log("Igotzean errorea:", err);
});

writeStream.on('success', function(file) {
 console.log("Igota!", file);
});

readStream.pipe(writeStream);

Honaino beraz lehen OpenStack + Node.js (eta OVH) gida. Object Storage-ren potentziala izugarria da (salneurria kontuan hartuta) eta ziur nago modu batean baino gehiagotan erabiliko dugula aurrerantzean.

Laster arte!

ZUZENKETAK: salneurriaren kontua @Hey_neken-i esker zuzendua!