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

196 lines
4.9 KiB
Markdown

# 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` :
```env
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 :
```bash
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 :
```bash
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 :
```bash
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
```bash
# 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 :
```bash
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 :
```bash
aws logs tail /aws/lambda/odentas-pdf-to-images --follow --region eu-west-3
```
Voir les métriques :
```bash
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 :
```bash
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 :
```bash
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 :
```bash
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