Créez votre modèle AWS SAM - AWS CodeDeploy

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 modèle AWS SAM

Créez un fichier modèle AWS SAM qui spécifie les composants de votre infrastructure.

Pour créer votre modèle AWS SAM
  1. Créez un répertoire nommé SAM-Tutorial.

  2. Dans votre répertoire SAM-Tutorial, créez un fichier nommé template.yml.

  3. Copiez le code YAML 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 par 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. Le résultat des tests de validation est transmis à CodeDeploy à l'aide de sa méthode d'API PutLifecycleEventHookExecutionStatus. Si un test de validation échoue, le déploiement échoue et est annulé.

  • CodeDeployHook_beforeAllowTraffic s'exécute pendant le hook BeforeAllowTraffic.

  • CodeDeployHook_afterAllowTraffic s'exécute pendant le hook AfterAllowTraffic.

Le nom des deux fonctions commence par CodeDeployHook_. Le CodeDeployRoleForLambda rôle autorise les appels à la invoke méthode Lambda uniquement dans les fonctions Lambda dont le nom commence par ce préfixe. Pour plus d'informations, veuillez consulter les sections AppSpec section « hooks » pour un déploiement AWS Lambda et PutLifecycleEventHookExecutionStatus (français non garanti) de la Référence d'API CodeDeploy .

Détection automatique d'une fonction Lambda mise à jour

Le terme AutoPublishAlias indique au cadre de détecter quand la fonction myDateTimeFunction change, puis de la déployer à l'aide de l'alias live.

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 modèle AWS SAM. Pour plus d’informations, consultez 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 hook BeforeAllowTraffic. PostTraffic spécifie la fonction qui s'exécute pendant le hook AfterAllowTraffic.

Autorisations permettant à Lambda d'appeler une autre fonction Lambda

L'lambda:InvokeFunctionautorisation spécifiée accorde au rôle utilisé par l'application AWS SAM l'autorisation d'appeler une fonction Lambda. Cela est nécessaire lorsque les CodeDeployHook_afterAllowTraffic fonctions CodeDeployHook_beforeAllowTraffic et invoquent la fonction Lambda déployée lors des tests de validation.