AWS
Lambda
Serverless
Cloud
Arquitetura
Functions as a Service

Serverless con AWS Lambda: guida pratica per applicazioni scalabili

Serverless con AWS Lambda: guida pratica per applicazioni scalabili

Serverless non è solo una parola d'ordine, è un modello di esecuzione che permette di concentrarsi esclusivamente sulla logica di business, lasciando l'infrastruttura nelle mani del cloud. In questo articolo esamineremo l'intero ciclo di vita di un'applicazione AWS Lambda, dalla scrittura delle funzioni all'ottimizzazione dei costi.

Perché scegliere Serverless?

  • Ridimensionamento automatico, ogni invocazione riceve il proprio contenitore, senza la necessità di fornire server.
  • Costo per utilizzo, paghi solo il tempo di esecuzione (millisecondi) e il numero di invocazioni.
  • Velocità di consegna, implementazioni veloci, senza gestire cluster o VM.

Struttura del progetto

L'organizzazione di un servizio serverless è volutamente semplice. Alla radice ci sono serverless.yml, che concentra la configurazione del Serverless Framework, e package.json. Il codice della funzione Lambda risiede in src/, tipicamente in handler.js, mentre i test corrispondenti sono isolati in tests/, come handler.test.js. Questa separazione mantiene visibili l'una accanto all'altra la funzione, la sua configurazione e la sua verifica.

Implementazione passo dopo passo

1. Configurazione del framework senza server

service: minha-funcao provider: name: aws runtime: nodejs20.x region: us-east-1 memorySize: 128 timeout: 10 functions: hello: handler: src/handler.hello events: - http: path: hello method: get cors: true plugins: - serverless-offline

2. Scrittura della funzione Lambda

// src/handler.js exports.hello = async (event) => { const name = event.queryStringParameters?.name || 'Mundo'; return { statusCode: 200, body: JSON.stringify({ message: `Olá, ${name}!` }), headers: { 'Content-Type': 'application/json' } }; };

3. Test unitari con Jest

// tests/handler.test.js const { hello } = require('../src/handler'); test('retorna saudação padrão', async () => { const event = { queryStringParameters: {} }; const result = await hello(event); expect(JSON.parse(result.body)).toEqual({ message: 'Olá, Mundo!' }); });

4. Schieramento locale con serverless offline

npm install npx serverless offline start

Accedi a http://localhost:3000/dev/hello?name=Matheus e vedi la risposta.

5. Distribuisci su AWS

npx serverless deploy

Il comando crea la funzione Lambda, API Gateway e le autorizzazioni richieste.

Ottimizzazione dei costi

  • Scelta della memoria: memoria e CPU sono proporzionali. Testare diverse dimensioni e misurare la latenza.
  • Uso dei livelli: condividi le dipendenze tra le funzioni per ridurre le dimensioni del pacchetto.
  • Concorrenza fornita: per una latenza interessante, abilita la concorrenza fornita sulle funzioni critiche.
  • Monitoraggio: utilizza i parametri CloudWatch (Duration, Invocations, Errors) per identificare le funzioni sottoutilizzate.

Buone pratiche di sicurezza

  • Principio del privilegio minimo, imposta policy IAM minime per ciascun ruolo.
  • Variabili d'ambiente crittografate, utilizzare kms per segreti sensibili.
  • Convalida dell'input, non fidarsi mai dei dati dei clienti; convalidare gli schemi con ajv o simili.

Elenco di controllo per la distribuzione serverless

  • Configura serverless.yml con provider, runtime e regione.
  • Funzione di gestione della scrittura con gestione degli errori.
  • [] Implementare i test unitari.
  • Testare localmente con serverless offline.
  • Distribuisci su AWS e convalida l'endpoint.
  • Configura monitoraggio e allarmi.
  • Esaminare le policy IAM.
  • Ottimizza la memoria e la concorrenza fornita.

Conclusione

Serverless consente ai team di fornire funzionalità rapidamente, riducendo il carico operativo. Seguendo questa guida avrai una solida base per creare API, elaborare eventi e creare pipeline di dati senza gestire i server.


Hai mai utilizzato AWS Lambda? Condividi i tuoi suggerimenti per l'ottimizzazione nei commenti!

Leggi anche