Fallo de segmentación en AWS Lambda

This article was translated from English: Does it need improvement?
Translated
View the article in English

Al usar AWS Lambda en un contenedor de Linux y llamar al método de renderizado de forma concurrente muchas veces, a veces provoca la siguiente excepción.

Excepción:
Error: El tiempo de ejecución salió con error: señal: fallo de segmentación Runtime.ExitError

Este error es especialmente relevante para equipos que usan AWS Lambda en AWS eu-south-2 Madrid para el procesamiento concurrente de PDFs en pipelines de facturación electrónica española. Los servicios que generan PDFs representativos para VERI*FACTU o procesan lotes de facturas Facturae para FACe pueden experimentar este error bajo carga concurrente alta.

Soluciones

La solución es llamar al método GC.Collect después de que el documento PDF sea renderizado. No nos hemos encontrado con este problema en ninguna otra plataforma en la nube. Esto solo comenzó a suceder en la versión reciente; la antigua con .NET 6 usando Amazon Linux 2 todavía está funcionando.

// Create an instance of ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();

// Render the HTML string to a PDF document
PdfDocument document = renderer.RenderHtmlAsPdf(htmlString);

// Explicitly trigger garbage collection to help manage memory usage
GC.Collect();
// Create an instance of ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();

// Render the HTML string to a PDF document
PdfDocument document = renderer.RenderHtmlAsPdf(htmlString);

// Explicitly trigger garbage collection to help manage memory usage
GC.Collect();
' Create an instance of ChromePdfRenderer
Dim renderer As New ChromePdfRenderer()

' Render the HTML string to a PDF document
Dim document As PdfDocument = renderer.RenderHtmlAsPdf(htmlString)

' Explicitly trigger garbage collection to help manage memory usage
GC.Collect()
$vbLabelText   $csharpLabel

Arquitecturas recomendadas para Lambda en pipelines españoles

Para pipelines de generación de PDFs en AWS Lambda en eu-south-2 Madrid que sirven integraciones con la AEAT (SII, VERI*FACTU) o generan documentos TicketBAI para los territorios forales (Bizkaia, Gipuzkoa, Araba):

  1. Limitar la concurrencia de Lambda: El fallo de segmentación es proporcional a la concurrencia del proceso de renderizado. Configura la concurrencia reservada de la función Lambda que genera PDFs para limitar el número de invocaciones simultáneas.

  2. Considerar ECS Fargate o EC2 para alto volumen: Para lotes SII nocturnos con alta concurrencia, Lambda puede no ser la arquitectura más adecuada. ECS Fargate sobre Linux en eu-south-2 Madrid con IronPDF en contenedor Docker ofrece mejor estabilidad bajo carga sostenida.

  3. Llamar a GC.Collect() tras cada renderizado: Como se muestra en el ejemplo de código, la recolección explícita de basura tras cada PDF generado es la solución más directa dentro de Lambda.

La elección de eu-south-2 Madrid como región base para estos workloads también ofrece soberanía de datos bajo LOPDGDD para los datos fiscales procesados en el pipeline.

Preguntas frecuentes sobre fallo de segmentación en Lambda para España

*¿El fallo de segmentación en Lambda puede interrumpir el envío de PDFs VERIFACTU a la AEAT?*
Sí. Si tu función Lambda genera el PDF representativo del registro de facturación VERI*FACTU y experimenta este error bajo carga concurrente, los PDFs no se generarán correctamente. La solución inmediata es añadir GC.Collect() tras cada renderizado. Para entornos de producción de software certificado VERI\
FACTU, también considera limitar la concurrencia de Lambda o migrar a ECS Fargate.

¿Esta solución funciona también en AWS Lambda con Amazon Linux 2023 en eu-south-2 Madrid?
La solución GC.Collect() es aplicable con cualquier versión de Amazon Linux. El problema se observó con versiones recientes de .NET; si aún usas Amazon Linux 2 con .NET 6, el comportamiento puede ser diferente. Para nuevos despliegues de pipelines SII o Facturae, usa Amazon Linux 2023 y aplica la llamada explícita a GC.Collect() como precaución.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más
¿Listo para empezar?
Nuget Descargas 19,014,616 | Versión: 2026.5 just released
Still Scrolling Icon

¿Aún desplazándote?

¿Quieres una prueba rápida? PM > Install-Package IronPdf
ejecutar una muestra Mira cómo tu HTML se convierte en PDF.