Da docker-compose a aws fargate

Al giorno d’oggi, molto spesso capita di affidarsi a Docker per generare e gestire le infrastrutture delle nostre applicazioni al fine di eseguire test in un ambiente locale. Molte volte, infatti, gli sviluppatori ricorrono a docker-compose per creare l’infrastruttura contenente la loro applicazione, il loro web server e i loro database in diversi container Docker.

In questo articolo, vedremo insieme come rilasciare un’intera applicazione pensata su docker-compose all’interno dell’ambiente AWS utilizzando il servizio AWS ECS Fargate. Prima di iniziare a mettere le mani in pasta, capiamo insieme cos’è AWS ECS Fargate.

Definizioni: Amazon ECS e AWS Fargate in pillole

Amazon ECS è il servizio che permette di eseguire e gestire cluster di container Docker. È totalmente gestito da Amazon Web Services e facilmente scalabile in base al traffico.

Le configurazioni con cui è possibile utilizzare Amazon ECS sono due:

  • Istanze EC2 che contengono i container: con questa configurazione, le EC2 e la loro alta affidabilità, sono totalmente in capo all’utilizzatore del servizio.
  • Modalità Fargate: in maniera totalmente automatica, gestisce i container fornendo le giuste risorse computazionali.

Conosciamo ora i tre attori principali:

  1. Cluster: il raggruppamento logico delle risorse ECS.
  2. Servizio: la risorsa che permette di eseguire e mantenere uno specifico numero di istanze, attive, delle Task Definition.
  3. Task-Definition: un file di testo, in formato JSON, che contiene tutte le configurazioni dei tuoi container.

Ora che abbiamo capito cos’è e come funziona AWS ECS Fargate, entriamo nel vivo della soluzione.

Setup: Convertire i container Docker in Fargate Task Definition

Prima di iniziare a creare risorse all’interno dell’account AWS, dobbiamo dividere tutti i docker definiti all’interno del file docker-compose. Per farlo, è necessario tenere a mente alcune considerazioni:

Database definiti all’interno del docker-compose

Nel caso in cui siano presenti database all’interno del docker-compose, è altamente consigliato convertirli in risorse AWS a se stanti mediante l’utilizzo dei giusti servizi che Amazon stessa mette a disposizione. 

Per i database di tipo relazionale, ad esempio, ci si può servire di AWS RDS, un servizio totalmente gestito che supporta le maggiori tipologie di database relazionali quali PostgreSQL, MySQL e Oracle. 

Per i database non relazionali o dedicati al cache delle applicazioni, invece, si può considerare l’utilizzo di AWS DynamoDB o AWS ElastiCache.

Prediligi un approccio Stateless invece di Stateful

Per permettere alle applicazione di scalare in maniera automatica è necessario un approccio stateless. Questo significa che due richieste provenienti dalla stessa sessione utente, potranno essere eseguite indistintamente su differenti istanze della tua applicazione.

Ora che abbiamo chiarito tutti gli aspetti fondamentali, possiamo iniziare a creare le risorse AWS necessarie all’interno del tuo account. Di come deployare un’applicazione utilizzando AWS Fargate abbiamo parlato in questo articolo.

Per quanto riguarda AWS Fargate e come deployare un’applicazione utilizzando questo servizio, ne abbiamo già parlato in questo articolo.

Se sei alla ricerca di un tool magico che crei automaticamente tutto al posto tuo, allora sei nel posto giusto! 

Step 0: Installare la nuova ECS CLI

Recentemente AWS ha rilasciato una nuova utility da terminale per interagire con AWS ECS in grado di aiutarci a creare, modificare e monitorare cluster e task direttamente dal nostro ambiente di sviluppo locale. Per installarla occorre semplicemente eseguire i seguenti comandi all’interno del tuo terminale:

sudo curl -Lo /usr/local/bin/ecs-cli https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-darwin-amd64-latest

per scaricarla all’interno della tua cartella bin.

chmod +x /usr/local/bin/ecs-cli

per fornirle i permessi di esecuzione.
Fatto questo, eseguiamo

ecs-cli --version

per verificare che tutto sia andato nel modo giusto.

Step 1: Definizione di un Cluster

Ora che abbiamo installato la CLI, possiamo iniziare a creare il nostro Cluster ECS. Per farlo dovremo prima configurarlo utilizzando la CLI ECS e poi rilasciarlo all’interno del tuo account AWS.

Per configurare il cluster eseguiamo:

ecs-cli configure --cluster test --default-launch-type FARGATE --config-name test --region eu-west-1

