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 AWS SAM modèle
Créez un fichier AWS SAM modèle qui spécifie les composants de votre infrastructure.
Pour créer votre modèle AWS SAM
-
Créez un répertoire nommé
SAM-Tutorial
. -
Dans votre répertoire
SAM-Tutorial
, créez un fichier nommétemplate.yml
. -
Copiez le YAML code 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.
- 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. Les résultats des tests de validation sont transmis à CodeDeploy l'aide de saPutLifecycleEventHookExecutionStatus
API méthode. Si un test de validation échoue, le déploiement échoue et est annulé.-
CodeDeployHook_beforeAllowTraffic
s'exécute pendant le hookBeforeAllowTraffic
. -
CodeDeployHook_afterAllowTraffic
s'exécute pendant le hookAfterAllowTraffic
.
Le nom des deux fonctions commence par
CodeDeployHook_
. LeCodeDeployRoleForLambda
rôle autorise les appels à lainvoke
méthode Lambda uniquement dans les fonctions Lambda dont le nom commence par ce préfixe. Pour plus d'informations, voir AppSpec section « hooks » pour un déploiement AWS Lambda et PutLifecycleEventHookExecutionStatusdans la CodeDeploy APIréférence. -
- Détection automatique d'une fonction Lambda mise à jour
-
Le terme
AutoPublishAlias
indique au cadre de détecter quand la fonctionmyDateTimeFunction
change, puis de la déployer à l'aide de l'aliaslive
. - 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
.Note
Vous ne pouvez pas spécifier de configuration de déploiement personnalisée dans un AWS SAM modèle. Pour de plus amples informations, veuillez consulter Create a Deployment Configuration.
- 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 hookBeforeAllowTraffic
.PostTraffic
spécifie la fonction qui s'exécute pendant le hookAfterAllowTraffic
. - Autorisations permettant à Lambda d'appeler une autre fonction Lambda
-
L'
lambda:InvokeFunction
autorisation spécifiée accorde au rôle utilisé par l' AWS SAMapplication l'autorisation d'invoquer une fonction Lambda. Cela est nécessaire lorsque lesCodeDeployHook_afterAllowTraffic
fonctionsCodeDeployHook_beforeAllowTraffic
et invoquent la fonction Lambda déployée lors des tests de validation.