

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Erstellen Sie Ihre AWS SAM-Vorlage
<a name="tutorial-lambda-sam-template"></a>

Erstellen Sie eine AWS SAM-Vorlagendatei, die die Komponenten in Ihrer Infrastruktur spezifiziert.

**Um Ihre AWS SAM-Vorlage zu erstellen**

1.  Erstellen Sie ein Verzeichnis mit dem Namen `SAM-Tutorial`. 

1.  Erstellen Sie in Ihrem Verzeichnis `SAM-Tutorial` eine Datei namens `template.yml`. 

1.  Kopieren Sie den folgenden YAML-Code in `template.yml`. Dies ist Ihre AWS SAM -Vorlage. 

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

Diese Vorlage gibt Folgendes an. Weitere Informationen finden Sie unter [AWS SAM Vorlagenkonzepte](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-basics.html).

**Eine Lambda-Funktion namens `myDateTimeFunction`**  
 Wenn diese Lambda-Funktion veröffentlicht wird, verknüpft sie die `AutoPublishAlias` Zeile in der Vorlage mit einem Alias namens`live`. Später in diesem Tutorial löst ein Update dieser Funktion eine Bereitstellung aus, bei der der Produktionsdatenverkehr schrittweise von der Originalversion auf die aktualisierte Version verlagert wird. AWS CodeDeploy 

**Zwei Validierungsfunktionen für die Lambda-Bereitstellung**  
 Die folgenden Lambda-Funktionen werden während CodeDeploy Lifecycle-Hooks ausgeführt. Die Funktionen enthalten Code, der die Bereitstellung der aktualisierten `myDateTimeFunction` validiert. Das Ergebnis der Validierungstests wird mithilfe der `PutLifecycleEventHookExecutionStatus`-API-Methode an CodeDeploy übergeben. Wenn ein Validierungstest fehlschlägt, schlägt die Bereitstellung fehl und wird zurückgesetzt.   
+  `CodeDeployHook_beforeAllowTraffic` wird während des `BeforeAllowTraffic`-Hooks ausgeführt. 
+  `CodeDeployHook_afterAllowTraffic` wird während des `AfterAllowTraffic`-Hooks ausgeführt. 
Der Name beider Funktionen beginnt mit `CodeDeployHook_`. Die `CodeDeployRoleForLambda` Rolle erlaubt Aufrufe der `invoke` Lambda-Methode nur in Lambda-Funktionen, deren Namen mit diesem Präfix beginnen. Weitere Informationen finden Sie unter [AppSpec Abschnitt „Hooks“ für eine AWS Lambda-Bereitstellung](reference-appspec-file-structure-hooks.md#appspec-hooks-lambda) und [PutLifecycleEventHookExecutionStatus](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_PutLifecycleEventHookExecutionStatus.html) in der *CodeDeploy -API-Referenz*. 

**Automatische Erkennung einer aktualisierten Lambda-Funktion**  
 Der `AutoPublishAlias`-Begriff weist das Framework an, zu erkennen, wenn sich die `myDateTimeFunction`-Funktion ändert, und sie dann mit dem `live`-Alias bereitzustellen. 

**Eine Bereitstellungskonfiguration**  
 Die Bereitstellungskonfiguration bestimmt die Geschwindigkeit, mit der Ihre CodeDeploy Anwendung den Datenverkehr von der ursprünglichen Version der Lambda-Funktion auf die neue Version verlagert. Diese Vorlage gibt die vordefinierte Bereitstellungskonfiguration `Linear10PercentEvery1Minute` an.   
 Sie können keine benutzerdefinierte Bereitstellungskonfiguration in einer AWS SAM-Vorlage angeben. Weitere Informationen finden Sie unter [Erstellen Sie eine Bereitstellungskonfiguration mit CodeDeploy](deployment-configurations-create.md).

**Funktionen von Bereitstellungslebenszyklus-Hooks**  
 Der `Hooks`-Abschnitt gibt die Funktionen an, die während Lebenszyklusereignis-Hooks ausgeführt werden. `PreTraffic` gibt die Funktion an, die während des `BeforeAllowTraffic`-Hooks ausgeführt wird. `PostTraffic` gibt die Funktion an, die während des `AfterAllowTraffic`-Hooks ausgeführt wird. 

**Berechtigungen für Lambda zum Aufrufen einer anderen Lambda-Funktion**  
 Die angegebene `lambda:InvokeFunction` Berechtigung gewährt der von der AWS SAM-Anwendung verwendeten Rolle die Berechtigung, eine Lambda-Funktion aufzurufen. Dies ist erforderlich, wenn die `CodeDeployHook_afterAllowTraffic` Funktionen `CodeDeployHook_beforeAllowTraffic` und die bereitgestellte Lambda-Funktion während der Validierungstests aufrufen. 