Utilizzare lo storage di Windows Azure per il proprio sito web ?

 

Qualche settimana fa mi è arrivata via mail la comunicazione di un hoster che mi ricordava di rinnovare il mio abbonamento per il sito web hostato da loro. Stavo prendendo la carta di credito per pagare e ho cominicato a pensare a quello che stavo facendo. Ho delle pagine html, delle immagini e un pò di altro contenuto che qualcuno deve poter scaricare via http da qualche parte nel mondo. Non ho bisogno di elaborazione server side ma solo java script nel browser, se devo fare qualcosa di più complicato posso usare Silverlight e allora perchè devo avere uno spazio elaborativo da qualche parte.

Allora ho cominciato a pensare a queste parole : file, http, tanti file, http, qualunque file, http e allora ecco l’illuminazione (era tarda notte ho acceso la luce…). Lo storage di Windows Azure gestice file via http. Perfetto !!! Ogni risorsa che metto nello storaga ha queste caratteristiche:

  1. Può essere di qualunque tipo
  2. Può essere grande quanto mi pare
  3. E’ accessibile via http
  4. Accetta l’accesso anonimo

Quindi ho preso il mio sito web e ho cominciato a portarlo sui blob di Windows Azure. Primo problema : per poter caricare un file sullo storage di Windows Azure ho bisogno di un container (un folder) il che vuol dire non poter avere un url fatto così : https://fabiosantini.blob.core.windows.net/index.html ma per forza https://fabiosantini.blob.core.windows.net/almenouncontainer/index.html e se devo pensare di utilizzare un qualunque software per il disegno del mio sito (Microsoft Expression Web 4.0 nel mio caso) dovrei obbligarmi a mettere tutto in un sottofolder (direte che problema c’è, si fa, vero, ma se voglio migrare un sito dovrei comunque cambiarlo e poi se ho trovato un problema e ve lo racconto vuol dire che ho trovato anche la soluzione Smile). La soluzione a questo problema è creare un container chiamato root$ che viene considerato il  container di default e quindi è possibile ometterlo nella chiamata http.

Comincio a caricare il mio sito e trovo un secondo problema (molto più serio). I blob su Windows Azure non permettono di avere container dentro altri container !!!!! Questo è più difficile da superare , tutti i software creano folder e sotto folder e all’interno delle pagine inseriscono i riferimenti relativi alle pagine e quindi è impossibile fare un upload di un sito web così come si trova ma sarebbe necessario cambiarlo drasticamente (cosa che ovviamente non mi piace).

Sto per abbandonare il mio tentativo ma decido di fare una prova stupidissima: caricare sul blob un file con un nome fatto in questo modo “photo/image.jpg” . Usando l’ Azure Storage Explorer (scaricabile da CodePlex) creo la cartella root$ e carico il file con quel nome e poi tento di accedere al file usando questo url https://fabiosantini.blob.core.windows.net/photo/image.jpg : funziona !!!

Bene quindi teoricamente posso simulare folder e sotto folder cambiando i nome dei file che compongono la struttura del mio sito. Si funziona, faccio una prova a mano e il sito risponde perfettamente. Però ho comunque un problema : se uso Expression Web tutte le volte che faccio una modifica al sito devo manualmente cambiare di nuovo i nome dei file per rispettare i link all’interno delle pagine Sad smile. Ovviamente così non può funzionare. A quel punto mi ricordo di essere uno sviluppatore e sviluppo un tool che prende in pasto qualunque sito web statico e lo converte per essere caricato su un blob di Windows Azure. Trovate il software qui https://fabiosantini.blob.core.windows.net/azuresiteconverter/AzureSiteConverter.zip …ovviamente sul mio blob Smile che ha generato il mio sito web https://fabiosantini.blob.core.windows.net/index.html (mappato su un CNAME come www.fabiosantini.com/index.html)

La domanda finale è : perchè tutto sto casino ???? Semplicemente perchè oggi il mio sito mi costa 1$ all’anno Smile dato che pago quello che utilizzo del blob…e questi sono i costi:

  • Storage
    • $0.15 per GB stored per month
    • $0.01 per 10,000 storage transactions
  • Datatranser
    • North America and Europe regions
      • $0.10 per GB in
      • $0.15 per GB out

Ci sono modi infiniti di avere un sito statico sul web a costi accettabili (anche gratuitamente) e quindi prendete questo post solo come un esempio che però apre il blob a scenari interessanti come per esempio quello di replicare un file system scalabile nella cloud.