Using IronPdf to create PDFS on AWS Lambda

1. Create AWS Lambda with container template (.Net5)

Please follow the top part of this official document from AWS.

2. Add package dependencies

These dependencies is require for Chrome in this AWS environment. Please modify Docker file to be like this.


WORKDIR /var/task

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

# This COPY command copies the .NET Lambda project's build artifacts from the host machine into the image. 
# The source of the COPY should match where the .NET Lambda project publishes its build artifacts. If the Lambda function is being built 
# with the AWS .NET Lambda Tooling, the `--docker-host-build-output-dir` switch controls where the .NET Lambda project
# will be built. The .NET Lambda project templates default to having `--docker-host-build-output-dir`
# set in the aws-lambda-tools-defaults.json file to "bin/Release/lambda-publish".
# Alternatively Docker multi-stage build could be used to build the .NET Lambda project inside the image.
# For more information on this approach checkout the project's file.
COPY "bin/Release/lambda-publish"  .

3. Add Iron Pdf (Linux) Nuget package

Install IronPdf.Linux

  1. In Solution Explorer, right-click References, Manage NuGet Packages
  2. Select Browse and search IronPdf.Linux
  3. Select the package and install.

4. Modify FunctionHandler code

this example will create pdf from webpage and save to /tmp . In order to view this pdf you must upload this pdf to another service such as S3. (you can find an offical aws example here

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

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

                //[optional] enable logging (please uncomment these code if you face any problem)
                //IronPdf.Logging.Logger.EnableDebugging = true;
                //IronPdf.Logging.Logger.LogFilePath = awsTmpPath;
                //IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;

                //set your license key
                IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";

                //set ChromeGpuMode to Disabled
                IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
                //set DefaultRenderingEngine to Chrome
                IronPdf.Installation.DefaultRenderingEngine = IronPdf.Rendering.PdfRenderingEngine.Chrome;

                //set IronPDF Temp Path
                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("");

                var guid = Guid.NewGuid();
                var fileName = $"/tmp/{input}_{guid}.pdf"; //save file to /tmp

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

                //here you can upload saved pdf file to anywhere such as S3. 

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

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

    public record Casing(string Lower, string Upper);

5. Increase Memory and Timeout

IronPdf require more time and memory than the default value of Lambda. you can config at aws-lambda-tools-defaults.json. Please adjust this to match you function. In this example we will set to 512 (mb) and 330 (seconds)

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

You also can update this config using lambda console.

6. Publish

Please follow the bottom part of this document to publish and try your Lambda function.

7. Try it out!

You can invoke lambda function by using lambda console or invoke via visual studio by using AWS Toolkit for Visual Studio.