- 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)
196 lines
4.9 KiB
Markdown
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
|