Con Aruba, a lezione di cloud #lezione 1 - parte 2: 'Da server dedicato a clo...
Serverless uso di lambda per esigenze (non) convenzionali
1. Serverless: Uso di Lambda per esigenze
(non) convenzionali
Riccardo Capecchi
2. Serverless con Lambda
AWS Lambda consente di eseguire codice senza dover effettuare il provisioning né
gestire server. Le tariffe sono calcolate in base ai tempi di elaborazione, perciò non
viene addebitato alcun costo quando il codice non è in esecuzione.
Con Lambda, puoi eseguire codice per qualsiasi tipo di applicazione o servizio di
back-end, senza alcuna amministrazione. Una volta caricato il codice, Lambda si
prende carico delle azioni necessarie per eseguirlo e ricalibrarne le risorse con la
massima disponibilità. Puoi configurare il codice in modo che venga attivato
automaticamente da altri servizi AWS oppure che venga richiamato direttamente da
qualsiasi app Web o mobile.
https://aws.amazon.com/it/lambda/
3.
4. Chi sono io ?
Alcuni dei filoni tecnologici che ho seguito nella mia carriera.
● 1999 Administration Unix/Linux
● 2004 Application Farms
● 2006 Virtualization
● 2009 Disaster Recovery
● 2013 Infrastructure as a service
● 2014 DevOps
● 2016 AWS
● 2018 Big Data
5. Usi Convenzionali di Lambda
Nella maggior parte dei casi una funziona Lambda viene utilizzata per effettuare un
piccolo passo in una elaborazione a molti passaggi.
Negli esempi successivi si utilizza il principio del microservizio o della filosofia Unix
“Scrivete programmi che facciano una cosa e che la facciano bene. Scrivete
programmi che funzionino insieme.”
6. Modifica di file caricati su Lambda
Possiamo utilizzare Amazon S3 per attivare il servizio AWS Lambda per elaborare i
dati immediatamente dopo un caricamento.
7. ETL con Lambda
E’ possibile utilizzare il servizio AWS Lambda per eseguire la convalida, filtrare,
ordinare o fare altre trasformazioni dei dati per ogni modifica dei dati in una tabella
DynamoDB e caricare i dati trasformati in un altro archivio dati.
8. Applicazioni Web con Lambda
Combinando il servizio AWS Lambda con altri servizi AWS, gli sviluppatori possono
creare potenti applicazioni Web che si espandono e scendono di potenza
automaticamente.
9. Usi non Convenzionali di Lambda
Avendo un background da amministratore di sistemi ho visto, da principio, l’utilizzo
di una funziona Lambda come la sostituzione di un cron, ovvero di una esecuzione
programmata di un programma per eseguire un task generico.
Con il tempo ho apprezzato anche la possibilità di utilizzare “trigger” diversi per far
partire questi task a seguito di condizioni particolari.
10. Da Backup a Content Replication
Tra i primi compiti messi una piedi una volta che abbiamo migrato la nostra
infrastruttura su aws c’è stato quello di eseguire dei backup, in particolare la copia
di tutti i contenuti di un bucket S3 da un account aws ad un altro con una
operazione di aws s3 sync.
Questa è una soluzione poco efficiente a livello di costi e di tempo, per cui
conviene passare ad una replica dei contenuti utilizzando una lambda che viene
invocata al caricamento di ogni oggetto all’interno del bucket.
Questa soluzione è ottima anche in contesti di Disaster Recovery.
https://aws.amazon.com/blogs/compute/content-replication-using-aws-lambda-and-amazon-s3/
11. Monitoraggio
Il servizio cloudwatch offre molte funzionalità di monitoraggio delle risorse AWS,
ma mi è capitato di voler controllare il tempo di risposta di un sito web o altri aspetti
di applicazioni web ed in questi casi una funzione lambda fatta su misura è una
ottima soluzione.
In questo caso si può utilizzare una Lambda lanciata con cadenza temporale (ogni
X minuti) e farsi mandare una notifica in caso di errore.
Un uso più avanzato potrebbe anche quello di eseguire altri task per provare ad
eseguire dei fix in caso di errore.
http://marcelog.github.io/articles/aws_lambda_check_website_http_online.html
12. Correggere Bucket con accesso pubblico
Come amministratori di account AWS può essere utile dare i permessi di creare e
gestire bucket S3 ad altro personale o a funzioni automatiche, questo potrebbe
generare, in seguito ad errori umani o di programmazione, alla creazione di bucket
con permessi con accesso pubblico e quindi al divulgare informazioni preziose per
l’azienda.
Un approccio per difendersi da questa eventualità è quella di creare delle regole
all’interno del servizio AWS Config per verificare questa condizione ed usare poi un
trigger che invochi una lambda che “ripari” questa situazione.
https://aws.amazon.com/blogs/security/how-to-use-aws-config-to-monitor-for-and-respond-to-amazon-s3-buckets-allowing-public-acce
ss/
14. Automazione di Start/Stop Ec2
Su AWS tutto è pagato per secondi o minuti di utilizzo, avere quindi la possibilità di
spegnere in automatico gli ambienti di stg non utilizzati in periodi definiti (fuori
dall’orario di lavoro, solo il sabato o la domenica) può portare grossi risparmi sulle
spese di questi ambienti.
In alcuni casi noi abbiamo usato una funzione Lambda per fare lo start di alcuni
ambienti di test, che vengono utilizzati saltuariamente (e vengono poi spenti di
notte automaticamente)
https://medium.com/@Hironsan/save-aws-ec2-cost-by-automatically-stopping-idle-instance-using-lambda-and-cloudwatch-759edd62b
27d
15. Automazione delle regole WAF
AWS WAF è un firewall che aiuta a proteggere le applicazioni Web dagli exploit
Web che possono intaccare la disponibilità delle applicazioni, compromettere la
sicurezza o consumare risorse.
AWS WAF consente di selezionare regole di sicurezza personalizzate con cui
definire il traffico verso le applicazioni Web consentite o da bloccare.
Con Lambda possiamo reagire dinamicamente e modificare queste regole quando
siamo sottoposti ad attacchi o DoS.
https://aws.amazon.com/solutions/aws-waf-security-automations/
17. Conclusioni
In generale le funzioni Lambda sono ottime in molti contesti diversi, dall’erogazione
dei servizi al monitoraggio o correzione degli stessi.
L’unica nota di attenzione è quella di impostare da subito delle best practice sul
come svilupparle all’interno dell’azienda, come condividere e mantenere il codice
nel tempo e come fare deploy delle stesse in maniera controllata.
AWS SAM e Serverless Application Framework sono due buoni punti di partenza
per avere maggiori informazioni su queste tematiche.
https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html
https://serverless.com