Implementare le implementazioni canary Lambda utilizzando un alias ponderato
È possibile utilizzare un alias ponderato per suddividere il traffico tra due diverse versioni della stessa funzione. Con questo approccio, puoi testare nuove versioni delle tue funzioni con una piccola percentuale di traffico e ripristinarle rapidamente se necessario. Questa operazione è nota come implementazione canary. Le implementazioni canary si differenziano dalle implementazioni blu/verdi in quanto espongono la nuova versione solo a una parte delle richieste anziché spostare tutto il traffico contemporaneamente.
È possibile puntare un alias a un massimo di due versioni della funzione Lambda. Le versioni devono soddisfare i seguenti criteri:
-
Entrambe le versioni devono disporre dello stesso ruolo di esecuzione.
-
Entrambe le versioni devono avere la stessa configurazione della coda dead-letter o nessuna configurazione della coda dead-letter.
-
Entrambe le versioni devono essere pubblicate. L'alias non può puntare a
$LATEST.
Nota
Lambda utilizza un modello probabilistico semplice per distribuire il traffico tra le due versioni delle funzioni. A livelli di traffico bassi, è possibile che si verifichi una variazione elevata tra la percentuale di traffico configurata e quella effettiva in ciascuna versione. Se la tua funzione utilizza la concorrenza con provisioning, puoi evitare invocazioni spillover configurando un numero maggiore di istanze di concorrenza sottoposte a provisioning durante il periodo in cui il routing degli alias è attivo.
Creare un alias ponderato
Determinazione della versione richiamata
Quando configuri i pesi del traffico tra due versioni di funzioni, esistono due modi per determinare la versione della funzione Lambda invocata:
-
CloudWatch Logs: Lambda emette automaticamente una voce di log
STARTcontenente l'ID della versione richiamata per ogni invocazione della funzione. Esempio:START RequestId: 1dh194d3759ed-4v8b-a7b4-1e541f60235f Version:2Per le invocazioni di alias Lambda utilizza la dimensione
ExecutedVersionper filtrare i dati del parametro dalla versione richiamata. Per ulteriori informazioni, consulta Visualizzazione di parametri per le funzioni Lambda. -
Payload della risposta (invocazioni sincrone) - Le risposte a invocazioni sincrone della funzione includono un'intestazione
x-amz-executed-versionper indicare quale versione della funzione è stata invocata.
Creare una implementazione continua con alias ponderati
Usa AWS CodeDeploy e AWS Serverless Application Model (AWS SAM) per creare una implementazione continua che rilevi automaticamente le modifiche al codice della funzione, implementi una nuova versione della funzione e aumenti gradualmente la quantità di traffico che fluisce verso la nuova versione. La quantità di traffico e la velocità dell'aumento sono parametri che è possibile configurare.
In una distribuzione in sequenza, AWS SAM esegue le seguenti attività:
-
Configura la funzione Lambda e crea un alias. La configurazione del routing con alias ponderati è la funzionalità che implementa l'implementazione in sequenza.
-
Crea un'applicazione CodeDeploy e un gruppo di distribuzione. Il gruppo di distribuzione gestisce l'implementazione in sequenza e il rollback (se necessario).
-
Rileva quando viene creata una nuova versione della funzione Lambda.
-
Attiva CodeDeploy per iniziare l'implementazione della nuova versione.
Modello AWS SAM di esempio
Nell'esempio seguente viene illustrato un modello AWS SAM per una semplice distribuzione in sequenza.
AWSTemplateFormatVersion : '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: A sample SAM template for deploying Lambda functions Resources: # Details about the myDateTimeFunction Lambda function myDateTimeFunction: Type: AWS::Serverless::Function Properties: Handler: myDateTimeFunction.handler Runtime: nodejs22.x # Creates an alias named "live" for the function, and automatically publishes when you update the function. AutoPublishAlias: live DeploymentPreference: # Specifies the deployment configuration Type: Linear10PercentEvery2Minutes
Questo modello definisce una funzione Lambda denominata myDateTimeFunction con le seguenti proprietà.
- AutoPublishAlias
-
La proprietà
AutoPublishAliascrea un alias denominatolive. Inoltre, il framework AWS SAM rileva automaticamente quando viene salvato il nuovo codice per la funzione. Il framework pubblica quindi una nuova versione di funzione e aggiorna l'aliaslivein modo che punti alla nuova versione. - DeploymentPreference
-
La proprietà
DeploymentPreferencedetermina la velocità con cui l'applicazione CodeDeploy sposta il traffico dalla versione originale della funzione Lambda alla nuova versione. Il valoreLinear10PercentEvery2Minutessposta un ulteriore dieci percento del traffico alla nuova versione ogni due minuti.Per l'elenco delle configurazioni di distribuzione predefinite, consulta Configurazioni di distribuzione.
Per ulteriori informazioni su come creare implementazioni continue con CodeDeploy e AWS SAM, consulta gli argomenti seguenti: