Amazon EC2 avanzato con Load Balancing e Auto Scaling
da Massimo Della Rovere · pubblicato il 28 novembre, 2014 · modificato il 5 giugno, 2017

Questo è l’ultimo articolo che riguarda l’introduzione al servizio EC2, negli altri articoli abbiamo visto i concetti generali per poi passare ad una demo online in cui sono state spiegate le opzioni che riguardavano l’avvio di un’istanza. Oggi invece vedremo i servizi più avanzati, come Elastic Load Balancing e Auto Scaling. Il primo è un servizio per il bilanciamento del lavoro è l’altro per scalare in maniera automatica.

Questi servizi sono facili da capire quando vengono presentati con degli esempi pratici, quindi cercherò in questo articolo di vedere velocemente la parte concettuale e dedicarmi con più attenzione alla configurazione pratica. Se avete un’account AWS, la cosa migliore sarebbe quella di ripetere tutti i passaggi che trovate in questo articolo e controllare personalmente tutti i risultati sulla vostra management console.

Load Balancing

Questo servizio distribuisce in modo automatico il traffico della nostra applicazione tra diverse istanze EC2. La cosa interessante del servizio è che il traffico sarà suddiviso solo tra le istanze che risultano attive e funzionanti, infatti se qualche istanza per caso avesse dei problemi di disponibilità, il traffico verso quest’ultima sarebbe disattivato e tutte le connessioni sarebbero dirottate sui server che hanno la capacità di rispondere.

È possibile utilizzare la caratteristica di commutazione errore DNS presente nel servizio di Amazon Route 53 per migliorare la disponibilità e creare un secondo Load Balancer, quanto il servizio di Route 53 troverà in errore il primo load balancer, magari perché non ci sono istanze attive correttamente, girerà il traffico sulla seconda configurazione. Qui di seguito vi allego un’immagine in cui è rappresentato uno scenario di esempio.

Elastic load balancing

Proprio per questo motivo il servizio non viene considerato solo come bilanciamento del traffico ma possiamo dire che svolge anche una funzione di disponibilità. Oltretutto se dividiamo le nostre istanze su diverse zone, il servizio di load balancing a fronte di un problema generale sulla zona geografica userà solo il gruppo di istanze che si troveranno sulla zona di disponibilità funzionante senza perdita di servizio.

Sicurezza: Il servizio di Load Balancing esegue anche una funzione di sicurezza, infatti è possibile pubblicare il balancer in internet ma dirottare tutto su una rete privata, in questa maniera gli accessi dall’esterno vengono protetti dalle porte permesse e le istanze EC2 rimangono in una rete senza accesso a internet. In ogni caso il servizio può essere configurato in ambiente VPC per creare un balancer del tutto privato.

Auto Scaling

Questo servizio permette di scalare automaticamente le risorse presenti in Amazon EC2 sia aumentandole che diminuendole, in base a delle condizioni predefinite. Con questo servizio è possibile aumentare senza interruzione di servizio la potenza necessaria e far fronte all’eventuale picco di richieste. Nella stessa misura è possibile diminuirla quando non è più necessaria in modo da tenere sotto controllo i costi generali.

Il servizio è indicato per le applicazioni che mostrano dei cambiamenti repentini durante le ore, giorni o settimane. Auto Scaling non ha costi addizionali di servizio, in quanto è compreso nei costi di utilizzo di EC2. Possiamo collegare gli eventi di Amazon CloudWatch per innescare delle azioni di scalabilità, le quali possono avvenire all’interno di un gruppo di istanze in Load Balancer. (visto precedentemente)

Auto Scaling

Ad esempio possiamo definire una condizione che aggiunga nuove istanze EC2 con un incremento di 3 istanze alla volta quando il consumo medio di CPU sorpassi il 70% per un certo periodo di tempo consecutivo. Con la stessa tecnica possiamo definire una regola che elimini delle istanze quando il consumo medio totale scende al 10%. Non esiste una regola valida per tutti gli ambienti, dovete trovare il compromesso giusto.

Nella sezione dedicata al servizio di Auto Scaling possiamo creare diversi gruppi e legare caratteristiche di scalabilità diverse. Ogni gruppo terrà conto delle azioni intraprese e le memorizzerà in una specie di log consultabile dalla console. In ogni caso è possibile anche attivare il servizio di Amazon SNS per ricevere le notifiche.

Load Balancing (configurazione)

Per provare questa feature bisogna andare sulla nostra management console ed eseguire la creazione di un Load Balancer. che troviamo nel menu principale di EC2. Nella fase di creazione ci verranno richiesti diversi parametri che analizzeremo e dovremo indicare le istanze EC2 che vogliamo associare al Load Balancing. Come potrete notare non usando altri servizi questa associazione la dovremmo sempre eseguire manualmente.

