Erstellen Sie Ihre AWS SAM-Vorlage - AWS CodeDeploy

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

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.

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

  3. 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.

Eine Lambda-Funktion namens myDateTimeFunction

Wenn diese Lambda-Funktion veröffentlicht wird, verknüpft sie die AutoPublishAlias Zeile in der Vorlage mit einem Alias namenslive. 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 CodeDeploy mithilfe der zugehörigen PutLifecycleEventHookExecutionStatus API-Methode ü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 und PutLifecycleEventHookExecutionStatusin 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.

Anmerkung

Sie können keine benutzerdefinierte Bereitstellungskonfiguration in einer AWS SAM-Vorlage angeben. Weitere Informationen finden Sie unter Create a Deployment Configuration.

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.