SlideShare a Scribd company logo
1 of 36
Download to read offline
Deploy di Laravel su AWS Lambda
from Zero to
Francesco Liuzzi Verona, 17 Novembre 2022
● Francesco Liuzzi
● 28 anni
● Locorotondo (BA)
Chi sono?
My way
Zuora
Dev/Cons
● Billing automation
● Payment
● Integration
Back-end
Dev
● Magento
● Laravel
● CakePHP
● E-commerce
platform
Chief
Architect
● AWS Serverless
Solutions Architect
● E-commerce Solutions
Architect
Nov 2017 2018 Aug 2021
Salesforce
Dev/Cons
● CRM
● Marketing
Automation
2020
Il mio primo
Laravel Day
The Company
MarTech Consulting
~150 persone felici
Silver Sponsor di Laravel Day 2022
Oggi
parliamo di
Case study
Web portal
Subscription Management
Case study Architecture
Web portal
Subscription Management
● Lambda
● API Gateway
● Bucket S3
● Cloudfront
● RDS
I servizi AWS
Lambda: è un servizio di calcolo basato su eventi
serverless che ti permette di eseguire codice senza
effettuare il provisioning o gestire server.
API Gateway: è un servizio completamente gestito che
semplifica la creazione, la pubblicazione, la
manutenzione, il monitoraggio e la protezione delle API.
I servizi AWS
S3: Simple Storage Service è un servizio di
archiviazione di oggetti che offre scalabilità, disponibilità
dei dati, sicurezza e prestazioni all'avanguardia.
Cloudfront: è la rete di distribuzione di contenuti (CDN)
di AWS. Essa, grazie ad una rete di edge locations,
consente di distribuire asset statici in modo efficace e
proxare contenuti dinamici facendo tendere a zero
latenza di rete.
I servizi AWS
RDS: Amazon Relational Database Service è una raccolta
di servizi gestiti che rende semplice impostare, operare e
scalare i database nel cloud.
Supporta i principali engine (open e non) ed ha una
propria implementazione (Aurora) compatibile con Mysql
e Postgres che può essere utilizzata in modalità
serverless.
DynamoDB: è un servizio serverless di AWS che eroga
un database di tipo key-object a bassa latenza. Utilizzi
tipici sono come dispositivo per salvare dati non
strutturati, fare caching…
Let’s code!
Al fine di creare la prima applicazione serverless, sono necessari alcuni step
preliminari di configurazione:
1. Creare un account AWS
2. Creare un utente IAM con ruolo Administrator che useremo per
l’accesso programmatico via CLI.
Setup AWS 1/2
3. Copiare Access Key ID e Secret Key
4. Installare la CLI AWS
5. Da terminale, digitare il comando in blu ed a seguire le credenziali copiate
6. Per verificare la corretta configurazione, digitare della cli
Setup AWS 2/2
Setup Serverless
Una volta configurata la CLI di AWS con le giuste credenziali, installiamo la
CLI del framework serverless:
0. Pre-requisito: node e npm installati
1. Installa serverless con il comando $ npm install -g serverless
2. Verifica che sia installato correttamente con
Sls - Primo progetto
Sls - Primo deploy
Per utilizzare Serverless con il runtime PHP (e far girare quindi un applicativo
Laravel) utilizzeremo il package bref.sh
Bref.sh è un package composer che consente di utilizzare PHP come runtime
custom per le funzioni AWS lambda. Bref.sh è idoneo per molteplici casi d’uso:
● Creazione di APIs
● Workers
● Processi in batch
● Hosting di siti web dinamici
Vediamo ora come utilizzarlo su un progetto Laravel:
1. Installiamo il package principale e il bridge per laravel
$ composer require bref/bref bref/laravel-bridge --update-with-dependencies
2. Pubblichiamo il serverless.yml
$ php artisan vendor:publish --tag=serverless-config
E per PHP? (⅓ install)
Apportiamo qualche piccola modifica
al file serverless.yml
Cambio nome al
servizio
Aggiungo il profile
AWS da utilizzare
Aggiungo le variabili d’ambiente
Rimuovo il file .env
dal package di deploy
E per PHP? (⅔ setup)
Infine, possiamo già effettuare il primo deploy.
1. Per evitare che la cache generata in locale venga deployata nella
lambda cancelliamo la configurazione cachata
$ php artisan config:clear
2. $ sls deploy
L’output è di facile interpretazione:
URL pubblicamente
raggiungibile
E per PHP? (3⁄3 deploy)
Spesso è indispensabile l’utilizzo della CLI per invocare comandi di artisan,
oppure per invocare comandi custom che noi stessi abbiamo realizzato.
Riprendendo l’output del deploy precedente
Usiamo la sintassi
$ vendor/bin/bref cli <function-name> -- <command>
Nel nostro caso useremo ad esempio:
$ vendor/bin/bref cli laravelday-2022-sls-demo-dev-artisan -- migrate:fresh --force
I’m an artisan!
Il package bref/laravel-bridge registra il BrefServiceProvider che:
● Configura ”stderr” come log driver di default al fine di inviare i log a
CloudWatch (i log generati dal runtime lambda finiscono qui)
● Configura “cookie” come session driver di default
○ Se state implementando un’API stateless e non avete bisogno
della sessione potete settare SESSION_DRIVER=array come
variabile d’ambiente
○ È possibile utilizzare anche altri driver come database o redis
● Usa come directory di cache la cartella /tmp (nel contesto di
esecuzione della lambda, tutto il filesystem è read-only ad
eccezione della cartella /tmp)
Why laravel-bridge?
Alessandro P.
Ok, fantastico… Ma in un’applicazione reale io ho
bisogno di gestire anche caching, code, file storage…
Come faccio con serverless?
Serverless lift
Serverless lift
È un plugin di serverless che facendo leva sulla CDK di AWS espande le
funzionalità del framework.
Si installa come un plugin di serverless, ovvero lanciando nella cartella
di progetto il comando:
$ serverless plugin install -n serverless-lift
Una volta installato, si possono utilizzare i costrutti di Lift nel file
serverless.yml.
In particolare approfondiremo:
● Server-side website (per hostare tramite AWS S3 il front-end della
nostra web app)
● DynamoDB Table (che useremo come dispositivo di caching)
● Queue (Useremo il servizio AWS SQS per gestire in modo semplice
comportamenti il dispatch ed il work di job)
Al fine di servire anche le componenti statiche della nostra web app, aggiungiamo sul file serverless.yml
il seguente snippet e rieseguiamo il deploy con $ serverless deploy
Serverless lift - Server-side website ½
Dopo il deploy (sono necessari diversi minuti), l’output è il seguente:
Abbiamo quindi effettuato il deploy di una distribuzione di cloudfront, ottenendo un URL del tipo
https:/
/<variable-part>.cloudfront.net
In questa doc possiamo vedere come usare il nostro dominio invece di quello di cloudfront.
Serverless lift - Server-side website 2/2
DynamoDB è un servizio gestito di AWS che consente di fruire facilmente di un DB key-object.
Utilizzeremo tale servizio come dispositivo di caching.
Aggiungiamo sul file serverless.yml i seguenti snippet
Serverless - DynamoDB Table 1/2
Modifichiamo quindi il file config/cache.php come segue:
Effettuiamo infine il deploy (ricordandoci di svuotare la cache).
Siamo ora in grado di utilizzare la cache senza problemi.
Serverless - DynamoDB Table 2/2
'dynamodb' => [
'driver' => 'dynamodb',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'token' => env('AWS_SESSION_TOKEN'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'table' => env('DYNAMODB_CACHE_TABLE'),
'endpoint' => env('DYNAMODB_ENDPOINT'),
'attributes' => [
'key' => 'id',
'expiration' => 'ttl',
],
],
Simple Queue Service (SQS) è un servizio gestito di AWS che consente di configurare facilmente una
coda con il relativo worker.
A tal fine eseguiamo il seguente comando per pubblicare il worker
$ php artisan vendor:publish --tag=serverless-worker
Aggiungiamo poi sul file serverless.yml gli snippet di fianco.
Bisogna inoltre modificare il file config/queue.php come segue:
Effettuiamo infine il deploy (ricordandoci di svuotare la cache).
Siamo ora in grado di utilizzare il dispatch dei job senza problemi.
Serverless lift - Queues
provider:
...
environment:
...
QUEUE_CONNECTION: sqs
SQS_QUEUE: ${construct:jobs.queueUrl}
functions:
...
constructs:
jobs:
type: queue
worker:
handler: worker.php
layers:
- ${bref:layer.php-81}
'sqs' => [
'driver' => 'sqs',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
+ 'token' => env('AWS_SESSION_TOKEN'),
...
Ricapitolando…
Oggi abbiamo:
● Esplorato il framework Serverless ed il package Bref.sh
● Effettuato il deploy di una web app Laravel in una AWS Lambda
● Aggiunto alla nostra web app grazie a Serverless Lift:
○ l’hosting delle componenti statiche con AWS S3 e Cloudfront
(via server-side website)
○ Un dispositivo di caching tramite AWS DynamoDB
○ Un gestore di code tramite AWS SQS
CREDITS: This presentation template was
created by Slidesgo, including icons by Flaticon,
infographics & images by Freepik
Thanks
Domande? Feedback?
https:/
/joind.in/talk/88a1b
Please keep this slide for attribution
Approfondimento:
Come funziona serverless
Per approfondire cosa c’è “sotto il cofano” di serverless (e di bref.sh) vi
rimando ad uno speech di Gianfranco Castro al Laravel Day 2018.

More Related Content

Similar to [Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf

High specialized vm on open stack cloud
High specialized vm on open stack cloudHigh specialized vm on open stack cloud
High specialized vm on open stack cloudGabriele Baldoni
 
Applicazioni Serverless con AWS
Applicazioni Serverless con AWSApplicazioni Serverless con AWS
Applicazioni Serverless con AWSsparkfabrik
 
IaC - Infrastructure as Code, gestire infrastrutture cloud tramite file di co...
IaC - Infrastructure as Code, gestire infrastrutture cloud tramite file di co...IaC - Infrastructure as Code, gestire infrastrutture cloud tramite file di co...
IaC - Infrastructure as Code, gestire infrastrutture cloud tramite file di co...Daniele Mondello
 
Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...
Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...
Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...Codemotion
 
Alla ricerca della ricerca - JeffConf Milan 2017
Alla ricerca della ricerca - JeffConf Milan 2017Alla ricerca della ricerca - JeffConf Milan 2017
Alla ricerca della ricerca - JeffConf Milan 2017Bagubits
 
Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...
Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...
Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...Aruba S.p.A.
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingFrancesca1980
 
Infrastructure as Code e metodologia DevOps
Infrastructure as Code e metodologia DevOpsInfrastructure as Code e metodologia DevOps
Infrastructure as Code e metodologia DevOpsPietro Ciotola
 
Automatic Cloud Deployment: un caso di studio basato sul software OwnCloud
Automatic Cloud Deployment: un caso di studio basato sul software OwnCloudAutomatic Cloud Deployment: un caso di studio basato sul software OwnCloud
Automatic Cloud Deployment: un caso di studio basato sul software OwnCloudSonia Pepe
 
Con Aruba, a lezione di cloud #lezione 30 - parte 1: 'GitLab e Cloud Server ...
Con Aruba, a lezione di cloud  #lezione 30 - parte 1: 'GitLab e Cloud Server ...Con Aruba, a lezione di cloud  #lezione 30 - parte 1: 'GitLab e Cloud Server ...
Con Aruba, a lezione di cloud #lezione 30 - parte 1: 'GitLab e Cloud Server ...Aruba S.p.A.
 
Con Aruba, a lezione di cloud #lezione 19 - parte 1: 'Template Cloud Computi...
Con Aruba, a lezione di cloud  #lezione 19 - parte 1: 'Template Cloud Computi...Con Aruba, a lezione di cloud  #lezione 19 - parte 1: 'Template Cloud Computi...
Con Aruba, a lezione di cloud #lezione 19 - parte 1: 'Template Cloud Computi...Aruba S.p.A.
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroAndrea Dottor
 
Aruba Cloud: 5 minuti sul VisualCloud #Arubait5
Aruba Cloud: 5 minuti sul VisualCloud #Arubait5Aruba Cloud: 5 minuti sul VisualCloud #Arubait5
Aruba Cloud: 5 minuti sul VisualCloud #Arubait5Aruba S.p.A.
 
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1Alfonso Martino
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioPar-Tec S.p.A.
 
Doaw2020 - Dalla produzione alla QA, provisioning su SQL Server
Doaw2020 - Dalla produzione alla QA, provisioning su SQL ServerDoaw2020 - Dalla produzione alla QA, provisioning su SQL Server
Doaw2020 - Dalla produzione alla QA, provisioning su SQL ServerAlessandro Alpi
 

Similar to [Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf (20)

High specialized vm on open stack cloud
High specialized vm on open stack cloudHigh specialized vm on open stack cloud
High specialized vm on open stack cloud
 
Applicazioni Serverless con AWS
Applicazioni Serverless con AWSApplicazioni Serverless con AWS
Applicazioni Serverless con AWS
 
IaC - Infrastructure as Code, gestire infrastrutture cloud tramite file di co...
IaC - Infrastructure as Code, gestire infrastrutture cloud tramite file di co...IaC - Infrastructure as Code, gestire infrastrutture cloud tramite file di co...
IaC - Infrastructure as Code, gestire infrastrutture cloud tramite file di co...
 
Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...
Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...
Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...
 
Alla ricerca della ricerca - JeffConf Milan 2017
Alla ricerca della ricerca - JeffConf Milan 2017Alla ricerca della ricerca - JeffConf Milan 2017
Alla ricerca della ricerca - JeffConf Milan 2017
 
Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...
Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...
Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computing
 
Infrastructure as Code e metodologia DevOps
Infrastructure as Code e metodologia DevOpsInfrastructure as Code e metodologia DevOps
Infrastructure as Code e metodologia DevOps
 
Automatic Cloud Deployment: un caso di studio basato sul software OwnCloud
Automatic Cloud Deployment: un caso di studio basato sul software OwnCloudAutomatic Cloud Deployment: un caso di studio basato sul software OwnCloud
Automatic Cloud Deployment: un caso di studio basato sul software OwnCloud
 
Con Aruba, a lezione di cloud #lezione 30 - parte 1: 'GitLab e Cloud Server ...
Con Aruba, a lezione di cloud  #lezione 30 - parte 1: 'GitLab e Cloud Server ...Con Aruba, a lezione di cloud  #lezione 30 - parte 1: 'GitLab e Cloud Server ...
Con Aruba, a lezione di cloud #lezione 30 - parte 1: 'GitLab e Cloud Server ...
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
Con Aruba, a lezione di cloud #lezione 19 - parte 1: 'Template Cloud Computi...
Con Aruba, a lezione di cloud  #lezione 19 - parte 1: 'Template Cloud Computi...Con Aruba, a lezione di cloud  #lezione 19 - parte 1: 'Template Cloud Computi...
Con Aruba, a lezione di cloud #lezione 19 - parte 1: 'Template Cloud Computi...
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuro
 
ASP.NET Core essentials
ASP.NET Core essentialsASP.NET Core essentials
ASP.NET Core essentials
 
Aruba Cloud: 5 minuti sul VisualCloud #Arubait5
Aruba Cloud: 5 minuti sul VisualCloud #Arubait5Aruba Cloud: 5 minuti sul VisualCloud #Arubait5
Aruba Cloud: 5 minuti sul VisualCloud #Arubait5
 
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
 
Silex, iniziamo
Silex, iniziamoSilex, iniziamo
Silex, iniziamo
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studio
 
Infrastructure as Data
Infrastructure as DataInfrastructure as Data
Infrastructure as Data
 
Doaw2020 - Dalla produzione alla QA, provisioning su SQL Server
Doaw2020 - Dalla produzione alla QA, provisioning su SQL ServerDoaw2020 - Dalla produzione alla QA, provisioning su SQL Server
Doaw2020 - Dalla produzione alla QA, provisioning su SQL Server
 

Recently uploaded

Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 

Recently uploaded (9)

Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 

[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf

  • 1. Deploy di Laravel su AWS Lambda from Zero to Francesco Liuzzi Verona, 17 Novembre 2022
  • 2. ● Francesco Liuzzi ● 28 anni ● Locorotondo (BA) Chi sono?
  • 3. My way Zuora Dev/Cons ● Billing automation ● Payment ● Integration Back-end Dev ● Magento ● Laravel ● CakePHP ● E-commerce platform Chief Architect ● AWS Serverless Solutions Architect ● E-commerce Solutions Architect Nov 2017 2018 Aug 2021 Salesforce Dev/Cons ● CRM ● Marketing Automation 2020 Il mio primo Laravel Day
  • 4. The Company MarTech Consulting ~150 persone felici Silver Sponsor di Laravel Day 2022
  • 6.
  • 7.
  • 8.
  • 9.
  • 11. Case study Architecture Web portal Subscription Management ● Lambda ● API Gateway ● Bucket S3 ● Cloudfront ● RDS
  • 12. I servizi AWS Lambda: è un servizio di calcolo basato su eventi serverless che ti permette di eseguire codice senza effettuare il provisioning o gestire server. API Gateway: è un servizio completamente gestito che semplifica la creazione, la pubblicazione, la manutenzione, il monitoraggio e la protezione delle API.
  • 13. I servizi AWS S3: Simple Storage Service è un servizio di archiviazione di oggetti che offre scalabilità, disponibilità dei dati, sicurezza e prestazioni all'avanguardia. Cloudfront: è la rete di distribuzione di contenuti (CDN) di AWS. Essa, grazie ad una rete di edge locations, consente di distribuire asset statici in modo efficace e proxare contenuti dinamici facendo tendere a zero latenza di rete.
  • 14. I servizi AWS RDS: Amazon Relational Database Service è una raccolta di servizi gestiti che rende semplice impostare, operare e scalare i database nel cloud. Supporta i principali engine (open e non) ed ha una propria implementazione (Aurora) compatibile con Mysql e Postgres che può essere utilizzata in modalità serverless. DynamoDB: è un servizio serverless di AWS che eroga un database di tipo key-object a bassa latenza. Utilizzi tipici sono come dispositivo per salvare dati non strutturati, fare caching…
  • 16. Al fine di creare la prima applicazione serverless, sono necessari alcuni step preliminari di configurazione: 1. Creare un account AWS 2. Creare un utente IAM con ruolo Administrator che useremo per l’accesso programmatico via CLI. Setup AWS 1/2
  • 17. 3. Copiare Access Key ID e Secret Key 4. Installare la CLI AWS 5. Da terminale, digitare il comando in blu ed a seguire le credenziali copiate 6. Per verificare la corretta configurazione, digitare della cli Setup AWS 2/2
  • 18. Setup Serverless Una volta configurata la CLI di AWS con le giuste credenziali, installiamo la CLI del framework serverless: 0. Pre-requisito: node e npm installati 1. Installa serverless con il comando $ npm install -g serverless 2. Verifica che sia installato correttamente con
  • 19. Sls - Primo progetto
  • 20. Sls - Primo deploy
  • 21. Per utilizzare Serverless con il runtime PHP (e far girare quindi un applicativo Laravel) utilizzeremo il package bref.sh Bref.sh è un package composer che consente di utilizzare PHP come runtime custom per le funzioni AWS lambda. Bref.sh è idoneo per molteplici casi d’uso: ● Creazione di APIs ● Workers ● Processi in batch ● Hosting di siti web dinamici Vediamo ora come utilizzarlo su un progetto Laravel: 1. Installiamo il package principale e il bridge per laravel $ composer require bref/bref bref/laravel-bridge --update-with-dependencies 2. Pubblichiamo il serverless.yml $ php artisan vendor:publish --tag=serverless-config E per PHP? (⅓ install)
  • 22. Apportiamo qualche piccola modifica al file serverless.yml Cambio nome al servizio Aggiungo il profile AWS da utilizzare Aggiungo le variabili d’ambiente Rimuovo il file .env dal package di deploy E per PHP? (⅔ setup)
  • 23. Infine, possiamo già effettuare il primo deploy. 1. Per evitare che la cache generata in locale venga deployata nella lambda cancelliamo la configurazione cachata $ php artisan config:clear 2. $ sls deploy L’output è di facile interpretazione: URL pubblicamente raggiungibile E per PHP? (3⁄3 deploy)
  • 24. Spesso è indispensabile l’utilizzo della CLI per invocare comandi di artisan, oppure per invocare comandi custom che noi stessi abbiamo realizzato. Riprendendo l’output del deploy precedente Usiamo la sintassi $ vendor/bin/bref cli <function-name> -- <command> Nel nostro caso useremo ad esempio: $ vendor/bin/bref cli laravelday-2022-sls-demo-dev-artisan -- migrate:fresh --force I’m an artisan!
  • 25. Il package bref/laravel-bridge registra il BrefServiceProvider che: ● Configura ”stderr” come log driver di default al fine di inviare i log a CloudWatch (i log generati dal runtime lambda finiscono qui) ● Configura “cookie” come session driver di default ○ Se state implementando un’API stateless e non avete bisogno della sessione potete settare SESSION_DRIVER=array come variabile d’ambiente ○ È possibile utilizzare anche altri driver come database o redis ● Usa come directory di cache la cartella /tmp (nel contesto di esecuzione della lambda, tutto il filesystem è read-only ad eccezione della cartella /tmp) Why laravel-bridge?
  • 26. Alessandro P. Ok, fantastico… Ma in un’applicazione reale io ho bisogno di gestire anche caching, code, file storage… Come faccio con serverless?
  • 28. Serverless lift È un plugin di serverless che facendo leva sulla CDK di AWS espande le funzionalità del framework. Si installa come un plugin di serverless, ovvero lanciando nella cartella di progetto il comando: $ serverless plugin install -n serverless-lift Una volta installato, si possono utilizzare i costrutti di Lift nel file serverless.yml. In particolare approfondiremo: ● Server-side website (per hostare tramite AWS S3 il front-end della nostra web app) ● DynamoDB Table (che useremo come dispositivo di caching) ● Queue (Useremo il servizio AWS SQS per gestire in modo semplice comportamenti il dispatch ed il work di job)
  • 29. Al fine di servire anche le componenti statiche della nostra web app, aggiungiamo sul file serverless.yml il seguente snippet e rieseguiamo il deploy con $ serverless deploy Serverless lift - Server-side website ½
  • 30. Dopo il deploy (sono necessari diversi minuti), l’output è il seguente: Abbiamo quindi effettuato il deploy di una distribuzione di cloudfront, ottenendo un URL del tipo https:/ /<variable-part>.cloudfront.net In questa doc possiamo vedere come usare il nostro dominio invece di quello di cloudfront. Serverless lift - Server-side website 2/2
  • 31. DynamoDB è un servizio gestito di AWS che consente di fruire facilmente di un DB key-object. Utilizzeremo tale servizio come dispositivo di caching. Aggiungiamo sul file serverless.yml i seguenti snippet Serverless - DynamoDB Table 1/2
  • 32. Modifichiamo quindi il file config/cache.php come segue: Effettuiamo infine il deploy (ricordandoci di svuotare la cache). Siamo ora in grado di utilizzare la cache senza problemi. Serverless - DynamoDB Table 2/2 'dynamodb' => [ 'driver' => 'dynamodb', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'token' => env('AWS_SESSION_TOKEN'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 'table' => env('DYNAMODB_CACHE_TABLE'), 'endpoint' => env('DYNAMODB_ENDPOINT'), 'attributes' => [ 'key' => 'id', 'expiration' => 'ttl', ], ],
  • 33. Simple Queue Service (SQS) è un servizio gestito di AWS che consente di configurare facilmente una coda con il relativo worker. A tal fine eseguiamo il seguente comando per pubblicare il worker $ php artisan vendor:publish --tag=serverless-worker Aggiungiamo poi sul file serverless.yml gli snippet di fianco. Bisogna inoltre modificare il file config/queue.php come segue: Effettuiamo infine il deploy (ricordandoci di svuotare la cache). Siamo ora in grado di utilizzare il dispatch dei job senza problemi. Serverless lift - Queues provider: ... environment: ... QUEUE_CONNECTION: sqs SQS_QUEUE: ${construct:jobs.queueUrl} functions: ... constructs: jobs: type: queue worker: handler: worker.php layers: - ${bref:layer.php-81} 'sqs' => [ 'driver' => 'sqs', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'token' => env('AWS_SESSION_TOKEN'), ...
  • 34. Ricapitolando… Oggi abbiamo: ● Esplorato il framework Serverless ed il package Bref.sh ● Effettuato il deploy di una web app Laravel in una AWS Lambda ● Aggiunto alla nostra web app grazie a Serverless Lift: ○ l’hosting delle componenti statiche con AWS S3 e Cloudfront (via server-side website) ○ Un dispositivo di caching tramite AWS DynamoDB ○ Un gestore di code tramite AWS SQS
  • 35. CREDITS: This presentation template was created by Slidesgo, including icons by Flaticon, infographics & images by Freepik Thanks Domande? Feedback? https:/ /joind.in/talk/88a1b Please keep this slide for attribution
  • 36. Approfondimento: Come funziona serverless Per approfondire cosa c’è “sotto il cofano” di serverless (e di bref.sh) vi rimando ad uno speech di Gianfranco Castro al Laravel Day 2018.