AWS Lambda vs Amazon EC2: quale scegliere?
Amazon è uno dei leader nella fornitura di servizi cloud diversificati, con diverse decine di servizi disponibili, un numero in continua crescita. Amazon EC2 è uno dei servizi Amazon più popolari e costituisce la componente principale della Piattaforma di cloud computing di Amazon, lanciata nel 2006. Amazon EC2 è oggi ampiamente utilizzato, ma sta crescendo anche la popolarità di un altro servizio Amazon chiamato Lambda (introdotto nel 2014). Il post di oggi sul blog mette a confronto le piattaforme AWS Lambda ed EC2 per aiutarti a fare la scelta giusta per il tuo ambiente.
< span data-sheets-value=”{” 1 “:2,” 2 “:”
“}” data-sheets-userformat=”{” 2 “:17089,” 3 “:{” 1 “:0},” 9 “:1,” 10 “:1,” 12 “:0,” 17 “:1}”>
</span>
Che cos’è AWS EC2?
AWS EC2 (Amazon Web Services Elastic Compute Cloud) è un servizio che consente di utilizzare VM denominate istanze di EC2 nel cloud e offre scalabilità. È possibile modificare la quantità di spazio su disco, le prestazioni della CPU, la memoria ecc. ogni volta che se ne ha bisogno. È possibile selezionare l’immagine di base con il sistema operativo (OS) necessario preinstallato, come Linux o Windows, e quindi configurare la maggior parte delle impostazioni del sistema operativo, oltre a installare applicazioni personalizzate. Si dispone dell’accesso root alle proprie istanze di Amazon EC2 ed è possibile creare utenti aggiuntivi. È possibile gestire tutto ciò che serve e controllare completamente le proprie istanze di EC2, compreso il riavvio e lo spegnimento dell’istanza. La categoria del servizio web AWS EC2 è nota come Infrastructure as a Service (Infrastruttura come servizio). AWS EC2 può essere utilizzato per l’hosting cloud: è possibile distribuire server come VM (istanze) nel cloud.
Che cos’è AWS Lambda?
AWS Lambda è una piattaforma di elaborazione che consente di eseguire un frammento di codice scritto in uno dei linguaggi di programmazione supportati – Java, JavaScript o Python – quando viene attivato un trigger collegato a un evento. Non è necessario configurare un server virtuale e un ambiente per eseguire un’applicazione che avete scritto. Basta inserire il codice del programma (chiamato in questo caso funzione Lambda ) nell’interfaccia di AWS Lambda, associare la funzione Lambda all’evento ed eseguire l’applicazione nel cloud quando necessario, senza doversi occupare della gestione del server e della configurazione dell’ambiente. In questo modo, è possibile concentrarsi sull’applicazione, non sulla gestione del server: ecco perché AWS Lambda viene definito serverless.
Un evento a seguito del quale viene eseguita l’applicazione può essere il caricamento di un file nel bucket Amazon S3, l’apporto di modifiche alle tabelle DynamoDB, la ricezione di una richiesta HTTP al servizio API Gateway, ecc. Dopo aver configurato una funzione affinché venga eseguita al verificarsi di un evento, l’applicazione verrà eseguita automaticamente dopo ogni nuovo evento.
Per quanto riguarda la classificazione, Lambda è un’implementazione del modello Function as a Service (FaaS) di Amazon. Nella tabella sottostante è possibile osservare il livello di gestione per ciascun tipo di servizio, a partire dall’utilizzo di server fisici, e confrontarli. I livelli più bassi (gestione obbligatoria) sono contrassegnati in verde, mentre i livelli superiori (gestione fornita dal provider) sono contrassegnati in blu. Pertanto, quando si utilizzano server fisici, è possibile gestire l’hardware e tutti i livelli superiori. Quando si utilizza l’Infrastructure as a Service (IaaS), come AWS EC2, è possibile gestire i sistemi operativi sulle VM fornite (istanze di EC2). A livello di Platform as a Service (PaaS), è possibile eseguire la propria applicazione, che deve essere compilata prima dell’esecuzione. Quando si utilizza Function as a Service (FaaS), come AWS Lambda, non è necessario compilare l’applicazione: basta inserire il codice nell’interfaccia fornita dall’MSP (Managed Service Provider). Il SaaS (Software as a Service), menzionato a titolo di confronto nella tabella, consente solo di utilizzare applicazioni già pronte (realizzate dai vendor) nel cloud tramite un thin client o un browser web.
AWS EC2 vs Lambda: casi d’uso
AWS EC2 presenta un’ampia gamma di casi d’uso, poiché quasi tutto può essere configurato quando si utilizza questo servizio. I casi d’uso più comuni di AWS EC2 sono:
- Hosting di siti web
- Sviluppo e test di applicazioni o ambienti complessi
- Calcolo ad alte prestazioni
- Ripristino di emergenza
Casi d’uso generali di AWS Lambda:
- Automazione delle attività
- Elaborazione di oggetti caricati su Amazon S3
- Analisi dei log in tempo reale
- Filtraggio e trasformazione dei dati in tempo reale
Consideriamo un esempio specifico. Immaginate che il vostro sito web utilizzi un bucket Amazon S3 per archiviare i contenuti del sito, tra cui immagini, video, file audio, ecc. Quando viene caricato un nuovo file immagine o video, dovete creare un’immagine di anteprima per la vostra pagina web che funga da link all’immagine o al file video a dimensione intera. Creare manualmente le immagini di anteprima può essere un’attività noiosa e dispendiosa in termini di tempo. In questo caso, è possibile creare una funzione Lambda in grado di ridimensionare automaticamente l’immagine in base a quella caricata, rinominarla e archiviare l’immagine risultante nella directory appropriata. È possibile configurare la funzione Lambda in modo che venga eseguita subito dopo l’evento di caricamento del file immagine originale nel bucket Amazon S3 utilizzato dal proprio sito web.
AWS EC2 vs Lambda: Principio di funzionamento
EC2 . Come forse ricorderete, quando si utilizza AWS EC2, si opera con VM note come istanze di EC2. È possibile aggiungere hardware virtuale (dischi virtuali, interfacce di rete, processori, memoria) a un’istanza di EC2, nonché avviare, arrestare e riavviare un’istanza VM. Le istanze di EC2 possono funzionare con due tipi di storage: Elastic Block Storage (EBS) e bucket S3. È possibile utilizzare un’immagine preconfigurata con un sistema operativo già installato e creare la propria Amazon Machine Image (AMI) personalizzata. Il servizio cloud EC2 offre scalabilità automatica e bilanciamento del carico. Le istanze di EC2 possono funzionare in combinazione con la maggior parte degli altri servizi web di Amazon, quali S3, ECS, Route53, CloudWatch, ecc. .
Lambda . Quando si utilizza AWS Lambda, l’applicazione (funzione Lambda) viene eseguita in un contenitore in modo trasparente per l’utente. Il contenitore contiene codice e librerie. Le risorse vengono fornite da Amazon in base alle esigenze dell’applicazione e la scalabilità è automatica e trasparente. Non è possibile controllare né il contenitore in cui gira l’applicazione né l’istanza di Amazon EC2 su cui è in esecuzione il contenitore (non si ha alcuna informazione al riguardo poiché l’infrastruttura sottostante non è accessibile agli utenti di Amazon Lambda). Fare riferimento alla tabella sopra riportata.
AWS Lambda può essere considerato come un framework di EC2 Container Service (ECS) che utilizza i contenitori per eseguire un frammento di codice che rappresenta la vostra applicazione. Il ciclo di vita di ciascun contenitore è breve. La funzione Lambda in esecuzione non salva il proprio stato. Se si desidera salvare i risultati, questi devono essere conservati in un archivio dati, ad esempio in un bucket Amazon S3. È possibile configurare una rete virtuale per una funzione Lambda, ad esempio per connettersi ad Amazon RDS (Amazon Relational Database Service). Lambda è costituito da più parti: livelli, ambiente della funzione e un gestore. I trigger sono gli attivatori di Lambda. Lambda è una singola funzione che viene eseguita in risposta alle richieste provenienti dai trigger.
L’elenco completo dei trigger disponibili:
- API Gateway
- AWS IoT
- Alexa Skills Kit
- Alexa Smart Home
- Application Load Balancer
- CloudFront
- CloudWatch Events
- CloudWatch Logs
- CodeCommit
- Cognito Sync Trigger
- DynamoDB
- Kinesis
- S3
- SNS
- SQS
API Gateway è un servizio speciale che consente agli sviluppatori di collegare diverse applicazioni non AWS alle applicazioni AWS e ad altre risorse.
AWS EC2 vs Lambda: Versioni/Snapshot
EC2 . Per i volumi EBS (Elastic Block Storage) delle istanze di EC2 è disponibile un sistema complesso di snapshot . È possibile creare snapshot incrementali e ripristinare lo stato richiesto di un’istanza di EC2. Gli snapshot multivolume possono essere utilizzati per carichi di lavoro critici, ad esempio database che utilizzano più volumi EBS.
Lambda . È supportato un pratico sistema di controllo delle versioni per una migliore gestione delle funzioni Lambda. È possibile assegnare un numero di versione a ciascuna copia di codice caricata e quindi aggiungere alias che rimandano alla versione di codice appropriata. Ogni numero di versione parte da 1 e aumenta in modo incrementale. È possibile classificare le funzioni Lambda in alpha, beta e produzione, ad esempio. Il nome della risorsa Amazon (Amazon Resource Name) viene assegnato a ciascuna versione della funzione Lambda al momento della pubblicazione e non può essere modificato in seguito.
AWS EC2 vs Lambda: Sicurezza
EC2 . È necessario occuparsi delle proprie istanze di EC2 e di tutti i componenti al loro interno. È possibile configurare manualmente un firewall per la propria istanza di EC2: Amazon fornisce il firewall VPC (Virtual Private Cloud) per controllare il traffico e garantire la sicurezza delle istanze di EC2 nel cloud. È possibile installare e configurare manualmente un software antivirus per le istanze di EC2, creare ruoli IAM, specificare le autorizzazioni, creare gruppi di sicurezza, ecc. AWS Systems Manager Patch Manager consente di installare automaticamente gli aggiornamenti del sistema operativo e le patch di sicurezza. È possibile configurare AWS in modo che esegua uno snapshot prima di installare una patch o un aggiornamento per prevenire possibili problemi. Se necessario, creare coppie di chiavi per accedere alle istanze di EC2. Quando si utilizza AWS EC2 è necessario prestare maggiore attenzione alla sicurezza rispetto a quando si utilizza AWS Lambda.
Lambda . Esistono autorizzazioni ai servizi AWS a cui Lambda ha accesso per impostazione predefinita. Il ruolo IAM viene utilizzato per definire i servizi che devono essere disponibili per una funzione Lambda. Per ogni funzione Lambda, è necessario configurare il ruolo IAM per conto del quale verrà avviata la funzione Lambda. Ciò significa che, dopo aver configurato il ruolo IAM, sarà possibile collegare la funzione Lambda ai servizi Amazon definiti senza utilizzare chiavi o altri parametri di autorizzazione.
È possibile configurare la crittografia tra una funzione Lambda e S3, nonché tra un API Gateway e Lambda, utilizzando una chiave KMS. Quando si crea una funzione Lambda, viene generata una chiave di crittografia predefinita. Tuttavia, si consiglia di creare una propria chiave KMS.
Rispetto alle istanze di EC2, le funzioni Lambda non richiedono aggiornamenti di sicurezza né patch. I contenitori e i sistemi operativi sottostanti vengono aggiornati automaticamente da Amazon. Questo è il vantaggio dell’utilizzo delle funzioni Lambda in termini di sicurezza.
AWS EC2 vs Lambda: Prestazioni e disponibilità
EC2 . Dopo l’avvio di un’istanza di Amazon EC2, questa rimane in esecuzione fino a quando non la si arresta manualmente o non si pianifica un’attività di spegnimento. Quando un’istanza di EC2 è in esecuzione, un’applicazione viene eseguita quasi istantaneamente su tale istanza. È possibile eseguire contemporaneamente tutte le applicazioni che si desidera, purché le prestazioni dell’istanza di EC2 lo consentano. L’esecuzione di applicazioni su istanze di EC2 rappresenta una valida soluzione quando le applicazioni devono essere eseguite regolarmente durante l’intera giornata.
Lambda . Una funzione Lambda è sempre disponibile, ma non è in esecuzione costante. Per impostazione predefinita, la funzione Lambda è inattiva. Quando viene attivato un trigger collegato a un evento, l’applicazione (funzione Lambda) viene avviata. Il tempo massimo di esecuzione della funzione Lambda (timeout) è limitato a 900 secondi (15 minuti). Di conseguenza, non è consigliabile eseguire applicazioni a lunga durata in AWS Lambda. Se è necessario eseguire applicazioni che richiedono più di 900 secondi per essere completate con successo o applicazioni con un tempo di esecuzione variabile, si consiglia di utilizzare AWS EC2. Un altro limite per una funzione Lambda in esecuzione è la quantità massima di memoria, pari a 3008 MB.
A seconda della regione, è possibile eseguire contemporaneamente da 1000 a 3000 istanze Lambda. Contattate il supporto AWS se siete interessati a eseguire più istanze contemporaneamente.
Per AWS Lambda, il ritardo tra l’invio di una richiesta e l’esecuzione dell’applicazione è fino a 100 millisecondi, a differenza delle applicazioni in esecuzione su istanze di EC2 che non presentano tale ritardo. 100 ms non sono molti, ma per alcuni tipi di applicazioni questo tempo può essere critico. Se la vostra applicazione deve scaricare alcuni dati da un bucket Amazon S3, potrebbero essere necessari da 1 a 3 secondi aggiuntivi prima dell’esecuzione dell’applicazione. Tenete presente questo tempo di ritardo quando pianificate di utilizzare AWS Lambda per eseguire applicazioni.
Il tempo di avvio a freddo è uno svantaggio delle funzioni Lambda. La latenza si verifica quando una funzione non viene eseguita per un periodo di tempo prolungato ed è necessario del tempo per avviare un contenitore ed eseguire la funzione su Amazon Cloud. L’utilizzo di AWS Lambda per l’esecuzione delle applicazioni può rappresentare una buona soluzione in presenza di carichi di lavoro irregolari, quando le applicazioni devono essere eseguite in diversi momenti del giorno con lunghe pause tra un’esecuzione e l’altra.
AWS Lambda vs EC2: Modello di tariffazione
Sia il servizio cloud EC2 che Lambda utilizzano il principio del pagamento a consumo. Tuttavia, esaminiamo i dettagli e le differenze.
EC2 . Si paga per il tempo in cui l’istanza AWS EC2 è in esecuzione, indipendentemente dal fatto che la funzione o l’applicazione venga eseguita o meno. Il prezzo per ora dipende dalle prestazioni della CPU, dalla quantità di memoria, dalle prestazioni della scheda video e dalla capacità di storage utilizzata dall’istanza di EC2. Quando è necessario che la propria funzione/applicazione sia sempre disponibile a causa di un elevato numero di richieste regolari, l’utilizzo delle istanze di EC2 può risultare più conveniente dal punto di vista economico.
Lambda . Si paga in base al numero di esecuzioni dell’applicazione e al tempo necessario per terminare l’esecuzione. Il prezzo per ogni secondo di esecuzione di un’applicazione dipende dalla quantità di memoria allocata all’applicazione ed è pari a 0,00001667 dollari per ogni gigabyte-secondo. Il tempo di esecuzione dell’applicazione viene calcolato dall’avvio dell’applicazione fino alla restituzione del risultato o all’interruzione per timeout. Il tempo viene arrotondato per eccesso al numero più vicino che sia un multiplo di 100 ms. Quando è necessaria una disponibilità on-demand, il prezzo per l’utilizzo di AWS Lambda per l’esecuzione di funzioni/applicazioni potrebbe risultare più vantaggioso.
Conclusione
AWS EC2 è un servizio che rappresenta l’infrastruttura cloud tradizionale (IaaS) e consente di eseguire istanze di EC2 come VM, configurare ambienti ed eseguire applicazioni personalizzate.
AWS Lambda è l’implementazione di Function as a Service (FaaS) di Amazon che consente di eseguire la propria applicazione senza doversi preoccupare dell’infrastruttura sottostante. AWS Lambda offre un’architettura serverless e permette di eseguire un frammento di codice nel cloud dopo l’attivazione di un trigger di evento. Utilizzando AWS Lambda, si dispone di una funzione scalabile, compatta ed economica con controllo delle versioni. Potrete concentrarvi sulla scrittura del codice, non sulla configurazione dell’infrastruttura.
Se avete calcolato che l’applicazione presenta un elevato tempo di inattività su un’istanza di EC2 sempre in esecuzione, valutate l’utilizzo di AWS Lambda, grazie al quale non dovrete pagare per il tempo di inattività in assenza di richieste di esecuzione dell’applicazione. Se il numero di richieste regolari per l’esecuzione dell’applicazione è elevato, potrebbe essere preferibile effettuare l’implementazione dell’applicazione su un’istanza di EC2 sempre in esecuzione.
L’utilizzo di AWS EC2 è indicato per l’esecuzione di applicazioni ad alte prestazioni, applicazioni a esecuzione prolungata e applicazioni che non devono subire ritardi all’avvio. Se utilizzate istanze di EC2, non dimenticate di eseguire il backup per evitare la perdita dei dati. NAKIVO Backup & Replication è una soluzione completa per la protezione dei dati in grado di proteggere le istanze di EC2 oltre alle macchine virtuali VMware vSphere, alle macchine virtuali Hyper-V e ai server fisici.
