Crea il tuo modello AWS SAM - AWS CodeDeploy

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Crea il tuo modello AWS SAM

Crea un file modello AWS SAM che specifichi i componenti della tua infrastruttura.

Per creare il tuo modello AWS SAM
  1. Crea una directory denominata SAM-Tutorial.

  2. Nella directory SAM-Tutorial, creare un file denominato template.yml.

  3. Copiare il seguente codice YAML in template.yml. Questo è il modello 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

Questo modello specifica quanto segue. Per ulteriori informazioni, consulta i concetti relativi ai AWS SAM modelli.

Una funzione Lambda chiamata myDateTimeFunction

Quando questa funzione Lambda viene pubblicata, la AutoPublishAlias riga del modello la collega a un alias denominato. live Più avanti in questo tutorial, un aggiornamento di questa funzione attiva una distribuzione AWS CodeDeploy che sposta in modo incrementale il traffico di produzione dalla versione originale alla versione aggiornata.

Due funzioni di convalida dell'implementazione Lambda

Le seguenti funzioni Lambda vengono eseguite durante gli hook del ciclo di CodeDeploy vita. Le funzioni contengono codice che convalida la distribuzione del codice myDateTimeFunction aggiornato. Il risultato dei test di convalida viene passato all'utilizzo del relativo metodo API. CodeDeploy PutLifecycleEventHookExecutionStatus Se un test di convalida ha esito negativo, la distribuzione ha esito negativo e viene eseguito il rollback.

  • CodeDeployHook_beforeAllowTraffic viene eseguito durante l'hook BeforeAllowTraffic.

  • CodeDeployHook_afterAllowTraffic viene eseguito durante l'hook AfterAllowTraffic.

Il nome di entrambe le funzioni inizia con CodeDeployHook_. Il CodeDeployRoleForLambda ruolo consente chiamate al invoke metodo Lambda solo nelle funzioni Lambda con nomi che iniziano con questo prefisso. Per ulteriori informazioni, consulta AppSpec sezione 'hooks' per una distribuzione AWS Lambda e PutLifecycleEventHookExecutionStatusnell'API Reference. CodeDeploy

Rilevamento automatico di una funzione Lambda aggiornata

Il termine AutoPublishAlias indica al framework di rilevare quando la funzione myDateTimeFunction cambia e quindi distribuirla utilizzando l'alias live.

Una configurazione della distribuzione

La configurazione di distribuzione determina la velocità con cui l' CodeDeployapplicazione sposta il traffico dalla versione originale della funzione Lambda alla nuova versione. Questo modello specifica la configurazione della distribuzione predefinita Linear10PercentEvery1Minute.

Nota

Non è possibile specificare una configurazione di distribuzione personalizzata in un modello AWS SAM. Per ulteriori informazioni, consulta Create a Deployment Configuration.

Funzioni hook del ciclo di vita della distribuzione

La sezione Hooks specifica le funzioni da eseguire durante gli hook degli eventi del ciclo di vita. PreTraffic specifica la funzione che viene eseguita durante l'hook BeforeAllowTraffic. PostTraffic specifica la funzione che viene eseguita durante l'hook AfterAllowTraffic.

Autorizzazioni per Lambda per richiamare un'altra funzione Lambda

L'lambda:InvokeFunctionautorizzazione specificata concede al ruolo utilizzato dall'applicazione AWS SAM il permesso di richiamare una funzione Lambda. Ciò è necessario quando CodeDeployHook_afterAllowTraffic le funzioni CodeDeployHook_beforeAllowTraffic and richiamano la funzione Lambda distribuita durante i test di convalida.