AWS (Amazon Web Services) è la piattaforma di cloud computing di Amazon. In questo articolo vedremo a cosa serve, ne analizzeremo i componenti e ne introdurremo costi e funzionalità. Negli articoli che seguiranno vedremo come utilizzarla in pratica utilizzando il profilo gratuito a costo zero che il servizio mette a disposizione per un intero anno.
Prima di addentrarci nello specifico del tema di questa serie, è bene riassumere in poche battute il contesto nel quale si colloca AWS. Chi avesse già chiari i concetti di cloud computing, PAAS o IAAS può saltare direttamente alla seconda pagina di questo articolo.
Cos'è il cloud computing
Con cloud computing si è soliti designare tutti quei servizi tramite i quali l'utente e il gestore sono in grado di, diciamo così, smaterializzare i dati e i servizi presenti, in una visione tradizionale dell'IT, in locale sull'elaboratore o sulla propria rete, e di renderli disponibili on demand sulla rete. Nell'ambito del cloud computing si è arrivati a definire diversi modelli di erogazione dei servizi attraverso principi di cloud computing. Tra questi vale la pena menzionarne almeno due: il modello IAAS (Infrastructure as a Service) e il modello PAAS (Platform as a Service).
Il modello IAAS
Con IAAS (Infrastructure as a Service) si intendono tutti quei gestori che, utilizzando sistemi di virtualizzazione, mettono a disposizione servizi per creare stack applicativi (web server, database ecc.) totalmente personalizzati, a partire dal sistema operativo in su. In poche parole, il gestore mette a disposizione un ambiente, più o meno amichevole, all'interno del quale è possibile la creazione assistita di istanze di macchine virtuali, o meglio appliances, come vengono chiamate da alcuni.
L'approccio IAAS rende possibile un elevato livello di personalizzazione dell'ambiente. Per contro rimangono totalmente in carico all'utilizzatore gli aggiornamenti dei componenti applicativi (web server, database ecc.), la configurazione post-installazione del sistema operativo e ogni installazione di componenti aggiuntivi.
L'utilizzatore di un servizio IAAS è dunque un utente evoluto, con conoscenze, almeno di base, di system o network administration.
L'approccio IAAS è particolarmente adatto a soggetti commerciali di medie dimensioni che, in caso di necessità, possono contare su di uno staff tecnico per la creazione di istanze totalmente on demand. Questo consente, di fatto, un notevole risparmio in termini di risorse hardware, poiché evita l’adozione di dispendiose infrastrutture hardware proprietarie che, tra l'altro, rimarrebbero, per il 90% del tempo sottoutilizzate. Adottare una soluzione di tipo IAAS permette di spendere solo per le risorse effettivamente utilizzate, consentendo al contempo di gestire in maniera soddisfacente i picchi di utilizzo.
Il modello PAAS
Il modello PAAS (Platform as a Service) è caratterizzato da un assunto di partenza quasi opposto rispetto al modello IAAS. Se, da una parte, l'utente IAAS può essere immaginato come un system administrator, l'utente di un servizio PAAS è di solito uno sviluppatore: qualcuno che vuole concentrarsi sul dettaglio implementativo.
L'utente di un servizio PAAS si concentra su una particolare piattaforma di riferimento, a partire dalla quale costruire i propri servizi. Ciò permette di minimizzare i costi relativi al setup iniziale e alla distribuzione della propria applicazione.
Utilizzando una piattaforma PAAS si riduce il costo della distribuzione delle applicazioni al minimo indispensabile. La progettazione e l'erogazione di un'applicazione di alto livello può comportare la risoluzione di problematiche di amministrazione di sistema molto complesse, il che si traduce nella necessità di avere a disposizione uno staff di sistemisti qualificati che seguano, oltre alla messa in esercizio del prodotto, anche una manutenzione periodica, un monitoraggio costante dell'applicativo.
L'utilizzatore di un servizio PAAS vuole risparmiare su questi costi di configurazione e manutenzione. Il know how necessario alla corretta gestione è attinto in massima parte dalla gestione dell'infrastruttura PAAS.
Esempi di servizi PAAS sono: Windows Azure e Google App Engine.
Che cos'è AWS
AWS non è un servizio, bensì una intera classe di servizi offerti ed amministrati tramite una interfaccia comune. L'offerta di AWS comprende sia soluzioni IAAS, sia stack applicativi di tipo PAAS. L'interfaccia comune tramite la quale i servizi sono offerti è la console web di AWS, raggiungibile puntando il browser all'indirizzo: https://console.aws.amazon.com/
Il servizio IAAS per eccellenza di AWS è rappresentato dal servizio AWS EC2. EC2 sta per Elastic Computing Cloud, dove C2 è un gioco di parole: dall'acronimo ECC si passa ad EC2; così come dall'acronimo Simple Storage Service (lo vedremo più avanti) si passa a S3.
EC2 è un servizio di AWS che fornisce un'infrastruttura web per disporre di macchine virtuali completamente on demand. Tramite EC2 è possibile configurare, avviare, spegnere e clonare istanze di macchine virtuali costruite totalmente secondo le proprie necessità. È inoltre possibile avviare immagini già pronte messe a disposizione della comunità con le applicazioni più diffuse.
Nei prossimi articoli avremo modo di approfondire in dettaglio le tematiche relative ad EC2, fino ad offrire una vera e propria guida all'utilizzo, per il momento ci limiteremo ad una panoramica dei servizi offerti, e alle utenze di riferimento.
Servizi offerti
I servizi offerti, com'è possibile vedere anche dalla Console AWS, sono suddivisi in cinque principali aree di riferimento:
- Compute & Networking
- Storage & Content Delivery
- Database
- Deployment and Management
- App Services
Ciascuna di queste aree novera un gran numero di servizi a disposizione, soprattutto se si considera il fatto che continuano a nascere servizi nuovi. Nelle pagine che seguono li analizzeremo in dettaglio.
AWS Networking
Per quanto riguarda l'area "Networking" l'offerta novera i seguenti servizi:
EC2 "Virtual Servers in the Cloud", il servizio di cui parlavamo poco sopra, e su cui ci soffermeremo nei prossimi articoli, dedicato alla creazione e configurazione di istanze virtuali, con la possibilità di accedere ad un pool di immagini pronte per l'uso.
Elastic MapReduce Offerta di servizi di tipo PAAS per il map-reduce; senza soffermarsi troppo sul funzionamento dell'algoritmo di Map and Reduce, che meriterebbe di essere il tema di un intero tomo, basti pensare che questo è un servizio che agevola il trattamento di grandi moli di dati. Il servizio è basato sul framework Apache Hadoop per l'implementazione del calcolo distribuito. Qualcuno potrebbe definire questo tipo di offerta secondo una ulteriore categoria SAAS, cioè, più propriamente: Software As A Service. Non è nostra intenzione continuare a dissezionare tutte le possibili classificazioni di prodotti per il Cloud Computing, il nostro obiettivo è unicamente quello di rendere più comprensibile al lettore di che tipo di servizi stiamo parlando, di come si adattino alle sue esigenze, e che costi comportino.
Route 53 "Scalable Domain Name System" Una volta che avrete iniziato ad usare EC2, quando dovrete rendere accessibile la vostra istanza ad un pubblico di utenti, vi renderete conto che l'IP che Amazon vi assegna è un IP temporaneo. Sarete allora caldamente incoraggiati ad usare Route 53, che di fatto è il sistema di naming da usare con EC2.
VPC Permette la creazione di una vera e propria VPN nel cloud di AWS.
AWS Storage e Content delivery
CloudFront una soluzione per realizzare reti di content delivery, ovvero un modello distribuito per mettere a disposizione contenuti sulla rete globale permettendo download veloci e bassa latenza.
S3 (Simple Storage Service) Un sistema di storage per il cloud.
AWS Database
DynamoDB: un data store "NoSql", una soluzione completamente controllabile da console web, secondo l'approccio che caratterizza AWS. Consente performances predicibili con ottima scalabilità, secondo quanto dichiarato anche nella pagina principale del servizio.
ElastiCache: un sistema di caching in memoria dei dati
RDS: una soluzione Db tradizionale (MySQL, Oracle, MS SQL Server), ma "managed" da console AWS.
Continuiamo con l'analisi delle varie sezioni in cui sono suddivisi i servizi di Amazon Web Services.
Deployment and Management
CloudFormation: essenzialmente una serie di macchine virtuali "template" da utilizzare per prodotti in configurazioni tipiche come, p. es: WordPress, a partire da "ricette" già pronte. Si contano poi servizi per la profilazione dell'utenza (IAM) ,
CloudWatch: per il monitoring delle istanze
Elastic Beanstalk: per il deployment di applicazioni Java in chiaro stile PAAS. Quest'ultimo servizio è nato originariamente per applicazioni Java, ma è stato poi esteso anche ad applicazioni PHP e... non si escludono ulteriori evoluzioni.
App Services
CloudSearch: un servizio che consente di integrare facilmente un motore di ricerca, con la consueta attenzione verso le tematiche relative alle prestazioni e la scalabilità, che costituiscono il vero valore aggiunto.
SES (Simple Email Service): un servizio per l'invio massivo di email con gestione della transazione; una soluzione ideale, ancora una volta, per i professionisti che non hanno a disposizione risorse sufficienti per sviluppare una soluzione ad-hoc e possono avvantaggiarsi della flessibilità di questo utile strumento.
SNS (Simple Notification Service): un servizio dedicato alle notifiche istantanee. Rende possibile sviluppare soluzioni software per notificare tutti i sottoscrittori ad un servizio in tempo reale.
SQS (Simple Queue Service): implementa un sistema per la gestione di code di messaggi. Dedicato agli sviluppatori di applicazioni distribuite che vogliano avvantaggiarsi di una soluzione che già risolva tutte le problematiche relative alla scalabilità.
SWF (Simple Workflow Service): è un servizio per la realizzazione di workflow . Utilizzando Amazon SWF, lo sviluppatore può modellare i vari componenti di una applicazione complessa come task. Amazon SWF funge da orchestratore di questi task, con l'obiettivo di fornire la necessaria scalabilità ed affidabilità di esecuzione.
Quanto costa
Analizzare il costo completo dell'intero stack di servizi AWS è piuttosto complicato. Vediamo di rispondere alle domande più comuni.
I costi in generale
Per una disamina attenta dei costi, è bene conoscere le caratteristiche del singolo servizio (quelli di EC2, ad esempio, sono descritti alla pagina http://aws.amazon.com/ec2/pricing/). I costi dipendono fortemente dal tipo di istanza al quale si fa riferimento. In generale, per quanto riguarda EC2, si parla di un costo orario intorno agli 8 centesimi di dollaro per istanze Linux "small" e 11.5 per le equivalenti Windows "small". I prezzi raddoppiano per istanze "medium", quadruplicano per "Large", ed arrivano fino a $0.640 all’ora per Linux, e $0.920 per le equivalenti Large su Windows.
Abbiamo visto più da vicino il pricing per il servizio EC2, sia perchè in seguito ci occuperemo di questo più in dettaglio, sia perchè è utile per capire il modello proposto. In sostanza, i costi sono in generale pesati sull'utilizzo orario di risorse fisiche.
Come si è visto per EC2, si hanno dei modelli-tipo che fanno riferimento ad una fascia ben definita di impiego di risorse: CPU, memoria e spazio disco definiscono il modello di istanza (small, mini e così via). A partire da questo modello, il prezzo base contempla un numero di ore di utilizzo e di occupazione di banda. Ogni utilizzo sopra la soglia stabilita viene pagato come extra. In generale è bene analizzare sin da subito le proprie esigenze, in modo tale da limitare al massimo utilizzo di risorse oltre la soglia, perchè in genere penalizza economicamente la scelta.
Vista l'ampia gamma di servizi offerti sotto l'egida di AWS, non sarebbe praticabile elencare tutte le casistiche di costi; ad ogni modo, i principi sono più o meno gli stessi per tutti i servizi offerti: esiste uno o più modelli di utilizzo, da scegliere con attenzione in base alle esigenze fondamentali; ogni utilizzo eccedente di banda, memoria, cpu, disco, numero di richieste, e così via, viene pagato extra in base ad un prezzario ben definito. Tutto è documentato sulla pagina del singolo servizio.
Le unità di misura dei costi
L'unità di misura è chiaramente diversa da servizio a servizio, e generalmente viene riportata ad una tariffa oraria. Ad esempio, per l'utilizzo di DynamoDB abbiamo tariffe definite in base al Write Throughput (1 centesimo di dollaro l'ora per 10 unità di “Write Capacity”). Non è dunque intuitivo stimare i costi complessivi a partire da questo genere di tariffe. Per questo si suggerisce di fare un buon utilizzo del free tier (ossia del periodo di prova gratuito). Il free tier permette di pesare le proprie esigenze, ed avere un campione di riferimento di quelle che sarà poi la metrica delle risorse utilizzate in ambiente di esercizio. Rimane da questo punto di vista accettabile, anche se coinvolge l'utilizzatore in questo delicato processo di valutazione dei costi, alla fine il conteggio risulta del tutto trasparente.
Insomma: non è semplice calcolare i costi di utilizzo di AWS; per il dettaglio si rimanda in ogni caso alla documentazione ufficiale di Amazon, tenendo in considerazione anche il fatto che i prezzi vengono di tanto in tanto ritoccati ( in genere al ribasso, per nostra buona sorte ).
La prova gratuita
Ciò che a noi interessa sottolineare è che, trattandosi in generale di servizi on- demand, i costi che vengono sostenuti vanno a coprire solamente risorse di calcolo effettivamente utilizzate, sia in termini di utilizzo di banda, CPU, memoria e storage fisico. Come accennavamo in precedenza, un aspetto molto interessante dell’offerta è la disponibilità, per il primo anno, di un free tier, un insieme di servizi che, utilizzati al minimo delle risorse, possono essere utilizzati gratuitamente sia per valutare i servizi sia per lo sviluppo di applicazioni.
Tra i vari servizi offerti nel quadro del free tier, e che si suggerisce di visionare dalla URL ufficiale, vale la pena di sottolineare 750 ore di Amazon EC2, 750 ore di bilanciamento carico gratuite, e 30 GB di storage (denominato Elastic Block Storage).
Negli articoli che seguiranno, saremo lieti di fornire indicazioni in merito all’utilizzo del free tier per indagare le potenzialità di Amazon EC2, ed anche per utilizzare delle comode istanze di sviluppo totalmente on-demand.