Questo comando definisce un nuovo cluster chiamato “test”, che di default andrà a lanciare i nostri task in modalità “FARGATE” nella regione dell’Irlanda.

Ora, l’unica cosa che rimane da fare è rilasciarlo. In caso sul tuo account sia già presente una VPC che vuoi utilizzare con questo cluster, ti basterà specificare il VPC ID e le subnet di riferimento all’interno del comando di deploy:

ecs-cli up --cluster-config test --vpc YOUR_VPC_ID --subnets YOUR_SUBNET_ID_1, YOUR_SUBNET_ID_2

Se invece vuoi che sia la CLI ECS a creare e configurare una nuova VPC al posto tuo, puoi semplicemente eseguire:

ecs-cli up --cluster-config test

Questo comando creerà un Cluster ECS vuoto e, se non hai specificato una tua VPC, uno Stack CloudFormation con all’interno le risorse della VPC.

Un’altra cosa da creare è il security group che verrà utilizzato dal nostro servizio ECS. Possiamo crearlo direttamente con la CLI AWS utilizzando questi comandi:

aws ec2 create-security-group --description test --group-name testSecurityGroup --vpc-id YOUR_VPC_ID

aws ec2 authorize-security-group-ingress --group-id SECURITY_GROUP_ID_CREATED --protocol tcp --port 80 --cidr 0.0.0.0/0 --region eu-west-1

Questi comandi creano un security group associato alla VPC ID che hai passato in input al comando e ne autorizzano l’accesso sulla porta 80 da Internet. In output a questo comando vedrai l’id del security group generato. Prendi nota di questo id e del nome che hai specificato per crearlo, in quanto ci serviranno più avanti.

Step 2: Creazione del ruolo di esecuzione

Adesso che abbiamo il nostro cluster correttamente rilasciato e funzionante sul nostro account, dobbiamo creare un ruolo AWS IAM che verrà utilizzato dalla Task Definition. Questo ruolo contiene le policy di accesso dei nostri container alle risorse AWS. Per creare questo ruolo, creiamo prima un nuovo file chiamato “assume_role_policy.json” con questo contenuto:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Eseguiamo poi il seguente comando:

aws iam --region eu-west-1 create-role --role-name ecsTaskExecutionRole --assume-role-policy-document file://assume-role_policy.json

Una volta che il ruolo è stato creato, dobbiamo solo agganciare la policy che permetterà ai container di creare dei nuovi Log Group su AWS CloudWatch. Puoi semplicemente farlo eseguendo questo comando:

aws iam --region eu-west-1 attach-role-policy --role-name ecsTaskExecutionRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy

Step 3: Docker-Compose File e File di configurazione Ecs

Il prossimo step è quello di modificare il nostro docker-compose file con alcune configurazioni AWS. Ricordati che, al momento della scrittura di questo articolo, le uniche versioni di docker-compose supportate sono la 1, 2 e la 3.
Supponiamo di avere un docker-compose come questo:

version: '3'
services:
  web:
    image: nginx 
    ports:
      - "80:80"

Come puoi vedere, definisce semplicemente un servizio web NGINX, ed espone il tutto sulla porta 80. Quello che dobbiamo fare adesso è aggiungere le configurazioni per i logs come da best practices AWS. Queste configurazioni permetteranno ad AWS di gestire i log mediante il servizio AWS CloudWatch.

version: '3'
services:
  web:
    image: nginx 
    ports:
      - "80:80"
    logging:
      driver: awslogs
      options: 
        awslogs-group: tutorial
        awslogs-region: eu-west-1
        awslogs-stream-prefix: web

Le configurazioni per il log contengono:
la proprietà driver che deve essere settata con “awslogs”, la quale dice ad ECS di utilizzare il servizio CloudWatch per salvare i log del container.
La sezione options che definisce il nome del log group che verrà creato automaticamente su CloudWatch, la regione AWS e il prefisso per lo stream di log.

Adesso che abbiamo modificato il docker-compose, non ci resta che creare un nuovo file, “ecs-params.yml”, contenente tutte le configurazioni del nostro ECS Cluster e del nostro servizio ECS. In questo file potremo specificare:
Tutte le configurazioni di networking come la vpc dove eseguire il servizio e le relative subnets.
Il ruolo di esecuzione del nostro container, dove utilizzeremo il ruolo definito nel secondo step.
Tutte le configurazioni per il nostro container, come CPU e RAM del container.

Per il nostro esempio, definiremo un file contenente le configurazioni di base:

version: 1
task_definition:
  task_execution_role: YOUR_ECS_TASK_EXECUTION_ROLE_NAME
  ecs_network_mode: awsvpc
  task_size:
    mem_limit: 0.5GB
    cpu_limit: 256
