Aller au contenu
Retour aux Tutoriels

Comment déployer un formulaire de contact serverless avec AWS SAM, Lambda et DynamoDB

Intermédiaire · 1 hour 30 minutes · 3 min de lecture · Byte Smith ·

Avant de commencer

  • Un compte AWS avec les permissions de créer des stacks SAM, fonctions Lambda, tables DynamoDB, APIs API Gateway et identités SES
  • AWS CLI et SAM CLI installés et configurés
  • Node.js 22 installé localement
  • Un domaine ou adresse email d'expéditeur SES vérifié
  • Un site statique où vous voulez ajouter un formulaire de contact (Astro, Next.js, Hugo ou similaire)
  • Familiarité basique avec TypeScript et AWS CloudFormation

Ce que vous apprendrez

  • Définir une API serverless complète avec SAM incluant API Gateway, Lambda, DynamoDB et SES
  • Concevoir un schéma DynamoDB single-table avec clés composites, TTL et multi-tenancy par partition
  • Implémenter la validation d'entrées avec un pattern de registre de schémas
  • Ajouter une limitation de débit basée sur DynamoDB avec une conception fail-closed
  • Gérer les bounces et plaintes SES avec une liste de suppression déclenchée par SNS
  • Configurer des filtres de métriques CloudWatch et des alarmes pour la surveillance en production
  • Intégrer le backend avec un frontend de site statique utilisant la protection anti-spam honeypot
  • Supporter plusieurs sites depuis un seul déploiement en utilisant un registre de sites
Sur cette page

Ce tutoriel guide la construction et le déploiement d’un backend de formulaire de contact serverless de qualité production en utilisant AWS SAM. L’architecture utilise API Gateway pour le CORS et le routage, Lambda pour le traitement des requêtes, DynamoDB pour le stockage et la limitation de débit, et SES pour les notifications email. À la fin, vous aurez un backend qui supporte plusieurs sites depuis un seul déploiement, inclut la limitation de débit et la prévention du spam, gère automatiquement les bounces email et coûte quasi-zéro pour un trafic typique.

Pour le cas d’affaires derrière cette architecture, consultez Serverless Contact Forms with AWS SAM: Why They Win on Cost, Security, and Simplicity.

Commencez par créer le répertoire du projet et installer les dépendances :

mkdir serverless-form-api
cd serverless-form-api
npm init -y
npm pkg set type="module"
npm install @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb @aws-sdk/client-ses
npm install -D typescript @types/aws-lambda esbuild
npx tsc --init --target ES2022 --module NodeNext --moduleResolution NodeNext --outDir dist --rootDir src --skipLibCheck
Note

Testé avec : AWS SAM CLI 1.131, Node.js 22.x, TypeScript 5.7, AWS SDK v3, API Gateway HTTP API (v2). Les prix et comportements des services AWS cités à mars 2026.

Ce tutoriel est très riche en code et guide la construction de 9 étapes :

  1. Configurer le projet SAM et le template — Le template SAM définit l’ensemble de l’infrastructure dans un seul fichier avec les paramètres, API Gateway et les paramètres de fonction globaux.
  2. Concevoir le schéma DynamoDB — Table de soumissions avec clés composites, TTL et table de suppression pour la gestion des bounces email.
  3. Construire le handler de soumission — La fonction Lambda qui valide les entrées, vérifie les limites de débit, stocke les soumissions et envoie les notifications.
  4. Ajouter la validation et la limitation de débit — Le registre de schémas, le registre de sites, le middleware de validation d’entrées et la limitation de débit basée sur DynamoDB.
  5. Configurer les notifications email SES — SES pour les notifications de soumission et les emails de confirmation utilisateur avec branding par site.
  6. Gérer les bounces et plaintes — Topics SNS et un Lambda de gestion des bounces qui maintient une liste de suppression email.
  7. Ajouter la surveillance et les alarmes — Groupes de logs CloudWatch, filtres de métriques et alarmes pour les erreurs, limites de débit, bounces et échecs d’auth.
  8. Construire le formulaire de contact frontend — Un formulaire HTML statique avec protection anti-spam honeypot, validation côté client et intégration API.
  9. Déployer et tester de bout en bout — Déployer avec SAM, vérifier le CORS, tester les soumissions, confirmer la livraison email et valider la limitation de débit.
Astuce

Utilisez !Split avec un paramètre au lieu de coder en dur les origines dans le template. De cette façon vous pouvez mettre à jour la liste blanche CORS pendant le déploiement sans changer le code d’infrastructure.

Pour le code source complet et les fichiers de template SAM, consultez l’article en anglais original et le dépôt GitHub associé.