Uso de IronPDF para crear archivos PDF en AWS Lambda

1. Crear AWS Lambda con una plantilla de contenedor (.NET 5)

Consulte la primera parte de este documento oficial de AWS: https://aws.amazon.com/blogs/developer/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.

Modifique el archivo Docker siguiendo estas instrucciones:

3. Añada el paquete NuGet IronPDF (Linux)

Instalar IronPdf.Linux

  1. En el Explorador de soluciones, haga clic con el botón derecho en Referencias, Administrar paquetes NuGet
  2. Seleccione Examinar y busque IronPdf.Linux.
  3. Seleccione el paquete e instálelo.

4. Modificar el código de FunctionHandler

Este ejemplo creará un archivo pdf a partir de una página web https://ironpdf.com/ y lo guardará en /tmp . Para ver este pdf debes subirlo a otro servicio como S3.

public Casing FunctionHandler(string input, ILambdaContext context)
        {
            try
            {
                context.Logger.LogLine($"START FunctionHandler RequestId: {context.AwsRequestId} Input: {input}");

                var awsTmpPath = @"/tmp/"; //  Almacenamiento temporal de AWS

                //[opcional] habilitar registro (por favor, descomente este código si tiene algún problema)
                //IronPdf.Logging.Logger.EnableDebugging = true;
                //IronPdf.Logging.Logger.LogFilePath = awsTmpPath;
                //IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;

                //establezca su clave de licencia
                IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";

                //establece ChromeGpuMode como Desactivado
                IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;

                //Establecer ruta temporal de IronPDF
                Environment.SetEnvironmentVariable("TEMP", awsTmpPath, EnvironmentVariableTarget.Process);
                Environment.SetEnvironmentVariable("TMP", awsTmpPath, EnvironmentVariableTarget.Process);
                IronPdf.Installation.TempFolderPath = awsTmpPath;
                IronPdf.Installation.CustomDeploymentDirectory = awsTmpPath;

                //set auto LinuxAndDockerDependenciesAutoConfig
                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"; //guardar archivo en /tmp

                context.Logger.LogLine($"saving pdf name : {fileName}");
                pdfDoc.SaveAs(fileName);

                //aquí puedes subir el archivo pdf guardado a cualquier sitio como S3. 

                context.Logger.LogLine($"COMPLETE!");
            }
            catch (Exception e)
            {
                context.Logger.LogLine($"[ERROR] FunctionHandler : {e.Message}");
            }

            return new Casing(input?.ToLower(), input?.ToUpper());
        }
    }

    public record Casing(string Lower, string Upper);
public Casing FunctionHandler(string input, ILambdaContext context)
        {
            try
            {
                context.Logger.LogLine($"START FunctionHandler RequestId: {context.AwsRequestId} Input: {input}");

                var awsTmpPath = @"/tmp/"; //  Almacenamiento temporal de AWS

                //[opcional] habilitar registro (por favor, descomente este código si tiene algún problema)
                //IronPdf.Logging.Logger.EnableDebugging = true;
                //IronPdf.Logging.Logger.LogFilePath = awsTmpPath;
                //IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;

                //establezca su clave de licencia
                IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";

                //establece ChromeGpuMode como Desactivado
                IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;

                //Establecer ruta temporal de IronPDF
                Environment.SetEnvironmentVariable("TEMP", awsTmpPath, EnvironmentVariableTarget.Process);
                Environment.SetEnvironmentVariable("TMP", awsTmpPath, EnvironmentVariableTarget.Process);
                IronPdf.Installation.TempFolderPath = awsTmpPath;
                IronPdf.Installation.CustomDeploymentDirectory = awsTmpPath;

                //set auto LinuxAndDockerDependenciesAutoConfig
                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"; //guardar archivo en /tmp

                context.Logger.LogLine($"saving pdf name : {fileName}");
                pdfDoc.SaveAs(fileName);

                //aquí puedes subir el archivo pdf guardado a cualquier sitio como S3. 

                context.Logger.LogLine($"COMPLETE!");
            }
            catch (Exception e)
            {
                context.Logger.LogLine($"[ERROR] FunctionHandler : {e.Message}");
            }

            return new Casing(input?.ToLower(), input?.ToUpper());
        }
    }

    public record Casing(string Lower, string Upper);
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/" '  Almacenamiento temporal de AWS

				'[opcional] habilitar registro (por favor, descomente este código si tiene algún problema)
				'IronPdf.Logging.Logger.EnableDebugging = true;
				'IronPdf.Logging.Logger.LogFilePath = awsTmpPath;
				'IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;

				'establezca su clave de licencia
				IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY"

				'establece ChromeGpuMode como Desactivado
				IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled

				'Establecer ruta temporal de IronPDF
				Environment.SetEnvironmentVariable("TEMP", awsTmpPath, EnvironmentVariableTarget.Process)
				Environment.SetEnvironmentVariable("TMP", awsTmpPath, EnvironmentVariableTarget.Process)
				IronPdf.Installation.TempFolderPath = awsTmpPath
				IronPdf.Installation.CustomDeploymentDirectory = awsTmpPath

				'set auto LinuxAndDockerDependenciesAutoConfig
				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" 'guardar archivo en /tmp

				context.Logger.LogLine($"saving pdf name : {fileName}")
				pdfDoc.SaveAs(fileName)

				'aquí puedes subir el archivo pdf guardado a cualquier sitio como 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
	}

'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'	public record Casing(string Lower, string Upper)
VB   C#

5. Aumentar la memoria y el tiempo de espera

IronPDF requiere más tiempo y memoria que el valor por defecto de Lambda. Puedes configurarlo en aws-lambda-tools-defaults.json. Ajústelo a su función. En este ejemplo lo fijaremos en 512 (MB) y 330 (segundos)

"function-memory-size" : 512, 
    "function-timeout"     : 330,
"function-memory-size" : 512, 
    "function-timeout"     : 330,
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'"function-memory-size" : 512, "function-timeout" : 330,
VB   C#

También puede actualizar esta configuración mediante la consola de Lambda. Navegue hasta el Configuración de las funciones de AWS Lambda para más información.

6. Publique

Por favor, siga las instrucciones de la última parte del.NET 5 Soporte de AWS Lambda con imágenes de contenedorpara publicar y probar su función Lambda.

7. Pruébalo.

Puede activar la función Lambda utilizando el botón Consola Lambda o a través de Visual Studio utilizando la función Kit de herramientas de AWS para Visual Studio.