Cómo ejecutar e implementar IronPDF .NET en AWS Lambda
1. Crear AWS Lambda con una plantilla de contenedor (.NET 5)
Por favor, consulte la primera parte de este documento oficial de AWS: .NET 5 AWS Lambda Support with Container Images.
2. Añadir dependencias de paquetes
Estas dependencias son necesarias para Chrome en este entorno de AWS.
Por favor, modifique el archivo Docker de acuerdo con estas instrucciones:
AWS Lambda con .NET 5
AWS Lambda con .NET 7
AWS Lambda con .NET 8
3. Añadir el paquete IronPDF (Linux) NuGet
Instalar IronPdf.Linux
- En el Explorador de soluciones, haga clic con el botón derecho en Referencias, Administrar paquetes NuGet.
- Seleccione Buscar y busque
IronPdf.Linux.
4. Modificar el código de FunctionHandler
Este ejemplo creará un archivo PDF desde una página web https://ironpdf.com/ y lo guardará en /tmp. Para ver este PDF, debes subirlo a otro servicio como S3.
Es necesario configurar la carpeta temporal cuando se utiliza IronPDF en AWS Lambda. Para ello, utilice las propiedades TempFolderPath y CustomDeploymentDirectory.
public Casing FunctionHandler(string input, ILambdaContext context)
{
try
{
context.Logger.LogLine($"START FunctionHandler RequestId: {context.AwsRequestId} Input: {input}");
var awsTmpPath = @"/tmp/"; // AWS temporary storage location
// [Optional] Enable logging for debugging
// Uncomment these lines if you encounter issues
// IronPdf.Logging.Logger.EnableDebugging = true;
// IronPdf.Logging.Logger.LogFilePath = awsTmpPath;
// IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;
// Set your IronPDF license key
IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";
// Disable GPU for Chrome rendering in headless environments
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Configure IronPDF to use the AWS temporary directory
IronPdf.Installation.TempFolderPath = awsTmpPath;
IronPdf.Installation.CustomDeploymentDirectory = awsTmpPath;
// Automatically configure Linux and Docker dependencies
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
context.Logger.LogLine($"Creating IronPdf.ChromePdfRenderer");
var Renderer = new IronPdf.ChromePdfRenderer();
context.Logger.LogLine($"Rendering PDF");
using var pdfDoc = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
var guid = Guid.NewGuid();
var fileName = $"/tmp/{input}_{guid}.pdf"; // Save file to /tmp
context.Logger.LogLine($"Saving PDF with name: {fileName}");
pdfDoc.SaveAs(fileName);
// Place for future code to upload the PDF file to a service like AWS S3.
context.Logger.LogLine($"COMPLETE!");
}
catch (Exception e)
{
context.Logger.LogLine($"[ERROR] FunctionHandler : {e.Message}");
}
return new Casing(input?.ToLower(), input?.ToUpper());
}
public Casing FunctionHandler(string input, ILambdaContext context)
{
try
{
context.Logger.LogLine($"START FunctionHandler RequestId: {context.AwsRequestId} Input: {input}");
var awsTmpPath = @"/tmp/"; // AWS temporary storage location
// [Optional] Enable logging for debugging
// Uncomment these lines if you encounter issues
// IronPdf.Logging.Logger.EnableDebugging = true;
// IronPdf.Logging.Logger.LogFilePath = awsTmpPath;
// IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;
// Set your IronPDF license key
IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";
// Disable GPU for Chrome rendering in headless environments
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Configure IronPDF to use the AWS temporary directory
IronPdf.Installation.TempFolderPath = awsTmpPath;
IronPdf.Installation.CustomDeploymentDirectory = awsTmpPath;
// Automatically configure Linux and Docker dependencies
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
context.Logger.LogLine($"Creating IronPdf.ChromePdfRenderer");
var Renderer = new IronPdf.ChromePdfRenderer();
context.Logger.LogLine($"Rendering PDF");
using var pdfDoc = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
var guid = Guid.NewGuid();
var fileName = $"/tmp/{input}_{guid}.pdf"; // Save file to /tmp
context.Logger.LogLine($"Saving PDF with name: {fileName}");
pdfDoc.SaveAs(fileName);
// Place for future code to upload the PDF file to a service like AWS S3.
context.Logger.LogLine($"COMPLETE!");
}
catch (Exception e)
{
context.Logger.LogLine($"[ERROR] FunctionHandler : {e.Message}");
}
return new Casing(input?.ToLower(), input?.ToUpper());
}
Public Function FunctionHandler(ByVal input As String, ByVal context As ILambdaContext) As Casing
Try
context.Logger.LogLine($"START FunctionHandler RequestId: {context.AwsRequestId} Input: {input}")
Dim awsTmpPath = "/tmp/" ' AWS temporary storage location
' [Optional] Enable logging for debugging
' Uncomment these lines if you encounter issues
' IronPdf.Logging.Logger.EnableDebugging = true;
' IronPdf.Logging.Logger.LogFilePath = awsTmpPath;
' IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;
' Set your IronPDF license key
IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY"
' Disable GPU for Chrome rendering in headless environments
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
' Configure IronPDF to use the AWS temporary directory
IronPdf.Installation.TempFolderPath = awsTmpPath
IronPdf.Installation.CustomDeploymentDirectory = awsTmpPath
' Automatically configure Linux and Docker dependencies
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
context.Logger.LogLine($"Creating IronPdf.ChromePdfRenderer")
Dim Renderer = New IronPdf.ChromePdfRenderer()
context.Logger.LogLine($"Rendering PDF")
Dim pdfDoc = Renderer.RenderUrlAsPdf("https://ironpdf.com/")
Dim guid As System.Guid = System.Guid.NewGuid()
Dim fileName = $"/tmp/{input}_{guid}.pdf" ' Save file to /tmp
context.Logger.LogLine($"Saving PDF with name: {fileName}")
pdfDoc.SaveAs(fileName)
' Place for future code to upload the PDF file to a service like AWS S3.
context.Logger.LogLine($"COMPLETE!")
Catch e As Exception
context.Logger.LogLine($"[ERROR] FunctionHandler : {e.Message}")
End Try
Return New Casing(input?.ToLower(), input?.ToUpper())
End Function
5. Aumentar la memoria y el tiempo de espera
IronPDF requiere más tiempo y memoria que el valor predeterminado de Lambda. Puede configurarlo en aws-lambda-tools-defaults.json. Por favor, ajústelo a su función. En este ejemplo, lo fijaremos en 512 (MB) y 330 (segundos).
{
"function-memory-size": 512,
"function-timeout": 330
}
También puede actualizar esta configuración mediante la consola de Lambda. Vaya al artículo Configuración de las funciones de AWS Lambda para obtener más información.
6. Publicar
Por favor, siga las instrucciones de la última parte del documento '.NET 5 AWS Lambda Support with Container Images' para publicar y probar su función Lambda.
7. ¡Pruébalo!
Puede activar la función Lambda utilizando la consola Lambda o a través de Visual Studio utilizando el AWS Toolkit for Visual Studio.
Despliegue en España: AWS Madrid y cumplimiento AEAT
Para equipos de desarrollo en España que generan facturas, informes de cumplimiento o documentación fiscal, AWS dispone de la región eu-south-2 (Madrid) que permite procesar documentos PDF sin que los datos abandonen territorio español, un requisito frecuente al cumplir con la LOPDGDD (Ley Orgánica de Protección de Datos y Garantía de Derechos Digitales) y el Reglamento General de Protección de Datos.
Cargas de trabajo VeriFactu y Facturae en Lambda
Los ISV que desarrollan software de facturación certificado para la AEAT pueden utilizar IronPDF en AWS Lambda para generar los PDFs asociados a sus flujos VeriFactu y Facturae. La región eu-south-2 ofrece latencia reducida respecto a otras regiones europeas, lo que resulta ventajoso al generar PDFs de facturas bajo los plazos de respuesta que exige el sistema de SII (Suministro Inmediato de Información).
Nota importante: IronPDF se usa como componente de generación de PDF dentro del software de facturación certificado. La certificación VeriFactu recae sobre el sistema de facturación completo, no sobre la biblioteca de PDF de forma aislada.
Consideraciones LOPDGDD para generación de PDF en Lambda
Cuando la función Lambda procesa documentos con datos personales (facturas con NIF/CIF, datos de clientes, extractos médicos), la AEPD recomienda:
- Seleccionar eu-south-2 (Madrid) o eu-west-1 (Irlanda) como región, evitando regiones fuera del Espacio Económico Europeo salvo que exista una base jurídica adecuada bajo el RGPD.
- Configurar
/tmpcomo carpeta temporal de IronPDF y vaciarla tras cada invocación para no retener datos personales entre ejecuciones de Lambda. - Evaluar el cifrado en tránsito y en reposo al almacenar los PDF generados en S3, especialmente si contienen datos sujetos a la LOPDGDD.
Alternativa a iText AGPL en entornos serverless
Los equipos que actualmente evalúan iText deben tener en cuenta que su licencia AGPL obliga a liberar el código fuente de cualquier software que lo integre, salvo adquisición de licencia comercial. Esta obligación se aplica íntegramente al código desplegado en Lambda. IronPDF ofrece una licencia comercial sin cláusula copyleft, eliminando el riesgo de exposición del código propietario en entornos serverless de AWS.
Preguntas Frecuentes
¿Cómo creo un PDF desde una URL usando una función .NET AWS Lambda?
Para crear un PDF desde una URL en una función .NET AWS Lambda, use el método ChromePdfRenderer.RenderUrlAsPdf de IronPDF. Asegúrese de que la carpeta temporal esté configurada usando las propiedades TempFolderPath y CustomDeploymentDirectory.
¿Qué pasos debo seguir para configurar IronPDF en AWS Lambda?
Configure IronPDF en AWS Lambda estableciendo las rutas de carpetas temporales usando TempFolderPath y CustomDeploymentDirectory, deshabilitando la GPU con ChromeGpuModes.Disabled y habilitando la configuración automática de dependencias de Linux y Docker con LinuxAndDockerDependenciesAutoConfig establecido en true.
¿Por qué es importante ajustar la memoria y las configuraciones de tiempo de espera para AWS Lambda?
Ajustar la memoria y las configuraciones de tiempo de espera para AWS Lambda es crucial porque IronPDF requiere más recursos que las configuraciones predeterminadas. Esto se puede configurar en aws-lambda-tools-defaults.json o a través de la consola de AWS Lambda.
¿Cómo aseguro que las dependencias de Chrome estén correctamente instaladas para AWS Lambda?
Asegúrese de que las dependencias de Chrome estén correctamente instaladas modificando el Dockerfile de acuerdo con las instrucciones específicas para su versión de .NET, tal como se proporciona en el artículo. Esto incluye la instalación de los paquetes de Linux necesarios para Chrome en el entorno AWS.
¿Puedo usar Visual Studio para activar y probar mi función AWS Lambda?
Sí, puede usar Visual Studio para activar y probar su función AWS Lambda utilizando AWS Toolkit para Visual Studio, que permite una implementación y prueba sin problemas directamente desde el IDE.
¿Cuál es la importancia de utilizar una plantilla de contenedor for .NET 5 en AWS Lambda?
Usar una plantilla de contenedor for .NET 5 en AWS Lambda es importante porque facilita el despliegue de aplicaciones con sus dependencias, como IronPDF, asegurando la consistencia en los entornos.
¿Cómo puedo manejar excepciones en mi función AWS Lambda usando IronPDF?
Maneje excepciones en su función AWS Lambda envolviendo sus operaciones de IronPDF en un bloque try-catch, registrando errores utilizando context.Logger.LogLine para depuración y resolución de problemas.
¿Qué región AWS debo usar para cumplir con la LOPDGDD al generar PDFs en España?
Para cumplir con la LOPDGDD y mantener los datos dentro de España, se recomienda la región eu-south-2 (Madrid). Esta región permite que los datos personales incluidos en los PDFs generados (facturas con NIF/CIF, datos de clientes) no salgan del territorio español, alineándose con los requisitos de la AEPD sobre localización de datos.
¿Se puede usar IronPDF en Lambda para flujos VeriFactu o Facturae?
Sí. IronPDF puede emplearse como componente de generación de PDF dentro de software de facturación que implemente VeriFactu o Facturae. La función Lambda genera el PDF de la factura; el sistema de facturación certificado es responsable de la firma AEAT y del registro. IronPDF no incluye la cláusula AGPL copyleft de iText, lo que simplifica el cumplimiento en software propietario de facturación.

