CAD SVILUPPO La nuvola elastica di Amazon GIOCHI RUBRICHE Di Michele Costabile Un servizio che permette di avere una presenza web sempre adeguata al traffico generato, senza acquistare un server. Dopo la registrazione per il servizio abbiamo a disposizione parecchia documentazione per iniziare il nostro progetto. N el numero precedente abbiamo parlato di Amazon S3, Ec2, Sqs e SimpleDB, un catalogo di servizi da considerare fra le diverse opzioni per la creazione di applicazioni sul Web. I servizi di Amazon sono pensati per dare agli sviluppatori un’opportunità di avere una presenza ricca sul web, senza investire in un server di proprietà e senza la rigidità di un servizio pensato solo per la pubblicazione. Per spiegarci in due parole, l’offerta di Amazon consiste di quattro filoni principali: macchine virtuali in diverse varianti di Unix (Ec2), spazio su disco (S3), accodamento di messaggi (Sqs) e un semplice database (SimpleDB) con un modello di fatturazione a consumo. Collettivamente questi servizi sono indicati col nome di Aws (Amazon Web Services), mentre le sigle stanno per Electric Compute Cloud (Ecc) Simple Storage Services (S3) e Simple Queue Services (Sqs). I servizi accessori S3 crea la base per tutti gli altri servizi offrendo le funzioni minime per la memorizzazione di dati. I prezzi sono abbastanza abbordabili. Il calcolatore per il calcolo delle ipotesi di spesa che troviamo all’indirizzo calculator.s3.amazonaws.com/calc5.ht ml ci fa un preventivo di $3,80 nell’ipotesi di uno spazio occupato medio mensile di 2 GByte, un trasferimento di dati in ingresso e in uscita di uno e dieci GByte rispettivamente per un migliaio di richieste di consultazione. Non c’è un limite allo spazio occupato e non c’è limite per le dimensioni dei file da immagazzinare. Sqs è un semplice servizio di accodamento di messaggi, un sistema per la memorizzazione di richieste di calcolo semplice e efficace, che ha preceduto di molti anni i database nella timeline delle tecnologie informatiche per l’elaborazione dei dati. Quando occorre inserire una registrazione in prima nota o tenere traccia di una spesa, si può usare l’accodamento di un messaggio al posto di una transazione interattiva in tempo reale con la certezza che il messaggio può essere recapitato anche quando il sistema che lo deve ricevere non è in linea e che la consegna avverrà una e una sola volta. SimpleDB è quello che dice il nome, un sistema per la memorizzazione di dati strutturati che imita un database. L’interfaccia non è Sql, ma si basa su comandi proprietari, come Get, Put e Dolete. Le interrogazioni sono eseguite con un comando Query, che permette test di uguaglianza e di confronto, 214 PC Professionale - Luglio/Agosto 2008 consente di unire condizioni con And e Or e ha gli operatori Intersection e Union per offrire una parte della potenza di Sql. Ognuno di questi servizi può essere acquistato separatamente e utilizzato da un client situato in un punto qualsiasi di Internet. Per esempio, si può ovviare alle limitazioni di un contratto web con spazio limitato mettendo i file più grossi, come i video, in Amazon S3. La nube elastica di computer Amazon Ec2 è il servizio che ci interessa di più in questa sezione della rivista, dato che è quello che può dare il motore a tutti gli altri servizi di memorizzazione dei dati per creare applicazioni. Come abbiamo detto, al cuore di Ec2 c’è la scelta, la configurazione e l’attivazione di un’immagine di una macchina virtuale, conservata in uno spazio S3. Si può scegliere l’immagine preferita fra le molte configurazioni precostituite, oppure configurare la propria versione. Di ogni macchina virtuale si possono scegliere diverse misure, come RUBRICHE SVILUPPO le magliette, dalla small, con 1,7 GByte di memoria, un processore e 160 GByte di disco, alla extra large con 7 GByte di memoria, otto processori virtuali e 1690 GByte di spazio su disco. Si può decidere di volta in volta che tipo di macchina allocare per le esigenze di processing del momento. Le macchine virtuali possono essere attivate in più copie e anche distribuite geograficamente sui server di Amazon in diverse locazioni. Quasi tutti i sistemi a disposizione sono varianti di Unix. Troviamo diverse versioni e configurazioni di Linux: Fedora Core, Ubuntu e a farla da padrone, ma anche Open Solaris corredato di ambiente Java e dell’ottimo server Glassfish. C’è un tutorial che mostra come installare Window Server in un emulatore (www.howtoforge.com/amazon_elastic_compute_cloud_qem), ma due livelli di emulazione ci paiono davvero un’esagerazione. Dove sta il bello Il fascino della soluzione sta nel fatto che si ha la possibilità di configurare la propria macchina virtuale come si preferisce scegliendo in completa libertà il linguaggio e il framework da usare per lo sviluppo ma senza impegnarsi nell’acquisto di un server. Il biglietto di ingresso è basso perché l’uso di una macchina per un paio di giorni costa meno di cinque dollari e si paga solo per il periodo di effettivo uso. È interessante la possibilità di sperimentare sistemi operativi, framework e altre configurazioni senza spendere cifre sostanziali, almeno fino a che il traffico resta basso, come su un sistema di prova. Si può pensare anche di armare una batteria di configurazioni alternative per uno studio di fattibilità o una scelta architetturale senza perdere tempo ad aspettare l’arrivo di sistemi reali e senza dover trovare un posto alle macchine al termine della prova. Uno dei vantaggi delle macchine virtuali di Ec2 è che cessano di esistere e di costare appena sono spente. Quando il traffico comincia a salire, naturalmente sale anche la bolletta di Amazon, però abbiamo la possi- bilità di moltiplicare le macchine virtuali in uso per creare un datacenter abbastanza agguerrito da sopportare una citazione sulla home page di Msn o Slashdot. Il caso più eclatante è quello di Animoto.com, un servizio che fa il montaggio di una sequenza di fotografie in un film. Grazie al passaparola su Facebook, Animoto è passata da 25.000 a 250.000 utenti in tre giorni con 20.000 nuove registrazioni ogni ora. In un post sul blog della società sono citate cifre impressionanti, come un picco di 25.000 utenti contemporanei per ora. Lo storage di Animoto è in S3, grazie a questo, i responsabili della società non hanno avuto il problema di riorganizzare i sistemi per fare fronte al successo insperato e hanno potuto concentrarsi sulla stabilità dell’applicazione, che ha mostrato immediatamente tutti i bug più nascosti sotto il nuovo carico. Un ultimo punto di interesse per le grandi aziende sta nel fatto che Amazon ha creato un servizio di assistenza a pagamento, che sicuramente viene incontro alle esigenze di affidabilità degli utenti corporate, che possono prendere una decisione con maggiore leggerezza se viene schivata l’obiezione di imbarcarsi in un progetto basato sul fai da te. Insomma, abbiamo visto diverse interessanti opportunità in questi servizi di Amazon, quindi siamo andati più a fondo per sperimentare dove stanno i difetti. Prepariamoci per lavorare Per iniziare a registrarci per l’uso di Amazon Elastic Compute Cloud dovremo registrarci e indicare un numero di carta di credito per la fatturazione. L’operazione è semplicissima per chi ha già un account utente su Amazon: in ogni caso occorre registrarsi per usare Ec2 e gli altri servizi, ma i dati di pagamento possono essere gli stessi dell’account standard. Un account non comporta nessuna spesa: la carta di credito viene caricata solo delle spese dovute a un consumo effettivo di risorse. Durante la registrazione viene creato un certificato e una chiave per la crittografia che dovremo usare in seguito per accedere al servizio. Gli strumenti necessari per configurare e pilotare i sistemi virtuali sono a disposizione nello spazio dedicato alle risorse per l’uso dei servizi: aws.amazon.com/resources. L’installazione è semplicissima: occorre semplicemente decomprimere l’archivio zip in cui sono distribuiti in una directory qualsiasi e impostare una variabile per puntare alla directory di installazione con il comando $ export EC2_HOME=<path-to-tools> su Unix, oppure su Windows. C:\> set EC2_HOME=<path-to-tools> Bisogna aggiungere alla variabile PATH l’indirizzo della directory bin Si può fare una stima di quanto sarà la nostra spesa utilizzando il calcolatore JavaScript che troviamo all’indirizzo calculator.s3.am azonaws.com/ca lc5.html 215 PC Professionale - Luglio/Agosto 2008 RUBRICHE SVILUPPO all’interno della cartella che ospita gli strumenti e l’installazione è terminata. Il dialogo fra il codice locale e il data center viene autenticato dal certificato che abbiamo scaricato durante la registrazione per l’uso del servizio, bisogna quindi informare il codice della posizione del certificato e della chiave pubblica. In questo esempio chiameremo cert-XYZ.pem il certificato e pk-XYZ.pem la chiave pubblica. In realtà i nomi sono molto più lunghi. Assumiamo anche che la directory in cui conservare i certificati sia ~/.ec2 su Unix e C:\ec2 su Windows. Ecco infine i comandi di configurazione, su Unix $ export EC2_PRIVATE_KEY=~/.ec2/pkXYZ.pem $ export EC2_CERT=~/.ec2/cert-XYZ.pem Su Windows C:\> set EC2_PRIVATE_KEY=c:\ec2\pkXYZ.pem C:\> set EC2_CERT=c:\ec2\cert-XYZ.pem Dopo la configurazione, si lancia il comando ec2-add-keypair gsg-keypair > id_rsa-ilmio-keypair per creare una coppia di chiavi per la connessione in un file di testo, chiamato per esempio id_rsa-ilmiokeypair. Apriamo il file il-mio-keypair con un editor di testi per eliminare tutto quello che sta prima o dopo le linee che delimitano la chiave “——-BEGIN RSA PRIVATE KEY——-” “——-END RSA PRIVATE KEY——-” Le linee che delimitano la chiave vanno conservate. Avviamo il motore (virtuale) A questo punto possiamo attivare una macchina virtuale ec2-run-instances ami-2bb65342 -k ilmiokeypair l’output del comando è simile a questo: RESERVATION r-7430c31d 924417782495 default INSTANCE i-ae0bf0c7 ami2bb65342 pending gsg-keypair 0 m1.small 2008-03-21T16:19:25+0000 us-east-1° Il secondo campo della linea che inizia con INSTANCE è la chiave che possiamo usare per pilotare la specifica istanza della macchina virtuale modello ami-2bb65432, che è un Linux Fedora Core 4 in configurazione minima. La nostra macchina è avviata, ma ancora non possiamo raggiungerla. Come in qualsiasi datacenter che si rispetti, dobbiamo aprire le porte del firewall per poter arrivare al nostro sistema dall’esterno. Apriamo quindi la porta 22, usata da Ssh PROMPT> ec2-authorize default -p 22 PERMISSION default ALLOWS tcp 22 22 FROM CIDR 0.0.0.0/0 Apriamo anche la porta 80, quella del server Web. Naturalmente, in un caso reale possiamo riservarci di aprire l’accesso a una porta sensibile solo dopo l’installazione di tutto il necessario. PROMPT> ec2-authorize default -p 80 PERMISSION default ALLOWS tcp 80 80 FROM CIDR 0.0.0.0/0 Colleghiamoci Adesso possiamo collegarci al sistema. Scopriamo il suo hostname con il comando PROMPT> ec2-describe-instances iae0bf0c7 RESERVATION r-7430c31d 924417782495 default INSTANCE i-ae0bf0c7 ami2bb65342 ec2-67-202-7-236.compute1.amazonaws.com L’ultimo campo della seconda linea è il nome del nostro sistema, possiamo quindi collegarci come root con il comando ssh -i id_rsa-ilmio-keypair root@ ec2-67202-7-236.compute-1.amazonaws.com grazie all’autenticazione tramite certificato, avremo una shell come root sul sistema remoto senza dover digi- 216 PC Professionale - Luglio/Agosto 2008 tare una password. A questo punto possiamo osservare la configurazione del server Apache, tenendo presente che la radice del server è in /var/www/html e i file di log sono in /etc/httpd/logs. Questo meccanismo di autenticazione richiede un po’ di configurazione agli utenti Windows che usano l’utility open source putty (www.putty. org). Per configurare la connessione con putty bisogna prima tradurre le chiavi nel formato utilizzato dal programma usando l’utility puttygen. Successivamente si deve configurare il file di credenziali creato nel passaggio precedente per la connessione al server. Ulteriori dettagli si trovano nella Getting Started Guide che introduce all’uso dei servizi e si può trovare aprendo la pagina di documentazione (developer.amazonwebservices. co) e facendo un clic su Elastic Compute Cloud. Armiamo la macchina e usciamo dal porto L’immagine di macchina virtuale che abbiamo utilizzato comprende un server Apache e una minima pagina di accoglienza. Possiamo osservare la home page di default collegandoci con il browser all’indirizzo che abbiamo ricavato dal comando ec2-describe-instances, un indirizzo simile a ec2-67-202-7-236.compute1.amazonaws.com. Per caricare sul server una pagina, possiamo usare il comando scp che fa parte del corredo di putty ed è nell’installazione standard di diversi sistemi Unix. Scp permette di copiare in modo sicuro file e directory da un sistema all’altro. Ad esempio, il comando scp -i id_rsa-ilmio-keypair file_locale [email protected]:/tmp trasferisce un file chiamato file_locale nella directory /tmp del sistema remoto. Conviene conservare una copia locale di tutti i file da trasferire, perché se si segue il percorso che abbiamo illustrato, si crea una nuova macchina virtuale ad ogni avvio partendo da un’immagine pulita, cioè si parte ogni volta da zero. Può essere utile creare un archivio in formato zip, che potremo aprire sul sistema Fedora Core 4 con il comando unzip. In definitiva, il modo di operare è lo stesso che si usa con qualsiasi sistema Unix installato in una server farm: trasferimenti con scp e sessioni in riga di comando con ssh. Naturalmente si può pensare di dotare la macchina di un’interfaccia grafica e collegarsi in una sessione grafica, ma la sicurezza ne soffre gravemente. Anche Microsoft permette di installare server Windows 2008 senza interfaccia grafica, per migliorare la robustezza del sistema. Dischi smemorati Una delle specificità che derivano dalla natura delle macchine virtuali è che quello che si carica è un’immagine della macchina in un dato Videata affascinante se si ha l’animo del sysadmin. Siamo connessi come root sul sistema remoto. momento. Se si avvia una macchina e si altera lo stato del sistema, creando e modificando file, l’immagine originaria rimane intatta. Insomma, contrariamente a quanto ci si potrebbe aspettare abbiamo parecchio spazio su disco a disposizione, ma è uno spazio volatile. La soluzione consiste nel creare un’istantanea del sistema virtuale dopo averlo configurato come lo vogliamo conservare e salvare l’istantanea in S3. La documentazione mostra la procedura dettagliata da seguire. Naturalmente dovremo avere creato un account anche su S3. Esiste un’altra soluzione per l’uso di spazio su disco permanente: si possono creare volumi permanenti e montarli su una macchina esattamente come si può montare un Cdrom o un disco Usb. I comandi del toolkit di Amazon che permettono di farlo sono ec2create-volume e ec2-attach-volume. L’elenco dei volumi disponibili RUBRICHE SVILUPPO La nostra spesa è sotto controllo in tempo reale. Abbiamo lasciato acceso il nostro sistema per due giorni e mezzo spendendo circa cinque dollari. è ec2-attach-volume. Per maggiori informazioni si può leggere la voce del blog di sviluppo che illustra la funzione ( http://aws.typepad. com/aws/2008/ 04/block-to-the-fu. html). Naturalmente c’è anche l’opzione di usare S3, ma la complicazione sta nel dover utilizzare interfacce applicative specifiche, che è ben diverso da un volume di memorizzazione integrato normalmente nel sistema. La volatilità dei dischi può comunque essere gradita nel contesto giusto. Nel caso di una scuola, per esempio, partire da una situazione nota a priori, che si ripristina senza sforzo è quello che si cerca faticosamente di ottenere. Lo stesso vale quando si ha un’applicazione matura e un processo di installazione automatizzato. Un plugin di Maven, che permette di automatizzare la catena di compilazione di un’applicazione Java con la distribuzione automatica su un server Ec2 dei prodotti di compilazione si trova nello spazio dedicato ai progetti open source di Google: code.google.com/p/cloudtools/. Un sito nomade Un aspetto dei sistemi virtuali di Ec2 che può lasciare perplessi è che la configurazione della rete è dinamica e l’indirizzo cambia a ogni riavvio, così come cambia l’indirizzo configurato nel Dns. Insomma, la nostra casa sul web si sposta di continuo. La soluzione più semplice al proble- Il resoconto scaricato in formato Csv da Amazon. Abbiamo formattato condizionalmente la colonna UsageType per distinguere l’attività del sistema, il traffico in ingresso e uscita. ma sta nel configurare un Dns dinamico, come per esempio dyndns.com. Un articolo sul blog di Codesta spiega dettagliatamente come fare ( blog.codesta.com/codesta_weblog/ 2008/02/amazon-ec2—wh.html). Un occhio ai costi Abbiamo lasciato acceso giorno e notte un sistema sperimentando una spesa giornaliera intorno ai due dollari e mezzo. La macchina della prova è un sistema entry level, con un traffico minimo, poco più di trecento righe di log al giorno. Una spesa vicina a 75 dollari al mese non è particolarmente conveniente per un hosting dedicato, ma nemmeno troppo distante dall’offerta commerciale corrente, specie considerando la debolezza del dollaro rispetto all’euro. Ricordiamo che il termine di confronto è un piano di hosting che ci lasci il completo controllo della configurazione della macchina e includa la possibilità di collegarsi come amministratore. Per una startup con un piano industriale 75 dollari al mese sono una spesa più che abbordabile e, soprattutto, l’hosting virtuale dà la possibilità di partire con una spesa modesta e scalare a piacere se arriva il successo. Il vantaggio principale è che ci si può dimenticare della creazione dell’infrastruttura e si può riconfigurare tutto in qualsiasi momento, aggiungendo, togliendo e cambiando a pia- 218 PC Professionale - Luglio/Agosto 2008 cere senza aspettare la consegna delle macchine e pianificare la manutenzione. Lasciamo a chi è coinvolto il compito di monetizzare il vantaggio di non impegnare risorse mentali e economiche fuori dall’obiettivo principale e di avere una flessibilità assoluta, senza ordini hardware, o tempi di consegna e installazione. Nel caso di un professionista tenere accesa una macchina sette giorni su sette può essere gravoso, ma è comunque interessante che con meno di cinque Euro si può accendere una macchina sull’istante, usarla per tre giorni per provare una configurazione, sperimentare un’installazione o studiare un ambiente e dimenticarsene, senza strascichi a lavoro concluso. Per chi organizza dei corsi il punto di interesse può essere la stabilità della configurazione di partenza e il fatto di doversi occupare solo dei sistemi in dotazione agli studenti. Per contro, se si pianifica il supporto per un’applicazione, è da considerare l’ipotesi di Google AppEngine, che è pur sempre un’offerta di hosting, anche se non c’è la possibilità di scegliere la piattaforma di sviluppo. Se Python è una scelta adeguata per i piani di sviluppo e il team a disposizione, è da considerare nel bilancio che Google AppEngine dovrebbe offrire un contratto gratuito al livello di ingresso. Se viceversa si preferisce, ad esempio, Ruby, la flessibilità di un sistema completamente a disposizione è indispensabile. •
© Copyright 2024 Paperzz