Déploiement progressif d'applications sans serveur avec AWS SAM - AWS Serverless Application Model

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Déploiement progressif d'applications sans serveur avec AWS SAM

AWS Serverless Application Model (AWS SAM) est intégré CodeDeploypour permettre des AWS Lambda déploiements progressifs. Avec seulement quelques lignes de configuration, AWS SAM effectue les opérations suivantes pour vous :

  • Déploie de nouvelles versions de la fonction Lambda et crée automatiquement des alias qui pointent vers la nouvelle version.

  • Déplace progressivement le trafic client vers la nouvelle version jusqu'à ce que vous estimiez qu'elle fonctionne comme prévu. Si une mise à jour ne fonctionne pas correctement, vous pouvez annuler les modifications.

  • Définit des fonctions de test pré- et post-trafic afin de vérifier que le code qui vient d'être déployé est correctement configuré et que l'application fonctionne comme prévu.

  • Annule automatiquement le déploiement si des CloudWatch alarmes sont déclenchées.

Note

Si vous activez les déploiements progressifs via votre AWS SAM modèle, une CodeDeploy ressource est automatiquement créée pour vous. Vous pouvez consulter la CodeDeploy ressource directement via le AWS Management Console.

Exemple

L'exemple suivant illustre l'utilisation de CodeDeploy pour transférer progressivement les clients vers votre version récemment déployée de la fonction 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

Ces révisions du AWS SAM modèle ont les effets suivants :

  • AutoPublishAlias: En ajoutant cette propriété et en spécifiant un nom d'alias, AWS SAM :

    • Détecte le déploiement d'un nouveau code, en fonction des modifications apportées à Amazon S3 de la fonction Lambda. URI

    • Crée et publie une version mise à jour de cette fonction avec la dernière mise à jour du code.

    • Crée un alias avec un nom que vous spécifiez (sauf s'il existe déjà un alias) en pointant vers la version mise à jour de la fonction Lambda. Pour cela, les appels de fonction doivent utiliser le qualificateur de l'alias. Si vous n'êtes pas familier avec la gestion des versions et les alias des fonctions Lambda, consultez les versions et alias des fonctions AWS Lambda.

  • Deployment Preference Type : dans l'exemple précédent, 10 % de votre trafic client est immédiatement déplacé vers la nouvelle version. Après 10 minutes, tout le trafic est déplacé vers la nouvelle version. Toutefois, si vos tests avant ou après le trafic échouent, ou si une CloudWatch alarme est déclenchée, annulez CodeDeploy votre déploiement. Vous pouvez spécifier la manière dont le trafic doit être déplacé d'une version à l'autre comme suit :

    • Canary : le trafic est déplacé en deux incréments. Vous pouvez choisir parmi les options Canary prédéfinies. Les options spécifient le pourcentage de trafic qui est déplacé vers la version mise à jour de votre fonction Lambda dans le premier incrément, et l'intervalle en minutes avant que le trafic restant soit déplacé dans le second incrément.

    • Linear : le trafic est déplacé en incréments égaux avec un nombre égal de minutes entre chaque incrément. Vous pouvez choisir parmi les options linéaires prédéfinies qui définissent le pourcentage de trafic déplacé pour chaque incrément et le nombre de minutes entre chaque incrément.

    • AllAtOnce : tout le trafic est déplacé en même temps de la fonction Lambda initiale vers sa version mise à jour.

    Le tableau ci-dessous décrit les autres options de déplacement du trafic disponibles, outre celle qui est utilisée dans l'exemple.

    Type de préférence de déploiement

    Canary10Percent30Minutes

    Canary10Percent5Minutes

    Canary10Percent10Minutes

    Canary10Percent15Minutes

    Linéaire 10 10 minutes PercentEvery

    Linéaire 10 1 minute PercentEvery

    Linéaire 10 2 minutes PercentEvery

    Linéaire 10 3 minutes PercentEvery

    AllAtOnce

  • Alarms: il s'agit d' CloudWatch alarmes déclenchées par toute erreur générée par le déploiement. Elles annulent automatiquement votre déploiement. Par exemple, si le code mis à jour que vous déployez entraîne des erreurs dans l'application. Autre exemple : si l'une des métriques AWS Lambdaou CloudWatch des métriques personnalisées que vous avez spécifiées ont dépassé le seuil d'alarme.

  • Hooks : fonctions de test pré- et post-trafic qui procèdent à des vérifications avant que ne commence le déplacement du trafic vers la nouvelle version et une fois ce déplacement terminé.

    • PreTraffic: Avant le début du transfert de trafic, CodeDeploy invoque la fonction Lambda du pré-trafic Hook. Cette fonction Lambda doit rappeler CodeDeploy et indiquer le succès ou l'échec. Si la fonction échoue, elle est abandonnée et signale un échec à AWS CloudFormation. Si la fonction réussit, CodeDeploy passe au transfert de trafic.

    • PostTraffic: Une fois le transfert de trafic terminé, CodeDeploy invoque la fonction Lambda post-traffic hook. Ceci est similaire au hook pré-trafic, où la fonction doit rappeler CodeDeploy à pour signaler un succès ou un échec. Utilisez les crochets post-trafic pour exécuter des tests d'intégration ou d'autres opérations de validation.

    Pour plus d'informations, consultez la section SAMRéférence aux déploiements sécurisés.

Déploiement progressif d'une fonction Lambda pour la première fois

Lors du déploiement progressif d'une fonction Lambda, une version de fonction préalablement déployée est CodeDeploy nécessaire pour transférer le trafic. Par conséquent, votre premier déploiement doit se faire en deux étapes :

  • Étape 1 : déployer votre fonction Lambda et créer automatiquement des alias avec AutoPublishAlias.

  • Étape 2 : réaliser votre déploiement progressif avec DeploymentPreference.

Si vous effectuez votre premier déploiement progressif en deux étapes, vous pouvez utiliser CodeDeploy une version précédente de la fonction Lambda à partir de laquelle transférer le trafic.

Étape 1 : déployer votre fonction Lambda

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

Étape 2 : réaliser votre déploiement progressif

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

En savoir plus

Pour un exemple pratique de configuration d'un déploiement progressif, consultez le Module 5 – déploiements Canary dans L'atelier AWS SAM complet.