Prima di lanciare la creazione del Load Balancer verifichiamo di avere un’ambiente di prova per eseguire le nostre prove, con almeno una VPC, una subnet pubblica e come minimo due istanze attive che abbiamo qualche particolare che le distingue. Ad esempio in questo tutorial abbiamo configurato due web server che fanno vedere la stessa pagina HTML con un server che indica “SERVER A” e l’altro “SERVER B”.

Create load balancer

Come possiamo vedere da questa schermata i passaggi sono semplici, nel primo passo dobbiamo indicare il nome del Balancer, la VPC che desideriamo utilizzare e le porte su cui dobbiamo eseguire il bilanciamento del traffico. Nella seconda sezione ci verranno richiesti i parametri che permettono al servizio di sapere quando considerare un’istanza EC2 non più valida e quindi idonea a non ricevere più traffico.

Una volta impostata la schermata di Health Check ci dovrebbe apparire quella per la definizione delle subnet che il Load Balancer deve controllare. Infatti come abbiamo già accennato è possibile bilanciare il traffico su istanze che appartengono a delle zone di disponibilità differenti. In questo tutorial per semplicità ne sceglierò solo una.

Amazon EC2 Subnets

Proseguiamo indicando le istanze EC2 che fanno parte di questo bilanciamento, adesso basta indicare quelle che abbiamo attivato, ma il servizio permette anche di rimuovere o aggiungerne di nuove dopo la  di creazione. Per eseguire un test ho aggiunto solo due istanze in un’unica zona di disponibilità e aggiungeremo queste, sono due istanze uguali con ubuntu, ma che indicheranno nella home pagina una stringa diversa.

Amazon EC2 ELB

Una volta che abbiamo aggiunto queste due istanze, passiamo alla schermata dei tags che per questo tutorial possiamo anche ignorare e confermare la schermata. A questo punto dovremmo aspettare qualche secondo e trovarci il Load Balancer attivo. Sul menu del balancer possiamo svolgere diverse operazioni e visualizzare tutte le informazioni ad esso collegate. Sia i parametri operativi che alcune statistiche di utilizzo.

ELB Setup

In questa schermata troviamo la prima sezione (description) da dove possiamo vedere il DNS Name che ci serve per testare subito il Load Balancer. Invece nei (Tabs) successivi è possibile visionare altre informazioni come le istanze assegnate, gli Health Check, le statistiche di monitoring, i security groups, le porte in ascolto e la gestione dei Tags.

Load Balancing (risultato)

Per provare la configurazione basta aprire il browser e richiedere la pagina indicata dalla stringa URL presente del DNS name del Load Balancer. Facendo qualche richiesta HTTP consecutiva ci dovrebbe apparire a pagine alterne la risposta dei due server che abbiamo inserito nella configurazione. Vi allego qui di seguito il risultato che ho ottenuto.

Amazon ELB Test

Se vogliamo eseguire delle prove più complesse basta aggiungere istanze al nostro Load Balancer e provare le richieste HTTP. Mi raccomando, finite tutte le prove, di terminare le istanze utilizzate e cancellare il Load Balancer, in maniera da non generare costi.

Auto Scaling (configurazione)

Per configurare questo servizio viene messo a disposizione dalla console un menu, in cui trovate due voci principali: la prima è chiamata configurazione di avvio e l’altra i gruppi di Auto Scaling. Nella configurazione bisognerà specificare le parti che devono essere assegnate durante l’avvio di un’istanza. Quindi la AMI, la tipologia di istanza, lo storage, il security groups, etc. Nel gruppo invece vanno inserite le opzioni di riferimento per la scalabilità, quindi il numero minimo e massimo di istanze, etc.

Auto Scaling AMI

Questa schermata rappresenta la creazione di un “launch configuration” che come potete notare è molto simile all’avvio di un’istanza. Infatti sono l’indicazione delle opzioni che devono essere usate quando il servizio di Auto Scaling avvierà delle nuove istanze. Una volta creata la configurazione possiamo creare un gruppo di scalabilità.

Indice generale degli articoli correlati

Guida completa su AWS

Questo articolo appartiene ad una serie di pubblicazioni che costituiscono una guida completa dedicata agli Amazon Web Services. Molti servizi che trattiamo in questo blog vengono anche spiegati con dei video che trovate nel nostro canale youtube. Se volete seguire questo percorso didattico iscrivetevi alla community Cloud AWS.

3 Commenti

  1. È veramente incredibile con la facilità con cui hanno sviluppato questi servizi che in ambiente classico hanno delle grandissime difficoltà. Sono veramente contento di aver scoperto i servizi AWS e penso che li utilizzerò per parecchio tempo :D

  2. Effettivamente adesso clusterizzare è proprio un gioco da ragazzi e come tutte le persone che scoprono questo ambiente sarà molto difficile tornare indietro. Solo il risparmio di tempo è incalcolabile.

condividi