espace-paie-odentas/LAMBDA_DEPLOYMENT.md
odentas 59749d481b feat: Migration Cloudinary vers Poppler pour conversion PDF→JPEG
- Remplacer Cloudinary (US) par solution 100% AWS eu-west-3
- Lambda odentas-sign-pdf-converter avec pdftoppm
- Lambda Layer poppler-utils v5 avec dépendances complètes
- Trigger S3 ObjectCreated pour conversion automatique
- Support multi-pages validé (PDF 3 pages)
- Stockage images dans S3 odentas-docs
- PDFImageViewer pour affichage images converties
- Conformité RGPD garantie (données EU uniquement)
2025-10-28 10:22:45 +01:00

4.9 KiB

Déploiement Lambda PDF to Images - Odentas Sign

Déploiement Réussi

La Lambda de conversion PDF vers images a été déployée avec succès sur AWS.

Informations de Déploiement

  • Nom de la fonction : odentas-pdf-to-images
  • Région AWS : eu-west-3 (Paris)
  • Runtime : Node.js 20.x
  • Mémoire : 2048 MB
  • Timeout : 300 secondes (5 minutes)
  • Rôle IAM : odentas-seal-lambda-role

URL de la Lambda

https://o4nfddsoi44rrhcrl3zlfeiury0uyasw.lambda-url.eu-west-3.on.aws/

Cette URL a été ajoutée automatiquement dans .env.local :

LAMBDA_PDF_TO_IMAGES_URL=https://o4nfddsoi44rrhcrl3zlfeiury0uyasw.lambda-url.eu-west-3.on.aws/

Configuration CORS

  • AllowOrigins : * (tous les domaines)
  • AllowMethods : POST
  • AllowHeaders : *
  • Auth : NONE (pas d'authentification requise)

Cela permet de tester en local et en production sans restrictions.

🚧 Prochaines Étapes

1. Ajouter le Layer Poppler

⚠️ Important : La Lambda nécessite un Layer contenant poppler-utils et ImageMagick.

Pour créer et déployer le layer :

cd lambda-pdf-to-images
./create-layer.sh  # Nécessite Docker

# Puis déployer le layer
aws lambda publish-layer-version \
  --layer-name poppler-imagemagick \
  --description "Poppler Utils et ImageMagick" \
  --zip-file fileb://poppler-layer.zip \
  --compatible-runtimes nodejs20.x \
  --compatible-architectures x86_64 \
  --region eu-west-3

Ou utiliser un layer public existant :

aws lambda update-function-configuration \
  --function-name odentas-pdf-to-images \
  --layers arn:aws:lambda:eu-west-3:ACCOUNT:layer:poppler-imagemagick:1 \
  --region eu-west-3

2. Tester la Lambda

Test avec curl :

curl -X POST https://o4nfddsoi44rrhcrl3zlfeiury0uyasw.lambda-url.eu-west-3.on.aws/ \
  -H "Content-Type: application/json" \
  -d '{
    "pdfUrl": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
    "scale": 1.5
  }'

3. Redémarrer l'application Next.js

# L'URL Lambda a été ajoutée dans .env.local
# Redémarrer le serveur de développement
npm run dev

4. Déployer sur Vercel

Ajouter la variable d'environnement sur Vercel :

  1. Aller dans Settings > Environment Variables

  2. Ajouter :

    • Nom : LAMBDA_PDF_TO_IMAGES_URL
    • Valeur : https://o4nfddsoi44rrhcrl3zlfeiury0uyasw.lambda-url.eu-west-3.on.aws/
    • Environment : Production, Preview, Development
  3. Redéployer l'application

🔄 Mise à Jour de la Lambda

Pour mettre à jour le code de la Lambda :

cd lambda-pdf-to-images
npm install
zip -r lambda-pdf-to-images.zip index.js package.json node_modules/

aws lambda update-function-code \
  --function-name odentas-pdf-to-images \
  --zip-file fileb://lambda-pdf-to-images.zip \
  --region eu-west-3

📊 Monitoring

Voir les logs CloudWatch :

aws logs tail /aws/lambda/odentas-pdf-to-images --follow --region eu-west-3

Voir les métriques :

aws cloudwatch get-metric-statistics \
  --namespace AWS/Lambda \
  --metric-name Invocations \
  --dimensions Name=FunctionName,Value=odentas-pdf-to-images \
  --start-time 2025-10-27T00:00:00Z \
  --end-time 2025-10-27T23:59:59Z \
  --period 3600 \
  --statistics Sum \
  --region eu-west-3

🔒 Sécurité

Recommandations de Production

  1. Ajouter une authentification : Utiliser une API Key ou JWT
  2. Limiter les origines CORS : Remplacer * par les domaines autorisés
  3. Activer AWS WAF : Protection contre les attaques DDoS
  4. Configurer des alertes CloudWatch : Pour les erreurs et la latence
  5. Limiter la taille des PDFs : Actuellement 50MB max

Pour activer l'authentification :

aws lambda update-function-url-config \
  --function-name odentas-pdf-to-images \
  --auth-type AWS_IAM \
  --region eu-west-3

💰 Coûts Estimés

Avec les paramètres actuels (2048MB, 300s timeout) :

  • Prix par invocation : ~0.0000166667 USD par seconde
  • Exemple : Si conversion PDF prend 10 secondes → ~0.17 USD par invocation
  • 1000 conversions/mois → ~170 USD/mois

Pour réduire les coûts :

  • Réduire la mémoire si possible (test avec 1024MB)
  • Mettre en cache les résultats dans S3
  • Utiliser CloudFront pour le CDN

🆘 Dépannage

La Lambda retourne une erreur 500

Vérifier les logs :

aws logs tail /aws/lambda/odentas-pdf-to-images --follow --region eu-west-3

Erreur "pdftoppm: command not found"

Le layer poppler n'est pas installé. Voir section "Ajouter le Layer Poppler".

Timeout après 300 secondes

Le PDF est trop volumineux. Augmenter le timeout ou la mémoire :

aws lambda update-function-configuration \
  --function-name odentas-pdf-to-images \
  --timeout 600 \
  --memory-size 3008 \
  --region eu-west-3

📝 Support

  • Code source : /lambda-pdf-to-images/
  • Documentation : /lambda-pdf-to-images/README.md
  • Équipe : Odentas Tech