run_params:
  network_configuration:
    awsvpc_configuration:
      subnets:
        - "YOUR SUBNET ID 1"
        - "YOUR SUBNET ID 2"
      security_groups:
        - "YOUR SECURITY GROUP ID"
      assign_public_ip: ENABLED

Nel campo “task_execution_role”, andremo a inserire il nome del ruolo definito nel secondo step.

Nel campo “subnets” e nel campo “security_groups”, invece, inseriremo gli ID delle subnet pubbliche e l’id del security group definiti nel primo step.

Step 4: Deploy del docker-compose

Ci siamo! È il momento di rilasciare la nostra soluzione sull’account AWS:

ecs-cli compose --project-name test service up --create-log-groups --cluster-config test

Verifichiamo lo stato del servizio eseguendo il comando qui sottro e il gioco è fatto!

ecs-cli compose --project-name test service ps --cluster-config test

E anche per oggi è tutto. In questo articolo abbiamo visto insieme come rilasciare un’applicazione che fa uso di docker-compose all’interno dell’ambiente AWS, con un focus sulla nuova ECS CLI messa a disposizione da Amazon.

Non so niente

.. Socrate diceva non so niente, proprio perché se non so niente problematizzo tutto. La filosofia nasce dalla problematizzazione dell’ovvio: non accettiamo quello che c’è, perché se lo facciamo, ce lo ricorda ancora Platone, diventeremo gregge, pecore. La filosofia nasce come istanza critica, non accettazione dell’ovvio, non rassegnazione a quello che oggi va di moda chiamare sano realismo. Mi rendo conto che realisticamente uno che si iscrive a filosofia compie un gesto folle, però forse se non ci sono questi folli il mondo resta così com’è… Allora la filosofia svolge un ruolo decisamente importante, non perché sia competente di qualcosa, ma semplicemente perché non accetta qualcosa, e questa non accettazione di ciò che c’è non la esprime attraverso revolverate o rivoluzioni, l’esprime attraverso un tentativo di trovare le contraddizioni del presente e dell’esistente, e argomentare possibilità di soluzioni: in pratica, pensare. E il giorno in cui noi abdichiamo al pensiero abbiamo abdicato a tutto.

Umberto Galimberti
Percorsi di emancipazione, democrazia ed etica

Salutini

Sto per andare via da voi miei piccolini e mi avete spezzato il cuoricino così tanto che ho bisogno di scrivere, la mia valvola di sfogo.
Sono questi i momenti in cui vorrei ci fosse un regista, un regista della mia vita capace d’immortalare il momento che spero rimanga sempre impresso nella mia testa

I vostri faccini pieni di lacrime che m’implorano di rimanere, i vostri abbracci, Simone, il più fisico, che con la manina cerca la mia barba, struscia la manina, ci gioca, cerca un contatto, mi bacia facendomi sentire le sue guanciotte lacrimose umide .
Mi tenete li, sul divano e non volete che mi alzi, ogni secondo un’ora.
E’ li che capisci che il tempo è relativo, il vero senso della frase “Un giorno, tre autunni”.
Sento e posso toccare l’amore vero, quello che sai è per sempre.

Come si fa a spiegare, come?

Come si fa a spiegare.

“Mi mancherai” mi hai detto Simone, con quella sua vocina meravigliosa che il tempo ti cambierà a favore di una voce sempre più matura ma sempre più lontana da me. Si cresce.

Vorrei che alcune cose rimanessero congelate nel tempo, vorrei che voi rimaneste sempre così ma non si può ed in fondo è bello così, ci godiamo un momento che rimarrà una perla nel nostro cuore e per mano continuiamo a crescere.

Ora che avete chiuso la porta e siete andati, tocca piangere a me.

Sempre insieme.

Due

Dicono che durante la nostra vita abbiamo due grandi amori. Uno con il quale ti sposerai o vivrai per sempre, può essere il padre o la madre dei tuoi figli: con questa persona otterrai la massima comprensione per stare il resto della tua vita insieme.E dicono che c’è un secondo grande amore, una persona che perderai per sempre. Qualcuno con cui sei nato collegato, così collegato, che le forze della chimica scappano dalla ragione e ti impediranno sempre di raggiungere un finale felice. Fino a che un giorno smetterai di provarci, ti arrenderai e cercherai un’altra persona che finirai per incontrare. Però ti assicuro che non passerà una sola notte senza aver bisogno di un altro suo bacio, o anche di discutere una volta in più. Tutti sanno di chi sto parlando, perché mentre stai leggendo queste righe, il suo nome ti è venuto in mente. Ti libererai di lui o di lei e smetterai di soffrire, finirai per incontrare la pace, però ti assicuro che non passerà un giorno in cui non desidererai che sia qui per disturbarti. Perché a volte si libera più energia discutendo con chi ami, che facendo l’amore con qualcuno che apprezzi.
(Paulo Coelho)

