Come configurare ed eseguire un applicativo PHP su Serverless in ambiente AWS; quali considerazioni mettere in campo per la gestione delle risorse, fino a far funzionare un applicativo basato su Laravel che espone delle API
“Le piattaforme di Cloud Computing (PaaS, Platform as a Service)”
Indirizzato a:
Architetti SW e CTO di ISV, Project Manager di System Integrator, CIO e IT Manager di imprese user.
Gli interventi avranno una forte connotazione tecnica e consentiranno ai partecipanti di cogliere gli aspetti che caratterizzano tre tra le piattaforme più evolute disponibili oggi sul mercato, ciascuna con peculiarità adatte a progetti di natura diversa.
Agenda
-Introduzione alle PaaS Fabio Cecaro, Cloud Architect e VP EuroCloud Italia
-Amazon Web Services Carlos Conde, Amazon Web Services
-Microsoft Windows Azure Fabio Santini, Microsoft Corp.
-Google App Engine Tom Grey, Google Corp.
-Debriefing Interazione con i partecipanti, moderatore Fabio Cecaro
-Q&A
OVERVIEW: Java secondo Microsoft
STRUMENTI:Java nel cloud
MODALITA’: Il Development life cycle secondo Microsoft
APPROCCIO: Stack cloud native basato su JAVA ed Azure
CAMBIAMENTO: Know how necessario per lo sviluppo su AZURE con Java
OPPORTUNITA: Use case di implementazione «first approach»
Cos'è il Cloud Computing, perché esiste, chi lo utilizza, quanto è utilizzato in Italia, quali sono i principali casi d'uso e chi sono i principali vendor
The power of the cosmos in a DB .... CosmosDBGraphRM
Descrizione:
In questo talk faremo una panoramica di cosmosDB, capiremo quali sono le sue caratteristiche principali che lo distinguono da altri database conosciuti.
Capiremo perche CosmosDB racchiude in se "The power of the cosmos".
Speaker:
* Ivano Scifoni - Solution Architect - Almaviva
Full talk video: https://youtu.be/NpKy2zZI0x8
IaC - Infrastructure as Code, gestire infrastrutture cloud tramite file di co...Daniele Mondello
Gestire infrastrutture in cloud con la semplicità di scrivere file di configurazione. Tutto ciò grazie a Terraform, soluzione Open Source per gestire infrastrutture cloud indipendentemente dal Cloud.
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdfFrancesco Liuzzi
Grazie a Serverless e Bref.sh è possibile mettere (facilmente) online una web-app in Laravel su AWS. Vedremo come è possibile dar vita ad un’architettura complessa (con web server, object storage, code, database, cache e CDN) ad alta disponibiltà e scalabile, mantenendo un costo basso ed utilizzando esclusivamente servizi fully-managed.
Francesco Liuzzi
Cos'è il Cloud Computing, perché esiste, chi lo utilizza, quanto è utilizzato in Italia, quali sono i principali casi d'uso e chi sono i principali vendor
Progettare e sviluppare soluzioni serverless con AWSsparkfabrik
1. DEFINIZIONI
- Perché Serverless / Cos’è Serverless
- Le promesse di serverless
- Use case
2. I PRODOTTI DISPONIBILI
- Confrontare prodotti serverless
- Il mercato FaaS
- La famiglia AWS serverless
4. STRUMENTI E BEST PRACTICE
- Strumenti AWS
- Framework e ambienti di sviluppo
- Testing
- Debug, log, monitoraggio
3. DESIGN E ARCHITETTURA
- Performance e Capacity
- Deploy e Release
- Gestione costi
IaC - Infrastructure as Code, gestire infrastrutture cloud tramite file di co...Daniele Mondello
Gestire infrastrutture in cloud con la semplicità di scrivere file di configurazione. Tutto ciò grazie a Terraform, soluzione Open Source per gestire infrastrutture cloud indipendentemente dal Cloud.
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdfFrancesco Liuzzi
Grazie a Serverless e Bref.sh è possibile mettere (facilmente) online una web-app in Laravel su AWS. Vedremo come è possibile dar vita ad un’architettura complessa (con web server, object storage, code, database, cache e CDN) ad alta disponibiltà e scalabile, mantenendo un costo basso ed utilizzando esclusivamente servizi fully-managed.
Francesco Liuzzi
Cos'è il Cloud Computing, perché esiste, chi lo utilizza, quanto è utilizzato in Italia, quali sono i principali casi d'uso e chi sono i principali vendor
Progettare e sviluppare soluzioni serverless con AWSsparkfabrik
1. DEFINIZIONI
- Perché Serverless / Cos’è Serverless
- Le promesse di serverless
- Use case
2. I PRODOTTI DISPONIBILI
- Confrontare prodotti serverless
- Il mercato FaaS
- La famiglia AWS serverless
4. STRUMENTI E BEST PRACTICE
- Strumenti AWS
- Framework e ambienti di sviluppo
- Testing
- Debug, log, monitoraggio
3. DESIGN E ARCHITETTURA
- Performance e Capacity
- Deploy e Release
- Gestione costi
2. Gianfranco Castro
Digital CTO @ Tecniche Nuove
Da sempre appassionato di Web Development,
SEO e Digital Marketing, docente di numerosi
corsi in ambito sviluppo Web e Mobile.
Background da sviluppatore, dai lontani tempi
del Commodore 64, poi Amiga 500 (Amos e
Pascal) mentre studia ragioneria capisce che la
sua passione è l’informatica e il web, passioni
che lo portano ad affrontare il percorso
universitario in ingegneria informatica; qui si
rafforza la passione per lo sviluppo software, i
database e IT Project Management.
3. In questo talk vedremo come far girare un applicativo basato su PHP in ambiente AWS mediante il framework
Serverless, con l’obiettivo di:
- riclicare le conoscenze già in essere nel team di sviluppo
- riclicare il codice pre-esistente e collaudato
- migliorare il processo di deploy
Per fare questo utilizzeremo Bref come tool di creazione del progetto serverless, sfruttando il meccanismo del Layer
esecutivi di AWS.
Ma procediamo per gradi:
- recap su come funziona Serverless
- esploreremo struttura di progetto basato su nodejs
- cosa viene creato sul nostro account AWS
- iniziare ad utilizzare Bref su un progetto PHP
- considerazioni per far girare un applicativo basato Laravel
PHP Serverless in ambiente AWS
Introduzione
4. Una delle innovazioni legate al cloud computing è sicuramente rappresentato dall'ecosistema del Serverless: è un
ecosistema di servizi e metodi di progettazione cui, negli ultimi anni, abbiamo assistito a una diffusione di questo
paradigma di sviluppo, alimentato da motivazioni sia tecniche che commerciali.
Il serverless è un modello di cloud computing che prevede l'accesso a potenza computazionale, storage e processi
automatizzati, la cui gestione è organizzata in modo da liberare il suo fruitore da ogni responsabilità del sistema e
dal livello minimo di servizio.
L’accesso a tale modello, deve quindi permettere l'uso di risorse senza limiti evidenti e tramite una struttura di costo
strettamente chiara sulle risorse godute.
Quindi non c'è un coinvolgimento diretto nella gestione delle risorse, nè tantomeno abbiamo alcuna responsabilità
in termini di manutenzione di server e degli applicativi che rendono disponibili tali risorse.
Inoltre deve essere garantita una certa qualità del servizio indipendentemente dalla quantità di risorse utilizzate.
Si presuppone anche, che il modello di vendita di prodotti basati su Serveless, deve permettere un calcolo preciso
dei costi in base alla reale quantità di risorse fruite, basato su una tariffazione pay-per-use.
PHP Serverless in ambiente AWS
Introduzione a Serverless
5. Possiamo sfruttare i servizi messi a disposizione da Amazon Web Service per implementare il nostro applicativo su
Serverless, e in particolare useremo:
PHP Serverless in ambiente AWS
Serverless: cosa ci offre AWS
AWS Lambda AWS API Gateway AWS S3
AWS Lambda è una piattaforma di calcolo senza server (serverless), event driven, fornita da Amazon come parte di
Amazon Web Services.
Ci consente di incapsulare il nostro codice in task di esecuzione isolati, pagando per l'effettiva quantità di risorse
impiegate (RAM e durata del processo), infatti è un servizio di calcolo che esegue codice in risposta ad eventi e
automaticamente gestisce le risorse richieste dal codice di programmazione.
Introdotta nel 2014, lo scopo di Lambda, comparato ad AWS EC2, è di semplificare la costruzione di applicazioni
on-demand che rispondono ad eventi (ad esempio caricamento di un file su S3, invocazione di un end-point di API
Gateway, etc).
6. PHP Serverless in ambiente AWS
Serverless: cosa ci offre AWS
AWS Lambda AWS API Gateway AWS S3
AWS ha come obiettivo l'inizio di una istanza Lambda nel raggio di millisecondi di un evento. I linguaggi supportati
ufficialmente sono Node.js, Python e Java, mentre altri linguaggi sono supportati via Layer, che consentono di
eseguire una specifica tecnologia:
https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html
Sul funzionamento dei Layer lo affronteremo tra qualche slide, dove andremo ad utilizzare PHP mediante uno
specifico Layer messo a disposizione da Bref.
7. PHP Serverless in ambiente AWS
Serverless: cosa ci offre AWS
API Gateway è un prodotto che fa esattamente quello che il suo nome dice: ci permette di creare uno strato
applicativo composto da diversi endpoint singolarmente configurabili.
Possiamo decidere di abilitare specifici metodi HTTP e indirizzare le chiamate sugli endpoint verso una determinata
sorgente, come un altro servizio HTTP, S3 o una funzione Lambda.
Inoltre possiamo impostare la trasformazione in entrata e in uscita dei dati e la validazione degli errori.
AWS Lambda AWS API Gateway AWS S3
8. PHP Serverless in ambiente AWS
Serverless: cosa ci offre AWS
API Gateway è quindi uno strumento di comunicazione applicativa con il quale possiamo gestire anche grandi
progetti di API.
Il servizio ci offre poi, per ogni gateway definito, un indirizzo HTTPS che possiamo facilmente associare a una
direttiva del nostro DNS per avere così un punto di accesso per le nostre API in cloud.
Il risultato finale è un connettore di servizi eterogenei che viene gestito dal provider e per il quale non abbiamo
necessità di impostare funzioni di scalabilità o affidabilità.
Queste sono caratteristiche estremamente importanti che rendono API Gateway un prodotto molto versatile.
AWS Lambda AWS API Gateway AWS S3
9. PHP Serverless in ambiente AWS
Serverless: cosa ci offre AWS
Amazon S3 è di fatto un prodotto serverless, infatti fornisce un accesso scalabile a un servizio (la memorizzazione di
dati) senza sostanziali limiti di fruizione.
In parole povere "rompe" un vincolo hardware pesantissimo rappresentato dallo storage dei server: i limiti di spazio,
la velocità di accesso ai dati e la durabilità sono tutti aspetti che possono essere facilmente compromessi da una
rottura fisica del supporto.
S3 si presenta quindi come servizio in grado di liberarci da questi vincoli; la sua importanza all'interno
dell'ecosistema Amazon è di primo piano, non a caso è stato uno dei primissimi servizi introdotti dalla piattaforma
nel 2006.
AWS Lambda AWS API Gateway AWS S3
10. PHP Serverless in ambiente AWS
Serverless: cosa ci offre AWS
Basato su un concetto di storage chiave-valore ed accessibile attraverso il protocollo HTTP, l'utilizzo di S3 è
estremamente banale: si inviano (o si richiedono) file per poi organizzarli attraverso le consuete SDK, la console
WEB e le API del servizio.
AWS Lambda AWS API Gateway AWS S3
11. Adesso andiamo a creare una prima applicazione Servers su AWS, gli step sono:
- Avere a disposizione un account AWS
- Configurare le chiavi di accesso
PHP Serverless in ambiente AWS
Serverless: creazione prima applicazione
12. Successivamente:
- Installazione Serverless CLI ( https://serverless.com/framework/docs/getting-started#installing-via-npm )
$ npm install –g serverless
- Via CLI possiamo creare un nostro primo applicativo
PHP Serverless in ambiente AWS
Serverless: creazione prima applicazione
$ sls create --help
Plugin: Create
create ........................ Create new Serverless service
--template / -t .................... Template for the service. Available templates: "aws-clojure-gradle",
"aws-clojurescript-gradle", "aws-nodejs", "aws-nodejs-typescript", "aws-alexa-typescript", "aws-nodejs-ecma-script",
"aws-python", "aws-python3", "aws-groovy-gradle", "aws-java-maven", "aws-java-gradle", "aws-kotlin-jvm-maven",
"aws-kotlin-jvm-gradle", "aws-kotlin-nodejs-gradle", "aws-scala-sbt", "aws-csharp", "aws-fsharp", "aws-go",
"aws-go-dep", "aws-go-mod", "aws-ruby", "aws-provided", "tencent-go", "tencent-nodejs", "tencent-python", "tencent-php",
"azure-nodejs", "azure-python", "cloudflare-workers", "cloudflare-workers-enterprise", "cloudflare-workers-rust",
"fn-nodejs", "fn-go", "google-nodejs", "google-python", "google-go", "kubeless-python", "kubeless-nodejs",
"knative-docker", "openwhisk-java-maven", "openwhisk-nodejs", "openwhisk-php", "openwhisk-python", "openwhisk-ruby",
"openwhisk-swift", "spotinst-nodejs", "spotinst-python", "spotinst-ruby", "spotinst-java8", "twilio-nodejs",
"aliyun-nodejs", "plugin", "hello-world"
--template-url / -u ................ Template URL for the service. Supports: GitHub, BitBucket
--template-path .................... Template local path for the service.
--path / -p ........................ The path where the service should be created (e.g. --path my-service)
--name / -n ........................ Name for the service. Overwrites the default name of the created service.
13. Come primo passo dobbiamo comunicare a Serveless, di quale account su AWS si tratta, quindi possiamo eseguire;
$ sls config credentials --help
$ sls config credentials -n pugmilano --provider aws --key XXXXXXX –secret YYYYYY
Dove:
- sls è un alias di serverless
- Il parametro -n pugmilano è appunto il nome del profilo associato a questi accessi su AWS
Quello che ottieniamo è il file ~/.aws/credentials
[default]
aws_access_key_id = KKKKKKKK
aws_secret_access_key = ZZZZZZZZZZZZ
[pugmilano]
aws_access_key_id = XXXXXX
aws_secret_access_key = YYYYYYY
PHP Serverless in ambiente AWS
Serverless: creazione prima applicazione
14. Quindi lanciando il comando:
$ serverless create --template aws-nodejs --name sls-pugmilano-demo --path
./sls-pugmilano-demo
andiamo a creare il nostro progetto, cosi strutturato:
.
├── handler.js
└── serverless.yml
Il file serverless.yml contiene le informazioni che riguardano il nostro applicativo, handler.js è la lambda
che verrà invocata dall’applicativo
PHP Serverless in ambiente AWS
Serverless: creazione prima applicazione
15. serverless.yml:
PHP Serverless in ambiente AWS
Serverless: creazione prima applicazione
# --- Nome del service
service: sls-demo
# --- Definizione del provider
provider:
name: aws
runtime: nodejs12.x
profile: pugmilano # --- Profilo utente
# --- Definizione dell'elenco delle funzioni
functions:
# --- Nome della funzione
hello:
# --- Handler della funzione
handler: handler.hello
# --- Evento su come richiamare la funzione
events:
- http:
path: test-lambda
method: get
'use strict';
module.exports.hello = async (event, context) => {
return {
statusCode: 200,
body: JSON.stringify({
message: 'PUG Milano - Esempio applicazione',
input: event,
}),
};
};
handler.js:
16. Possiamo fare subito un primo deploy con il comando:
$ serverless deploy --aws-profile pugmilano
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (3.5 KB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
Serverless: Stack update finished...
Service Information
service: sls-demo
stage: dev
region: us-east-1
stack: sls-demo-dev
api keys:
None
endpoints:
GET - https://d448vysdu3.execute-api.us-east-1.amazonaws.com/dev/test-lambda
functions:
hello: sls-demo-dev-hello
PHP Serverless in ambiente AWS
Serverless: creazione prima applicazione
Endpoint del nostro applicativo
17. Andiamo a controllare cosa è avvenuto sul AWS sul pannello di amministrazione Web:
PHP Serverless in ambiente AWS
Serverless: creazione prima applicazione
18. Andiamo a controllare cosa è avvenuto sul AWS sul pannello di amministrazione Web: la definizione della nostra
API sul pannello di API Gateway
PHP Serverless in ambiente AWS
Serverless: creazione prima applicazione
Riferimento alla
Lambda
19. Dopo aver visto la facilità d’uso di creazione di una API su Serverless, adesso passiamo all’esecuzione di PHP
all’interno di una Lambda; purtroppo PHP è uno dei linguaggi attualmente NON supportati:
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda
Per far funzionare PHP in una Lambda abbiamo due strade:
- sfruttare una call-out verso un interprete PHP, come qui
documentato
https://aws.amazon.com/blogs/compute/running-exec
utables-in-aws-lambda/
(notate la data della documentazione: 2015)
- utilizzare un layer applicativo come qui documentato
20. Nel caso di call-out possiamo includere PHP binary come parte della Lambda; questo binario deve essere compilato
su una AMI di Amazon, che verrà utilizzata dalla Lambda a runtime.
Abbiamo diversi modi per fare questo, tra cui quello messo a disposizione da ArtisanHost disponibile al repo
https://github.com/ArtisanHost/php-cgi-lambda-build-script che ci consente di fare il build su Docker (vedi il
dockerfile) che possiamo personalizzare ulteriormente.
Per lanciare la build, dobbiamo scegliere che versione di PHP intendiamo utilizzare, ad esempio:
$ sh ./buildphp.sh 7.2.1
Inoltre abbiamo a disposizione dei build già pronti di PHP disponibili sul repository
https://github.com/ArtisanHost/php-cgi-lambda-binaries
C’è da dire che l’eseguibile PHP ottenuto non funzionerà se non dentro la Lambda, in quanto costruito all’interno di
una AMI di Amazon Linux (amazonlinux:2017.03) come visibile sul dockerfile.
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda
21. Una volta ottenuto l’interprete PHP, andiamo a considerare il seguente handler.js, dove testiamo l’esecuzione
dell’interprete PHP all’interno della Lambda:
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda
'use strict';
var child_process = require('child_process');
exports.handler = function(event, context) {
// ---- https://nodejs.org/dist/latest-v10.x/docs/api/child_process.html
// --- richiamo interprete PHP
var proc = child_process .spawn('./php-cgi', ['-v']);
var output = '';
proc.stdout.on( 'data', function(data) {
output += data.toString('utf-8');
});
proc.on('close', function() {
context.succeed( output);
});
};
22. A partire da questo ragionamento possiamo quindi eseguire il nostro codice PHP direttamente su una Lambda; in
riferimento a Laravel dobbiamo fare diversi accorgimenti e aggiustamenti di configurazione, ma da punto di vista
concettuale abbiamo sempre:
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda
Request API
Gateway
Lambda PHP
Response
serverless.yml handler.js Codice PHP
In base al quale applicativo dobbiamo far eseguire, possiamo avere la necessità di compilare PHP e aggiungere
moduli e questo ci va a complicare le cose.
23. Nel caso di Layer applicativo possiamo utilizzare Bref: installabile via Composer in un progetto PHP aiuta ad
effettuare il deploy e la configurazione dell’infrastruttura su AWS; il package contiene:
- la documentazione
- PHP runtimes per AWS Lambda via Layer
- Deployment tooling
- PHP frameworks integration
I casi d’uso per l’utilizzo di Serverless e Bref possono essere raggruppati in:
- Sviluppo di APIs
- Workers
- Processi batch
- Erogazione di siti
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda con Bref
24. Bref è una soluzione per eseguire codice PHP all’interno di una Lambda, saltando tutte le problematiche di:
- Dover compilare manualmente PHP
- Scrivere e mantenere un handler.js abbastanza complesso per far eseguire PHP
- Conoscere nel dettaglio gli oggetti event e response per gestire le richieste HTTP
- Mettere in piedi un sistema di deploy efficiente per gestire anche le dipendenze del nostro applicativo
Per cominciare dobbiamo avere a disposizione PHP cli e composer; successivamente in una cartella di progetto
possiamo eseguire:
$ composer require bref/bref
Che andrà a creare i seguenti:
.
├── composer.json
├── composer.lock
└── vendor
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda con Bref
25. Nella cartella vendor, tra le varie dipendenze abbiamo la cartella "bin" dove c’è lo strumento di scaffolding di Bref;
Per creare il nostro progetto Bref dobbiamo lanciare:
$ vendor/bin/bref init
What kind of lambda do you want to create? (you will be able to add more
functions later by editing `serverless.yml`) [PHP function]:
[0] PHP function
[1] HTTP application
[2] Console application
> 0
Creating serverless.yml
Creating index.php
[OK] Project initialized and ready to test or deploy.
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda con Bref
26. Nel file serverless.yml vado a specificare quale profilo AWS voglio utilizzare (vedi file ~/.aws/credentials) e il nome
del nostro applicativo/servizio, quindi il nostro file avrà:
service: pugmilano-bref-demo # --- Nome del'applicativo
provider:
name: aws
region: us-east-1
runtime: provided
provider: pugmilano # --- Nome profilo AWS
plugins:
- ./vendor/bref/bref
functions:
function:
handler: index.php
description: 'Esempio function' # --- Descrizione della function
layers:
- ${bref:layer.php-73} # --- Nome del layer PHP, identifica una ARN
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda con Bref
27. Adesso possiamo editare il file index.php che conterrà il codice che vogliamo far eseguire alla Lambda, di default
abbiamo:
<?php declare(strict_types= 1);
require __DIR__.'/vendor/autoload.php';
lambda(function ($event) {
return 'Hello ' . ($event['name'] ?? 'world');
});
Possiamo già eseguire il deploy di questo applicativo eseguendo, ma prima dobbiamo ottimizzare la vendor, quindi
$ composer install --prefer-dist --optimize-autoloader --no-dev
successivamente
$ serverless deploy --aws-profile pugmilano
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda con Bref
28. Il risultato è:
$ serverless deploy --aws-profile pugmilano
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
........
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service pugmilano-bref-demo.zip file to S3 (3.15 MB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
...............
Serverless: Stack update finished...
Service Information
service: pugmilano-bref-demo
stage: dev
region: us-east-1
stack: pugmilano-bref-demo-dev
resources: 6
api keys:
None
endpoints:
None
functions:
function: pugmilano-bref-demo-dev-function
layers:
None
Serverless: Run the "serverless" command to setup monitoring, troubleshooting and testing.
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda con Bref
Viene creato un file .zip che contiene
tutto il nostro applicativo e caricato su di
un bucket di S3.
Successivamente viene scompattato e
viene creata l’infrastruttura
29. Di conseguenza ci ritroviamo il tutto configurato sul pannello Lambda di AWS:
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda con Bref
30. Adesso andiamo a costruire un’applicazione HTTP e dobbiamo cambiare impostazioni su serverless.yml
service: app
provider:
name: aws
region: us-east-1
runtime: provided
provider: pugmilano
plugins:
- ./vendor/bref/bref
functions:
website:
handler: index-http.php
layers:
# --- Qui vado a impostare PHP 7.3 fpm
- ${bref:layer.php-73-fpm}
# --- Qui vado a definire gli endopoint che verranno mappati su API Gateway, in questo caso ‘ANY’
events:
- http: 'ANY /'
- http: 'ANY /{proxy+}'
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda con Bref
Imposto un altro handler, dove dentro creo un
applicativo basato su Slim framework, per andare a
gestire meglio le request.
31. Qui il contenuto di index-http.php
<?php
use PsrHttpMessageResponseInterfaceas Response;
use PsrHttpMessageServerRequestInterfaceas Request;
use SlimFactoryAppFactory;
require __DIR__ . '/vendor/autoload.php';
$app = AppFactory::create();
$app->get('/hello/{name}', function (Request $request, Response $response, array $args) {
$name = $args['name'];
$response->getBody()->write("Hello, $name");
return $response;
});
$app->run();
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda con Bref
32. Rieffettuando il deploy:
$ serverless deploy --aws-profile pugmilano
…
Service Information
service: pugmilano-bref-demo
stage: dev
region: us-east-1
stack: pugmilano-bref-demo-dev
resources: 15
api keys:
None
endpoints:
ANY - https://07ksgvf7z4.execute-api.us-east-1.amazonaws.com/dev
ANY - https://07ksgvf7z4.execute-api.us-east-1.amazonaws.com/dev/{proxy+}
functions:
function: pugmilano-bref-demo-dev-function
website: pugmilano-bref-demo-dev-website
layers:
None
Serverless: Run the "serverless" command to setup monitoring, troubleshooting and testing.
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda con Bref
33. Andando a controllare su AWS abbiamo:
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda con Bref
Qui la documentazione sulle HTTP applicativo
https://bref.sh/docs/runtimes/http.html
mentre per la gestione del routing
https://bref.sh/docs/runtimes/http.html#routing
34. L’elenco dei layer esecutivi di PHP:
${bref:layer.php-74}
${bref:layer.php-73}
${bref:layer.php-72}
${bref:layer.php-74-fpm}
${bref:layer.php-73-fpm}
${bref:layer.php-72-fpm}
${bref:layer.console}
https://bref.sh/docs/runtimes/#usage
Riepilogando:
- i layer con “fpm” per le applicazioni HTTP
- i layer senza “fpm” per le function Lambda (quindi NO URL su API Gateway)
- il layer console per le applicazioni CLI (immagina artisan di Laravel)
PHP Serverless in ambiente AWS
Serverless: esecuzione di PHP da una Lambda con Bref
35. Nel caso di una applicazione Laravel, bisogna apportare delle modifiche, in particolare astrarre il filesystem, mappandolo su S3; infine
non cambia di molto la struttura del progetto Laravel, ma soltanto del file serverless.yml:
service: bref-demo-laravel
provider:
name: aws
region: us-east-1
environment:
# Laravel environment variables
APP_STORAGE: '/tmp'
plugins:
- ./vendor/bref/bref
functions:
website:
handler: public/index.php
timeout: 28 # in seconds (API Gateway has a timeout of 29 seconds)
layers:
- ${bref:layer.php-73-fpm}
events:
- http: 'ANY /'
- http: 'ANY /{proxy+}'
artisan:
handler: artisan
timeout: 120 # in seconds
layers:
- ${bref:layer.php-73} # PHP
- ${bref:layer.console} # The "console" layer
PHP Serverless in ambiente AWS
Serverless: esecuzione di Laravel da una Lambda con Bref
Sul nodo “environment” vado ad impostare le
variabili di environment che verranno recuperate da
$_ENV
Dettaglio sullo storage su
https://bref.sh/docs/environment/storage.html
Dettaglio sul deploy di Laravel
https://bref.sh/docs/frameworks/laravel.html
Layer esecutivo per i comandi di artisan:
https://bref.sh/docs/runtimes/console.html
36. Sono disponibili inoltre diversi Cost Calculator per valutare anche questo genere di impatto, ad esempio
considerando 80.000.000 di chiamate/mese
https://s3.amazonaws.com/lambda-tools/pricing-calculator.html
PHP Serverless in ambiente AWS
Performance e costi
37. Corsi di Accademia TN
Sono in partenza i seguenti corsi:
- Programmare con Laravel 6
il corso ha come obiettivo l’esplorazione del framework per la realizzazione applicativi CRUD e API; il programma ha come
argomenti: Esplorazione del Framework, Gestione del routing, Gestione delle view con Blade, Comunicazione con i Database e
Eloquent ORM, Binding dei dati tra Database, Logiche di Deploy
- Programmare con Javascript
acquisire le conoscenze e le competenze per lo sviluppo web tramite la programmazione con Javascript (ES6/7/8); tra gli
argomenti: Gestire la manipolazione del DOM, sia mediante Vanilla Javascript sia mediante jQuery, gestire le chiamate HTTP, i
motori di templating, Creare e gestire Web Component secondo gli standard HTML5, utilizzare nodejs per la creazione di web
server, gestire il deploy di un applicativo.
Si pone come base per affrontare lo sviluppo con framework quali Vue, React, Angular, Svelte
- Wordpress e WooCommerce
Creare il proprio sito di ecommerce con WooCommerce, gestire il proprio magazzino di prodotti sia fisici che virtuali, le varianti,
gestire gli ordini e i pagamenti.
Utilizzare e configurare i gateway di pagamento, modificare il tema StoreFront, esplorare i plugin fondamentali per la gestione e
l’integrazione dei prodotti.
38. We are HIRING !!!
Stiamo espandendo il nostro team IT e stiamo cercando urgentemente le seguenti figure:
Full Stack Developer
Siamo alla ricerca di un Full Stack Developer che possa affiancare il Digital
CTO nella progettazione e sviluppo di applicativi, sviluppare API per la
gestione dei contenuti, manutenzione e sviluppo su WordPress e
WooCommerce, creazione di SPA e PWA, creazione di applicativi di Data
Integration.
Skill richiesti:
Apache HTTP Server e nginx, PHP7, Javascript (ES7+, TypeScript) e/o
Python 3.x, Wordpress, API Development, Laravel, Docker, AWS, Bash
scripting, MySQL e PostgreSQL, nodejs, Vue
Gradita esperienza nella gestione di caching di contenuti (Redis, Varnish,
Memcached)
Frontend Developer
Siamo alla ricerca di un Frontend Developer, con buone doti di UX/UI design,
che possa affiancare il reparto marketing nella creazione di soluzioni e layout
per la creazione di landing page, HTML specifico per DEM e Newsletter e che
sia in grado di progettare interfacce grafiche.
Inoltre affiancherà gli sviluppatori per la creazione di layout e soluzioni grafiche
per la realizzazione di web application, anche ottimizzate per mobile; quindi la
conoscenza di HTML5, CSS3 sono ritenute fondamentali.
Skill richiesti:
Adobe Photoshop, XD, Illustrator, Sketch App, Zeplin o altro software
Buone doti creative e Conoscenza di UX/UI design, Creazione di pagine
ottimizzate per DEM e Newsletter, HTML5 e CSS3 (Media Queries, Flexbox,
Transitions e Animations), Creazione temi per Word Press
Per candidarsi: Gianfranco Castro ([email protected] )
39. Prossimamente in libreria
In riferimento a Serverless e AWS, a fine marzo verrà pubblicato il libro
Prenotazioni: https://forms.gle/9PmBNhod993jh9i57
Architetture serverless con AWS vi introdurrà al modello serverless e vi aiuterà a lavorare con
Lambda, il servizio di elaborazione serverless.
Fra le varie funzionalità il manuale esamina Amazon Athena, un servizio di query interattivo
serverless che semplifica l’analisi dei dati nel Simple Storage Service (S3 Amazon) utilizzando
SQL standard.
Scoprirete anche AWS Glue, un servizio per la classificazione dei dati semplice ed economico.
Imparerete in che modo Amazon Kinesis consenta di liberare il potenziale di analisi dei dati in
tempo reale con varie funzionalità.
A chi si rivolge
Per analisti, IT manager e sviluppatori di applicazioni serverless, il libro è concepito per chi ha
già una precedente esperienza di programmazione pur senza alcuna conoscenza di AWS.
40. Grazie per l’attenzione
PHP Serverless in ambiente AWS
Per contattarmi:
Gianfranco Castro
https://www.tecnichenuove.com
[email protected]
https://www.linkedin.com/in/gianfrancocastro/