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 AWS SAM modello
Crea un file AWS SAM modello che specifichi i componenti della tua infrastruttura.
Per creare il modello AWS SAM
-
Crea una directory denominata
SAM-Tutorial
. -
Nella directory
SAM-Tutorial
, creare un file denominatotemplate.yml
. -
Copia il YAML codice seguente 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. CodeDeployPutLifecycleEventHookExecutionStatus
API Se un test di convalida ha esito negativo, la distribuzione ha esito negativo e viene eseguito il rollback.-
CodeDeployHook_beforeAllowTraffic
viene eseguito durante l'hookBeforeAllowTraffic
. -
CodeDeployHook_afterAllowTraffic
viene eseguito durante l'hookAfterAllowTraffic
.
Il nome di entrambe le funzioni inizia con
CodeDeployHook_
. IlCodeDeployRoleForLambda
ruolo consente chiamate alinvoke
metodo Lambda solo nelle funzioni Lambda con nomi che iniziano con questo prefisso. Per ulteriori informazioni, vedere AppSpec sezione 'hooks' per una distribuzione AWS Lambda e PutLifecycleEventHookExecutionStatusnel Reference. CodeDeploy API -
- Rilevamento automatico di una funzione Lambda aggiornata
-
Il termine
AutoPublishAlias
indica al framework di rilevare quando la funzionemyDateTimeFunction
cambia e quindi distribuirla utilizzando l'aliaslive
. - 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 AWS SAM modello. 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'hookBeforeAllowTraffic
.PostTraffic
specifica la funzione che viene eseguita durante l'hookAfterAllowTraffic
. - Autorizzazioni per Lambda per richiamare un'altra funzione Lambda
-
L'
lambda:InvokeFunction
autorizzazione specificata concede al ruolo utilizzato dall' AWS SAMapplicazione il permesso di richiamare una funzione Lambda. Ciò è necessario quandoCodeDeployHook_afterAllowTraffic
le funzioniCodeDeployHook_beforeAllowTraffic
and richiamano la funzione Lambda distribuita durante i test di convalida.