La felicità …

Crescendo impari che la felicità non e’ quella delle grandi cose. Non e’ quella che si insegue a vent’anni, quando, come gladiatori si combatte il mondo per uscirne vittoriosi.
La felicità non e’ quella che affannosamente si insegue credendo che l’amore sia tutto o niente; non e’ quella delle emozioni forti che fanno il “botto” e che esplodono fuori con tuoni spettacolari.
La felicità non e’ quella di grattacieli da scalare, di sfide da vincere mettendosi continuamente alla prova.
Crescendo impari che la felicità e’ fatta di cose piccole ma preziose.
E impari che il profumo del caffe’ al mattino e’ un piccolo rituale di felicità, che bastano le note di una canzone, le sensazioni di un libro dai colori che scaldano il cuore, che bastano gli aromi di una cucina, la poesia dei pittori della felicità, che basta il muso del tuo gatto o del tuo cane per sentire una felicità lieve. E impari che la felicità e’ fatta di emozioni in punta di piedi, di piccole esplosioni che in sordina allargano il cuore, che le stelle ti possono commuovere e il sole far brillare gli occhi, e impari che un campo di girasoli sa illuminarti il volto, che il profumo della primavera ti sveglia dall’inverno, e che sederti a leggere all’ombra di un albero rilassa e libera i pensieri.
E impari che l’amore e’ fatto di sensazioni delicate, di piccole scintille allo stomaco, di presenze vicine anche se lontane, e impari che il tempo si dilata e che quei 5 minuti sono preziosi e lunghi più di tante ore, e impari che basta chiudere gli occhi, accendere i sensi, sfornellare in cucina, leggere una poesia, scrivere su un libro o guardare una foto per annullare il tempo e le distanze ed essere con chi ami.
E impari che sentire una voce al telefono, ricevere un messaggio inaspettato, sono piccoli attimi felici.
E impari ad avere, nel cassetto e nel cuore, sogni piccoli ma preziosi.
E impari che tenere in braccio un bimbo e’ una deliziosa felicità.
E impari che i regali più grandi sono quelli che parlano delle persone che ami.
E impari che c’e’ felicità anche in quella urgenza di scrivere su un foglio i tuoi pensieri, che c’e’ qualcosa di amaramente felice anche nella malinconia.
E impari che nonostante le tue difese, nonostante il tuo volere o il tuo destino, in ogni gabbiano che vola c’e’ nel cuore un piccolo-grande Jonathan Livingston.
E impari quanto sia bella e grandiosa la semplicità.

 

Perché Simone ?

Coloro che riescono meglio nella vita, spesso non sono i più capaci (a meno di avere delle doti naturali fuori dal comune, cosa che non mi ispira più di tanto) quanto piuttosto i più determinati.

E’ sopratutto la determinazione a permettere il raggiungimento di un risultato desiderato, motivo per il quale ammiro tantissimo, ancora di più chi parte da una situazione sfavorevole e raggiunge risultati inimmaginabili solo perchè ci ha creduto, ha combattuto per un sogno, non lo ha mai perso di vista anche nelle difficoltà.

Intorno al concetto di motivazione esiste molto disorientamento, sopratutto oggi. Vedo tanti ragazzi che hanno gettato la spugna ancora prima di cominciare, non vedo il fuoco nei loro occhi, non vedo il famoso occhio della tigre, credo perchè la nostra cultura ha smarrito il senso dell’impegno e delle volontà individuali, siamo portati a pensare la motivazione come qualcosa che dipende esclusivamente dalle condizioni esterne. Ci motivano sempre gli altri o le situazioni fuori da noi. Alibi.

La differenza  sta nella capacità di mantenere il “sogno” e farlo durare a lungo nonostante ostacoli, difficoltà e problemi. La capacità di perseverare, di fare durare a lungo la motivazione, viene definita RESILIENZA, ma è l’unica spinta nella quale credo per raggiungere il risultato.

La resilienza non è un dono magico o sovranaturale: è una capacità cognitiva, cioè legata al modo con cui elaboriamo le informazioni e ci rapportiamo con la realtà. Può essere allenata ed accresciuta da tutti, in qualsiasi momento della vita. Ma richiede impegno e disciplina.

Faccio analogie con lo sport perchè è forse l’unica disciplina che ti mette alla prova subito e senze troppa dolcezza, vinci o perdi.

