

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
<a name="automating-updates-to-serverless-apps"></a>

AWS Serverless Application Model (AWS SAM) est intégré [CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)pour permettre des AWS Lambda déploiements progressifs. À l'aide de 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: 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
```

Ces révisions du AWS SAM modèle permettent d'effectuer les opérations suivantes :
+ `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 à l'URI Amazon S3 de la fonction Lambda.
  + 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](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html).
+ `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.     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/serverless-application-model/latest/developerguide/automating-updates-to-serverless-apps.html)
+ `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 Lambda](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions-metrics.html)ou 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 à 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 en savoir plus, consultez [SAM Reference to Safe Deployments (Référence SAM pour des déploiements en toute sécurité)](https://github.com/aws/serverless-application-model/blob/master/docs/safe_lambda_deployments.rst). 

## Déploiement progressif d'une fonction Lambda pour la première fois
<a name="automating-updates-to-serverless-apps-first-time"></a>

 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
<a name="automating-updates-to-serverless-apps-first-time-step1"></a>

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

    AutoPublishAlias: live
```

### Étape 2 : réaliser votre déploiement progressif
<a name="automating-updates-to-serverless-apps-first-time-step2"></a>

```
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
```

## En savoir plus
<a name="automating-updates-to-serverless-apps-learn"></a>

Pour un exemple pratique de configuration d'un déploiement progressif, consultez le [Module 5 – déploiements Canary](https://s12d.com/sam-ws-en-canaries) dans *L'atelier AWS SAM complet*.