Distribuzione graduale di delle applicazioni serverless - 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à.

Distribuzione graduale di delle applicazioni serverless

AWS Serverless Application Model(AWS SAM) è integrato CodeDeployper fornireAWS Lambda implementazioni graduali. Con poche righe di configurazione,AWS SAM fa quanto segue 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 pre-traffico e post-traffico per verificare che il codice appena distribuito sia configurato correttamente e che l'applicazione funzioni come previsto.

  • Annulla automaticamente la distribuzione se vengono attivati gli CloudWatch allarmi.

Nota

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

Esempio

L'esempio seguente dimostra l'uso della funzione CodeDeploy Lambda per spostare gradualmente i clienti alla nuova versione implementata della funzione Lambda:

Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs12.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 delAWS SAM modello comportano 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 all'URI Amazon S3 della funzione Lambda.

    • 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 indica la 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, vedi Controllo delle versioni e alias delleAWS Lambda funzioni.

  • Deployment Preference Type: nell'esempio precedente, il 10% del traffico dei clienti viene immediatamente spostato alla nuova versione. Dopo 10 minuti, tutto il traffico viene spostato alla nuova versione. Tuttavia, se i test pre-traffico o post-traffico falliscono o se viene attivato un CloudWatch allarme, CodeDeploy annulla la distribuzione. È possibile 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 spostata 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 spostato 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 trasferimento del traffico disponibili oltre a quella utilizzata nell'esempio.

    Tipo di distribuzione di preferenza

    Canary10Percent30Minutes

    Canary10Percent5Minutes

    Canary10Percent10Minutes

    Canary10Percent15Minutes

    Linear10PercentEvery 10 minuti

    Linear10PercentEvery 1 minuto

    Linear10PercentEvery 2 minuti

    Linear10PercentEvery 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 una AWS Lambdao più CloudWatch metriche personalizzate che hai specificato hanno superato la soglia di allarme.

  • Hooks: si tratta di funzioni di test pre-traffico e post-traffico che eseguono controlli prima che il trasferimento del traffico inizi alla nuova versione e dopo il completamento del trasferimento del 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 segnala un errore aAWS CloudFormation. Se la funzione ha successo, 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-traffico, in cui la funzione deve richiamare per CodeDeploy segnalare un esito positivo o negativo. Utilizzare gli hook post-traffico per eseguire i test di integrazione o altre operazioni di convalida.

    Per ulteriori informazioni, consultare la documentazione di riferimento delle SAM per distribuzioni sicure.

Distribuzione 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 dovrebbe essere eseguita in due passaggi:

  • Passo 1: Implementa la tua funzione Lambda e crea automaticamente alias conAutoPublishAlias.

  • Fase 2: Esegui la distribuzione graduale conDeploymentPreference.

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

Fase 1: implementazione della funzione Lambda

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

Fase 2: implementazione graduale

Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs12.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