Una delle cose che mi affascina di Laravel (e che nel tempo mi ha fatto continuare ad usarlo per una marea di progetti) è il suo ecosistema.
Un paio di settimane fa ho mandato in review la mia prima app Shopify, creata con React per il frontend e, ovviamente, Laravel per il backend. Prossimamente ne parlerò meglio.
Grazie a Forge, nell’arco di circa due ore di lavoro ho messo su un server di stage ed uno di produzione, automaticamente collegati al push sui rispettivi branch su Github.
Grazie ad Horizon, nel giro di pochi minuti mi sono ritrovato con un’ottima interfaccia per monitorare l’esecuzione dei vari job.
Inutile dire che quando ho sentito parlare di Laravel Vapor durante l’ultimo Laracon (al quale non sono mai andato e forse è il caso di porre rimedio alla cosa…) la curiosità è schizzata subito alle stelle.
Quindi… cerchiamo un attimo di capire di cosa si tratta!
Volendo dare una definizione “precisa”, Laravel Vapor è una piattaforma dedicata al deploy di applicazioni Laravel su AWS Lambda. Avete presente “serverless”, quella parolina che ultimamente va un sacco in giro?
Ecco, se non avete idea di cosa si tratta, l’articolo che ho trovato qui su divinglaravel.com lo spiega molto bene.
Immaginate di avere la vostra piccola e simpatica app su una droplet in DigitalOcean. Pagate ogni mese i vostri 5€ e via, nessuno la tocca. Io stesso, usando Forge, ne faccio largo uso per i miei progetti. L’app è sul server, quando arriva una richiesta viene chiamato index.php e da lì parte la magia che conosciamo bene.
Ecco: quando eseguiamo del codice su Lambda possiamo scordarci tutto quello che abbiamo visto finora.
Come il nome stesso suggerisce, quando parliamo di serverless non c’è più nessun server su cui il nostro codice gira. Non c’è, quindi, nessun server da creare, configurare e gestire. Con AWS Lambda tutto quello che facciamo è caricare il codice della nostra applicazione seguendo una specifica procedura e, ogni volta che sarà necessario, verrà eseguito in un ambiente gestito e già preparato da AWS.
Detto questo, eseguire del codice PHP su Lambda non è esattamente una passeggiata (PHP non è tra i linguaggi supportati di base, anche se c’è il modo per farlo girare ugualmente), figuriamoci del codice di un’app scritta con un framework specifico! In pieno stile Taylor Otwell, quindi, ecco che arriva Vapor in nostro soccorso.
Nello specifico, Laravel Vapor prende la nostra applicazione e la “converte” in una singola Lambda, in modo tale da poter essere caricata su AWS ed eseguita senza troppi problemi.
Come se non fosse già abbastanza, la cosa ancora più interessante (che mi intriga molto) è che Vapor configura autonomamente:
- routing dell’applicazione (usando l’API Gateway di AWS o i load balancer);
- tutto quello che riguarda le code (agganciandosi ad SQS, servizio per le code di AWS);
- l’esecuzione di comandi schedulati (se prima venivano eseguiti tramite la configurazione di crontab, ora viene usato CloudWatch per lanciare la lambda giusta al momento giusto);
Tra i commenti del video di presentazione, qualcuno ha ironicamente osservato “It almost seems like Vapor is just “AWS new GUI for PHP apps” :)”. Che non è un’osservazione del tutto sbagliata ma rischia di far passare in secondo piano la vera comodità del tool.
Poter mandare in produzione un’app Laravel in questo modo ci permette, da una parte, di continuare ad usare il framework che preferiamo. Dall’altra, ci permette di liberarci di tutta una serie di problemi e task aggiuntivi, rimanendo focalizzati sul codice.
A proposito, nel caso in cui vogliate vedere il talk completo della presentazione… lo potete trovare qui: