AWS Lambda IronPDF on Amazon Linux 2

AWS Lambda / Amazon Linux 2 (Install as admin/root using IronPdf.Linux)

This information is also shown on our website - AWS Lambda IronPDF Guide

AWS Instructions

  1. See AWS .NET 5 Lambda Support with Container Images
  2. Create and use the following Dockerfile:
# Use the .NET 5 AWS Lambda runtime as the base image
FROM public.ecr.aws/lambda/dotnet:5.0
WORKDIR /var/task

# Install the necessary dependencies for IronPDF
RUN yum install -y pango.x86_64 \
                   libXcomposite.x86_64 \
                   libXcursor.x86_64 \
                   libXdamage.x86_64 \
                   libXext.x86_64 \
                   libXi.x86_64 \
                   libXtst.x86_64 \
                   cups-libs.x86_64 \
                   libXScrnSaver.x86_64 \
                   libXrandr.x86_64 \
                   GConf2.x86_64 \
                   alsa-lib.x86_64 \
                   atk.x86_64 \
                   gtk3.x86_64 \
                   ipa-gothic-fonts \
                   xorg-x11-fonts-100dpi \
                   xorg-x11-fonts-75dpi \
                   xorg-x11-utils \
                   xorg-x11-fonts-cyrillic \
                   xorg-x11-fonts-Type1 \
                   xorg-x11-fonts-misc \
                   glibc-devel.x86_64 \
                   at-spi2-atk.x86_64 \
                   mesa-libgbm.x86_64

# This COPY command copies the .NET Lambda project's build artifacts from the host machine into the image.
COPY "bin/Release/lambda-publish" .
  1. Add IronPdf.Linux package to your solution.
  2. Modify _FunctionHandler code - this example will create a PDF from a webpage (IronPDF) and save it to /tmp. In order to view this PDF, it must be uploaded to another service, such as S3. (Official AWS example available here - AWS S3 Basics)
// Define the function handler for AWS Lambda
public Casing FunctionHandler(string input, ILambdaContext context)
{
    try
    {
        // Start logging the function process with input details
        context.Logger.LogLine($"START FunctionHandler RequestId: {context.AwsRequestId} Input: {input}");

        var awsTmpPath = @"/tmp/"; // AWS temporary storage path

        // Optional: Enable debugging for IronPdf
        // IronPdf.Logging.Logger.EnableDebugging = true;
        // IronPdf.Logging.Logger.LogFilePath = awsTmpPath;
        // IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;

        // Set your license key for IronPDF
        IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";

        // Configuration for IronPDF rendering
        IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
        IronPdf.Installation.DefaultRenderingEngine = IronPdf.Rendering.PdfRenderingEngine.Chrome;
        Environment.SetEnvironmentVariable("TEMP", awsTmpPath, EnvironmentVariableTarget.Process);
        Environment.SetEnvironmentVariable("TMP", awsTmpPath, EnvironmentVariableTarget.Process);
        IronPdf.Installation.TempFolderPath = awsTmpPath;
        IronPdf.Installation.CustomDeploymentDirectory = awsTmpPath;
        IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;

        context.Logger.LogLine($"Creating IronPdf.ChromePdfRenderer");

        // Create instance of ChromePdfRenderer and render PDF from URL
        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"; // Name for the PDF file

        // Save the rendered PDF document
        context.Logger.LogLine($"Saving PDF name : {fileName}");
        pdfDoc.SaveAs(fileName);

        // Here you can upload the saved PDF file to anywhere such as AWS S3.
        context.Logger.LogLine($"COMPLETE!");
    }
    catch (Exception e)
    {
        // Log errors if any occur
        context.Logger.LogLine($"[ERROR] FunctionHandler : {e.Message}");
    }

    // Return a new instance of Casing with lower and upper case input strings
    return new Casing(input?.ToLower(), input?.ToUpper());
}

// Casing record to hold lower and upper case strings
public record Casing(string Lower, string Upper);
// Define the function handler for AWS Lambda
public Casing FunctionHandler(string input, ILambdaContext context)
{
    try
    {
        // Start logging the function process with input details
        context.Logger.LogLine($"START FunctionHandler RequestId: {context.AwsRequestId} Input: {input}");

        var awsTmpPath = @"/tmp/"; // AWS temporary storage path

        // Optional: Enable debugging for IronPdf
        // IronPdf.Logging.Logger.EnableDebugging = true;
        // IronPdf.Logging.Logger.LogFilePath = awsTmpPath;
        // IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;

        // Set your license key for IronPDF
        IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";

        // Configuration for IronPDF rendering
        IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
        IronPdf.Installation.DefaultRenderingEngine = IronPdf.Rendering.PdfRenderingEngine.Chrome;
        Environment.SetEnvironmentVariable("TEMP", awsTmpPath, EnvironmentVariableTarget.Process);
        Environment.SetEnvironmentVariable("TMP", awsTmpPath, EnvironmentVariableTarget.Process);
        IronPdf.Installation.TempFolderPath = awsTmpPath;
        IronPdf.Installation.CustomDeploymentDirectory = awsTmpPath;
        IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;

        context.Logger.LogLine($"Creating IronPdf.ChromePdfRenderer");

        // Create instance of ChromePdfRenderer and render PDF from URL
        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"; // Name for the PDF file

        // Save the rendered PDF document
        context.Logger.LogLine($"Saving PDF name : {fileName}");
        pdfDoc.SaveAs(fileName);

        // Here you can upload the saved PDF file to anywhere such as AWS S3.
        context.Logger.LogLine($"COMPLETE!");
    }
    catch (Exception e)
    {
        // Log errors if any occur
        context.Logger.LogLine($"[ERROR] FunctionHandler : {e.Message}");
    }

    // Return a new instance of Casing with lower and upper case input strings
    return new Casing(input?.ToLower(), input?.ToUpper());
}

// Casing record to hold lower and upper case strings
public record Casing(string Lower, string Upper);
' Define the function handler for AWS Lambda
Public Function FunctionHandler(ByVal input As String, ByVal context As ILambdaContext) As Casing
	Try
		' Start logging the function process with input details
		context.Logger.LogLine($"START FunctionHandler RequestId: {context.AwsRequestId} Input: {input}")

		Dim awsTmpPath = "/tmp/" ' AWS temporary storage path

		' Optional: Enable debugging for IronPdf
		' IronPdf.Logging.Logger.EnableDebugging = true;
		' IronPdf.Logging.Logger.LogFilePath = awsTmpPath;
		' IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;

		' Set your license key for IronPDF
		IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY"

		' Configuration for IronPDF rendering
		IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
		IronPdf.Installation.DefaultRenderingEngine = IronPdf.Rendering.PdfRenderingEngine.Chrome
		Environment.SetEnvironmentVariable("TEMP", awsTmpPath, EnvironmentVariableTarget.Process)
		Environment.SetEnvironmentVariable("TMP", awsTmpPath, EnvironmentVariableTarget.Process)
		IronPdf.Installation.TempFolderPath = awsTmpPath
		IronPdf.Installation.CustomDeploymentDirectory = awsTmpPath
		IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True

		context.Logger.LogLine($"Creating IronPdf.ChromePdfRenderer")

		' Create instance of ChromePdfRenderer and render PDF from URL
		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" ' Name for the PDF file

		' Save the rendered PDF document
		context.Logger.LogLine($"Saving PDF name : {fileName}")
		pdfDoc.SaveAs(fileName)

		' Here you can upload the saved PDF file to anywhere such as AWS S3.
		context.Logger.LogLine($"COMPLETE!")
	Catch e As Exception
		' Log errors if any occur
		context.Logger.LogLine($"[ERROR] FunctionHandler : {e.Message}")
	End Try

	' Return a new instance of Casing with lower and upper case input strings
	Return New Casing(input?.ToLower(), input?.ToUpper())
End Function

' Casing record to hold lower and upper case strings
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public record Casing(string Lower, string Upper)
$vbLabelText   $csharpLabel
  1. Increase memory and timeout - IronPDF requires more time and memory than the default value of Lambda. This can be configured in aws-lambda-tools-defaults.json. Adjust these values to match your function's needs.

In this example, we set to 512 (MB) and 330 (seconds):

"function-memory-size": 512,
"function-timeout": 330,

The configuration can also be updated using the Lambda console - AWS Lambda Memory Configuration.

  1. Please follow the final part of the documentation to publish and try a Lambda function AWS .NET 5 Lambda Support with Container Images
  2. Lambda function can also be invoked using the Lambda console, AWS Lambda Console or invoked via Visual Studio by using the AWS Toolkit for Visual Studio.

If you receive a "GPU process isn't usable" message, installation may not have been run with admin privileges. Please try running the software again with admin/root privileges. Alternatively, add the following to your Dockerfile:

RUN chmod 755 "runtimes/linux-x64/native/IronCefSubprocess"
Chaknith Bin
Software Engineer
Chaknith works on IronXL and IronBarcode. He has deep expertise in C# and .NET, helping improve the software and support customers. His insights from user interactions contribute to better products, documentation, and overall experience.