

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.

# Créez votre modèle AWS SAM
<a name="tutorial-lambda-sam-template"></a>

Créez un fichier modèle AWS SAM qui spécifie les composants de votre infrastructure.

**Pour créer votre modèle AWS SAM**

1.  Créez un répertoire nommé `SAM-Tutorial`. 

1.  Dans votre répertoire `SAM-Tutorial`, créez un fichier nommé `template.yml`. 

1.  Copiez le code YAML suivant dans `template.yml`. Il s'agit de votre modèle AWS SAM . 

   ```
   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: nodejs18.x
   # Instructs your myDateTimeFunction is published to an alias named "live".      
         AutoPublishAlias: live
   # Grants this function permission to call lambda:InvokeFunction
         Policies:
           - Version: "2012-10-17"		 	 	 
             Statement: 
             - Effect: "Allow"
               Action: 
                 - "lambda:InvokeFunction"
               Resource: '*'
         DeploymentPreference:
   # Specifies the deployment configuration      
             Type: Linear10PercentEvery1Minute
   # Specifies Lambda functions for deployment lifecycle hooks
             Hooks:
               PreTraffic: !Ref beforeAllowTraffic
               PostTraffic: !Ref afterAllowTraffic
               
   # Specifies the BeforeAllowTraffic lifecycle hook Lambda function
     beforeAllowTraffic:
       Type: AWS::Serverless::Function
       Properties:
         Handler: beforeAllowTraffic.handler
         Policies:
           - Version: "2012-10-17"		 	 	 
   # Grants this function permission to call codedeploy:PutLifecycleEventHookExecutionStatus        
             Statement: 
             - Effect: "Allow"
               Action: 
                 - "codedeploy:PutLifecycleEventHookExecutionStatus"
               Resource:
                 !Sub 'arn:aws:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServerlessDeploymentApplication}/*'
           - Version: "2012-10-17"		 	 	 
   # Grants this function permission to call lambda:InvokeFunction        
             Statement: 
             - Effect: "Allow"
               Action: 
                 - "lambda:InvokeFunction"
               Resource: !Ref myDateTimeFunction.Version
         Runtime: nodejs18.x
   # Specifies the name of the Lambda hook function      
         FunctionName: 'CodeDeployHook_beforeAllowTraffic'
         DeploymentPreference:
           Enabled: false
         Timeout: 5
         Environment:
           Variables:
             NewVersion: !Ref myDateTimeFunction.Version
             
   # Specifies the AfterAllowTraffic lifecycle hook Lambda function
     afterAllowTraffic:
       Type: AWS::Serverless::Function
       Properties:
         Handler: afterAllowTraffic.handler
         Policies:
           - Version: "2012-10-17"		 	 	 
             Statement: 
   # Grants this function permission to call codedeploy:PutLifecycleEventHookExecutionStatus         
             - Effect: "Allow"
               Action: 
                 - "codedeploy:PutLifecycleEventHookExecutionStatus"
               Resource:
                 !Sub 'arn:aws:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServerlessDeploymentApplication}/*'
           - Version: "2012-10-17"		 	 	 
             Statement: 
   # Grants this function permission to call lambda:InvokeFunction          
             - Effect: "Allow"
               Action: 
                 - "lambda:InvokeFunction"
               Resource: !Ref myDateTimeFunction.Version
         Runtime: nodejs18.x
   # Specifies the name of the Lambda hook function      
         FunctionName: 'CodeDeployHook_afterAllowTraffic'
         DeploymentPreference:
           Enabled: false
         Timeout: 5
         Environment:
           Variables:
             NewVersion: !Ref myDateTimeFunction.Version
   ```

Ce modèle spécifie les éléments suivants. Pour plus d'informations, consultez la section [Concepts des AWS SAM modèles](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-basics.html).

**Une fonction Lambda appelée `myDateTimeFunction`**  
 Lorsque cette fonction Lambda est publiée, la `AutoPublishAlias` ligne du modèle la lie à un alias nommé. `live` Plus loin dans ce didacticiel, une mise à jour de cette fonction déclenche un déploiement AWS CodeDeploy qui déplace progressivement le trafic de production de la version d'origine vers la version mise à jour. 

**Deux fonctions de validation du déploiement Lambda**  
 Les fonctions Lambda suivantes sont exécutées pendant les hooks CodeDeploy du cycle de vie. Ces fonctions contiennent du code qui valide le déploiement de la fonction `myDateTimeFunction` mise à jour. Le résultat des tests de validation est transmis à CodeDeploy à l'aide de sa méthode d'API `PutLifecycleEventHookExecutionStatus`. Si un test de validation échoue, le déploiement échoue et est annulé.   
+  `CodeDeployHook_beforeAllowTraffic` s'exécute pendant le hook `BeforeAllowTraffic`. 
+  `CodeDeployHook_afterAllowTraffic` s'exécute pendant le hook `AfterAllowTraffic`. 
Le nom des deux fonctions commence par `CodeDeployHook_`. Le `CodeDeployRoleForLambda` rôle autorise les appels à la `invoke` méthode Lambda uniquement dans les fonctions Lambda dont le nom commence par ce préfixe. Pour plus d'informations, veuillez consulter les sections [AppSpec section « hooks » pour un déploiement AWS Lambda](reference-appspec-file-structure-hooks.md#appspec-hooks-lambda) et [PutLifecycleEventHookExecutionStatus](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_PutLifecycleEventHookExecutionStatus.html) (français non garanti) de la *Référence d'API CodeDeploy *. 

**Détection automatique d'une fonction Lambda mise à jour**  
 Le terme `AutoPublishAlias` indique au cadre de détecter quand la fonction `myDateTimeFunction` change, puis de la déployer à l'aide de l'alias `live`. 

**Une configuration de déploiement**  
 La configuration de déploiement détermine la vitesse à laquelle votre CodeDeploy application déplace le trafic de la version d'origine de la fonction Lambda vers la nouvelle version. Ce modèle spécifie la configuration de déploiement prédéfinie `Linear10PercentEvery1Minute`.   
 Vous ne pouvez pas spécifier de configuration de déploiement personnalisée dans un modèle AWS SAM. Pour de plus amples informations, veuillez consulter [Créez une configuration de déploiement avec CodeDeploy](deployment-configurations-create.md).

**Fonctions de hook de cycle de vie de déploiement**  
 La section `Hooks` spécifie les fonctions à exécuter pendant les hooks d'événement de cycle de vie. `PreTraffic` spécifie la fonction qui s'exécute pendant le hook `BeforeAllowTraffic`. `PostTraffic` spécifie la fonction qui s'exécute pendant le hook `AfterAllowTraffic`. 

**Autorisations permettant à Lambda d'appeler une autre fonction Lambda**  
 L'`lambda:InvokeFunction`autorisation spécifiée accorde au rôle utilisé par l'application AWS SAM l'autorisation d'appeler une fonction Lambda. Cela est nécessaire lorsque les `CodeDeployHook_afterAllowTraffic` fonctions `CodeDeployHook_beforeAllowTraffic` et invoquent la fonction Lambda déployée lors des tests de validation. 