Implementazione graduale di applicazioni serverless con AWS SAM - AWS Serverless Application Model

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Implementazione graduale di applicazioni serverless con AWS SAM

AWS Serverless Application Model (AWS SAM) è integrato CodeDeployper fornire implementazioni graduali AWS Lambda . Con solo poche righe di configurazione, AWS SAM esegue le seguenti operazioni per te:

  • Implementa nuove versioni della funzione Lambda e crea automaticamente alias che rimandano alla nuova versione.

  • Sposta gradualmente il traffico dei clienti verso la nuova versione fino a quando non sei sicuro che funzioni come previsto. Se un aggiornamento non funziona correttamente, puoi ripristinare le modifiche.

  • Definisce le funzioni di test precedenti e successivi al traffico per verificare che il codice appena distribuito sia configurato correttamente e che l'applicazione funzioni come previsto.

  • Ripristina automaticamente la distribuzione se vengono attivati degli CloudWatch allarmi.

Nota

Se abiliti le distribuzioni graduali tramite il tuo AWS SAM modello, viene creata automaticamente una CodeDeploy risorsa per te. È possibile visualizzare la CodeDeploy risorsa direttamente tramite. AWS Management Console

Esempio

L'esempio seguente dimostra l'utilizzo della funzione CodeDeploy Lambda per spostare gradualmente i clienti verso la versione appena distribuita della funzione Lambda:

Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x CodeUri: s3://bucket/code.zip AutoPublishAlias: live DeploymentPreference: Type: Canary10Percent10Minutes Alarms: # A list of alarms that you want to monitor - !Ref AliasErrorMetricGreaterThanZeroAlarm - !Ref LatestVersionErrorMetricGreaterThanZeroAlarm Hooks: # Validation Lambda functions that are run before & after traffic shifting PreTraffic: !Ref PreTrafficLambdaFunction PostTraffic: !Ref PostTrafficLambdaFunction

Queste revisioni del AWS SAM modello eseguono le seguenti operazioni:

  • AutoPublishAlias: Aggiungendo questa proprietà e specificando un nome alias,: AWS SAM

    • Rileva quando viene distribuito un nuovo codice, in base alle modifiche apportate ad Amazon S3 della funzione Lambda. URI

    • Crea e pubblica una versione aggiornata di quella funzione con il codice più recente.

    • Crea un alias con un nome fornito dall'utente (a meno che non esista già un alias) e punta alla versione aggiornata della funzione Lambda. Per sfruttare questa funzionalità, le invocazioni della funzione devono utilizzare il qualificatore dell'alias. Se non conosci il controllo delle versioni e gli alias delle funzioni Lambda, consulta Versionamento e alias delle AWS Lambda funzioni.

  • Deployment Preference Type: Nell'esempio precedente, il 10% del traffico dei clienti viene immediatamente spostato sulla nuova versione. Dopo 10 minuti, tutto il traffico viene spostato sulla nuova versione. Tuttavia, se i test pre-traffico o post-traffico falliscono o se viene attivato un CloudWatch allarme, ripristina la distribuzione CodeDeploy . Puoi specificare in che modo il traffico deve essere spostato tra le versioni nei seguenti modi:

    • Canary: il traffico viene trasferito in due incrementi. Puoi scegliere tra le opzioni canarie predefinite. Le opzioni specificano la percentuale di traffico che viene trasferita alla versione aggiornata della funzione Lambda nel primo incremento e l'intervallo, in minuti, prima che il traffico rimanente venga spostato nel secondo incremento.

    • Linear: il traffico viene trasferito in incrementi uguali con lo stesso intervallo di tempo, in minuti, tra ciascun incremento. Puoi scegliere tra opzioni lineari predefinite che specificano la percentuale di traffico che viene spostata in ogni incremento e il numero di minuti tra ogni incremento.

    • AllAtOnce: tutto il traffico viene spostato contemporaneamente dalla funzione Lambda originale alla versione aggiornata della funzione Lambda.

    La tabella seguente descrive altre opzioni di spostamento del traffico disponibili oltre a quella utilizzata nell'esempio.

    Tipo di distribuzione di preferenza

    Canary10Percent30Minutes

    Canary10Percent5Minutes

    Canary10Percent10Minutes

    Canary10Percent15Minutes

    PercentEveryLineare 10 10 minuti

    Lineare PercentEvery 10 1 minuto

    Lineare 10 PercentEvery 2 minuti

    Lineare 10 PercentEvery 3 minuti

    AllAtOnce

  • Alarms: Si tratta di CloudWatch allarmi che vengono attivati da eventuali errori generati dalla distribuzione. Quando vengono rilevati, ripristinano automaticamente la distribuzione. Ad esempio, se il codice aggiornato che stai distribuendo causa errori all'interno dell'applicazione. Un altro esempio è se alcune AWS Lambda CloudWatch metriche personalizzate che hai specificato hanno violato la soglia di allarme.

  • Hooks: Si tratta di funzioni di test prima e dopo il traffico che eseguono controlli prima che il cambio di traffico inizi a passare alla nuova versione e dopo il completamento del cambio di traffico.

    • PreTraffic: prima che inizi lo spostamento del traffico, CodeDeploy richiama la funzione Lambda pre-traffic hook. Questa funzione Lambda deve richiamare CodeDeploy e indicare l'esito positivo o negativo. Se la funzione fallisce, si interrompe e riporta un errore a. AWS CloudFormation Se la funzione ha esito positivo, si CodeDeploy procede allo spostamento del traffico.

    • PostTraffic: una volta completato lo spostamento del traffico, CodeDeploy richiama la funzione Lambda post-traffic hook. È simile al pre-traffic hook, in cui la funzione deve richiamare a per segnalare CodeDeploy un esito positivo o negativo. Utilizzare gli hook post-traffico per eseguire i test di integrazione o altre operazioni di convalida.

    Per ulteriori informazioni, consulta SAMReference to Safe Deployments.

Implementazione graduale di una funzione Lambda per la prima volta

Quando si implementa gradualmente una funzione Lambda CodeDeploy , è necessaria una versione della funzione precedentemente distribuita da cui spostare il traffico. Pertanto, la prima implementazione deve essere eseguita in due fasi:

  • Passaggio 1: implementa la funzione Lambda e crea automaticamente alias con. AutoPublishAlias

  • Fase 2: Esegui la distribuzione graduale con. DeploymentPreference

Eseguendo la prima implementazione graduale in due fasi si ottiene CodeDeploy una versione precedente della funzione Lambda da cui spostare il traffico.

Fase 1: Implementa la funzione Lambda

Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x CodeUri: s3://bucket/code.zip AutoPublishAlias: live

Fase 2: Esegui la distribuzione graduale

Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x CodeUri: s3://bucket/code.zip AutoPublishAlias: live DeploymentPreference: Type: Canary10Percent10Minutes Alarms: # A list of alarms that you want to monitor - !Ref AliasErrorMetricGreaterThanZeroAlarm - !Ref LatestVersionErrorMetricGreaterThanZeroAlarm Hooks: # Validation Lambda functions that are run before and after traffic shifting PreTraffic: !Ref PreTrafficLambdaFunction PostTraffic: !Ref PostTrafficLambdaFunction

Ulteriori informazioni

Per un esempio pratico di configurazione di una distribuzione graduale, consulta il Modulo 5 - Canary Deployments in The Complete Workshop. AWS SAM