Estoy tratando de crear una función AWS Lambda para aplicar un efecto de marca de agua en las imágenes. La imagen original se extraerá de S3, se aplicarán las marcas de agua y los resultados se volverán a cargar en S3.
Estoy usando sharp para crear estas composiciones con este código:
await sharp(inputImage) .rotate() .composite([{ input: new Buffer.from(watermark), tile: true, gravity: 'northwest' }])Con una marca de agua personalizada SVG
watermark = `<svg ... <text x="50%" y="100%" style="font-family:'Open Sans';font-weight:400;font-size:75px;font-style:normal;fill:rgba(128,128,128,1);stroke:none;" text-anchor="middle">${event.watermarkName}</text></g></svg>`; Dentro del SVG hay un elemento de texto que cambio dinámicamente para que contenga una cadena específica. Por ejemplo, puedo poner (c) Company Name en una imagen y (c) John Doe en otra.
El código funciona cuando se ejecuta en mi máquina, pero una vez dentro de una función Lambda con el tiempo de ejecución de Node.js 12.x, este es el resultado 
Como puede ver, especifiqué Open Sans como la fuente a utilizar. De hecho, puse el archivo OpenSans-Regular.ttf en /fonts/ , creé un archivo fonts.conf y configuré FONTCONFIG_PATH='/var/task/fonts' como se describe en esta pregunta .
No obstante, las fuentes siguen sin funcionar. ¿Alguien tiene sugerencias sobre cómo puedo solucionar esto?
Bueno, preguntarle a Stackoverflow me ayudó a encontrar la respuesta por mi cuenta, así que lo comparto en caso de que alguien se encuentre con este problema en el futuro.
AWS Lambda no parece admitir ni siquiera las fuentes básicas por sí solo. Por este motivo, deberá incluir sus propias fuentes como archivos dentro del archivo zip de implementación.
En mi caso esto funcionó:
Cree una carpeta /fonts y dentro coloque todos los archivos necesarios (en mi caso OpenSans-Regular.ttf ).
Coloque un archivo llamado fonts.conf dentro de esta carpeta
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <dir>/var/task/fonts/</dir> <cachedir>/tmp/fonts-cache/</cachedir> <config></config> </fontconfig>Dígale a Lambda dónde está el archivo de configuración creando una variable de entorno
FONTCONFIG_PATH='./fonts'¡Y voilá!
Trabajó para mí también con FONTCONFIG_FILE="/var/task/fonts.conf"