Rocky, il mio personaggio preferito, è un uomo che ha fatto della resilenza la sua arma migliore perchè senza quella sarebbe stato un uomo normale, non era sicuramente naturalmente dotato per essere un campione di boxe.
20090901191813!Rocky1
Ci sono delle frasi, passaggi indelebili nella mia testa :
“Nessuno può colpire duro come fa la vita, perciò andando avanti non è importante come colpisci, l’importante è come sai resistere ai colpi, come incassi e se finisci al tappeto hai la forza di rialzarti. Così sei un vincente!”
Vorrei poter trasmettere questo concetto a mio figlio.
Certo Rocky è un personaggio inventato ma io ne conosco uno reale, una persona che ci è riuscito, un caro amico di infanzia, una persona con la quale ho avuto l’onore di giocare e condividere una passione da piccolo : Simone Di Tommaso
.
u16
.
Nonostante non sia alto : 1.73 ci ha sempre messo il cuore, ci ha sempre creduto e ci è riuscito, ha coronato un sogno per il quale chissà quante volte è stato preso in giro, chissà quante volte è stato osservato dalla squdra avversaria sotto rete pensando ad un muro “facile” e chissà quante volte sono stati stampati 🙂
Simone di Tommaso ha giocato in a2 ed uno dei giocatori più forti della B1 maschile.
Molto probabilmente giocherà ancora in a2.
Cosa gli ha permesso di raggiungere questo grande obiettivo ? La resilenza. La motivazione.
Io non ci ho mai creduto, ho sempre pensato che la mia altezza mi avrebbe precluso qualiasi strada pallavolistica, infatti ho fallito.
.
Rivivo in Simone il sogno che non sono mai riuscito ed un’attegiamento che ho imparato troppo tardi e che vorrei donare a mio figlio regalandogli il nome Simone !
 .
Forza Simone, non avere paura di fallire, non si può sempre vincere, ma non si deve avere paura di prendere decisioni e di tentare sempre. Devi sempre credere che qualcosa di eccezionale possa accadere se crederai sempre in te stesso.
.
Cerca di capire prima quello che io ho capito solo dopo.
.
.

Quanto è bello l’Ipad !

Stamattina, passando in edicola per prendere il settimanale ATM, sono rimasto a bocca aperta davanti a una pila di iPad nuovi di zecca, e dato che costavano poco mi sono detto: perchè no? E quindi dopo un road test di mezz’ora sui mezzi pubblici, ecco le mie prime impressioni.

I pro. E’ leggerissimo! E cosa ancora più incredibile, alla Apple hanno fatto il miracolo: si piega senza rovinarsi. Lo schermo poi è nitido e con un contrasto fantastico: i caratteri sono davvero neri, la pagina bianca, e in condizioni di luminosità normale non affatica assolutamente gli occhi. Ma la cosa più incredibile è il multi touch, per chi non l’avesse mai sperimentato funziona così: si piegano indice e pollice fino a farli quasi toccare, li si porta sull’angolo dell’iPad, lo si afferra, e si fa un movimento diagonale. A quel punto, parte un’animazione (fatta così bene che sembra davvero di spostare un oggetto fisico), e l’iPad cambia pagina. Fantastico! C’è anche una modalità per chi odia far sbirciare i vicini in metropolitana, che permette di piegare il device fino a oscurare completamente i contenuti. Devo dire che le hanno pensate davvero tutte! Il collegamento dati poi ha funzionato a meraviglia, anche in galleria: sono riuscito a leggere senza interruzioni per una ventina di minuti.

I contro. Mi aspettavo qualche animazione alla Harry Potter, ma le fotografie sono tutte statiche: poco male, tanto trovo i video assolutamente noiosi e non li guardo nemmeno sul PC e tantomeno in televisione, e in movimento poi mi avrebbero probabilmente fatto venire il mal di mare. Il suo vero problema però è che costa troppo poco: in metropolitana ce l’avevano quasi tutti. Peccato, speravo di fare un figurone, ma nessuno mi ha degnato neanche di un’occhiata di invidia o curiosità. Anzi, ho visto addirittura un modello più compatto, che sembra offrire contenuti gratuiti. Sarà vero?

Concludo con una foto, per farvi apprezzare il design rivoluzionario di questo splendido oggetto.

Registro di bordo

Riparto da questa prima news, con la consapevolezza di aver perso tutti i miei post precedenti, ma sopratutto di riutilizzare questo mio blog come appunti personali di viaggio nel mio lavoro !

Come un vecchio capitano riapro il mio dì registro di viaggio!