How to Run IronPDF for Java in AWS Lambda

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

Important : Paramètres requis

  • Le déploiement par zip n'est pas pris en charge car IronPDF nécessite l'exécution de binaires au moment de l'exécution.
  • Vous devez définir PackageType sur Image car IronPDF for Java ne prend en charge que le déploiement Docker.
  • Vous devez utiliser une image Docker AmazonLinux2.
  • Vous devez définir les paramètres suivants IronPdfEngineWorkingDirectory :
import com.ironsoftware.ironpdf.Settings;
import java.nio.file.Paths;

// Setting the working directory for IronPDF engine
Settings.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
import com.ironsoftware.ironpdf.Settings;
import java.nio.file.Paths;

// Setting the working directory for IronPDF engine
Settings.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
JAVA

Note: Ceci est nécessaire car c'est le seul chemin qu'AWS autorise pour l'environnement d'exécution.

  • Augmentez la taille de /tmp. La valeur par défaut est de 512 Mo. La taille du fichier doit être d'au moins 1024 Mo.
  • Incluez la dépendance ironpdf-engine-linux-x64 dans votre projet :
<dependency>
    <groupId>com.ironsoftware</groupId>
    <artifactId>ironpdf-engine-linux-x64</artifactId>
    <version>2022.xx.x</version>
</dependency>
<dependency>
    <groupId>com.ironsoftware</groupId>
    <artifactId>ironpdf-engine-linux-x64</artifactId>
    <version>2022.xx.x</version>
</dependency>
XML
  • Fixer le délai d'attente Lambda à 330 secondes en raison d'un démarrage lent.
  • Définissez la taille de la mémoire Lambda à au moins 1024 Mo.

Démarrage rapide avec AWS Toolkit pour IntelliJ IDEA (AWS SAM)

  1. Installer des outils:

    En option (pour les tests locaux):

  2. Créer un projet: (Fichier -> Nouveau -> Projet...)

Création d'un projet Lambda AWS

  1. Configuration:
    • Type de paquet : Image
    • Exécution : java8 ou java11
    • Modèle SAM : Maven

AWS Lambda Configuration

  1. Ajouter les dépendances suivantes à votre pom.xml:
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>2.0.3</version>
</dependency>
<dependency>
    <groupId>com.ironsoftware</groupId>
    <artifactId>ironpdf-engine-linux-x64</artifactId>
    <version>2022.11.1</version>
</dependency>
<dependency>
    <groupId>io.perfmark</groupId>
    <artifactId>perfmark-api</artifactId>
    <version>0.26.0</version>
</dependency>
<dependency>
    <groupId>io.grpc</groupId>
    <artifactId>grpc-okhttp</artifactId>
    <version>1.50.2</version>
</dependency>
<dependency>
    <groupId>io.grpc</groupId>
    <artifactId>grpc-netty-shaded</artifactId>
    <version>1.50.2</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>2.0.3</version>
</dependency>
<dependency>
    <groupId>com.ironsoftware</groupId>
    <artifactId>ironpdf-engine-linux-x64</artifactId>
    <version>2022.11.1</version>
</dependency>
<dependency>
    <groupId>io.perfmark</groupId>
    <artifactId>perfmark-api</artifactId>
    <version>0.26.0</version>
</dependency>
<dependency>
    <groupId>io.grpc</groupId>
    <artifactId>grpc-okhttp</artifactId>
    <version>1.50.2</version>
</dependency>
<dependency>
    <groupId>io.grpc</groupId>
    <artifactId>grpc-netty-shaded</artifactId>
    <version>1.50.2</version>
</dependency>
XML
  1. Modifiez le code de la fonction handleRequest dans App.java en:
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.Settings;

import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;

// AWS Lambda function to generate a PDF from a URL using IronPDF.
public class App {
    public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent input, final Context context) {
        APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent();

        // Enable debugging for IronPDF (optional)
        Settings.setDebug(true);

        // Set the working directory for the IronPDF engine (required)
        Settings.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));

        try {
            context.getLogger().log("RENDER PDF");

            // Render the PDF from a URL
            PdfDocument pdf = PdfDocument.renderUrlAsPdf("https://www.google.com");

            context.getLogger().log("RENDER PDF SUCCESS");

            // Save the generated PDF to a file
            pdf.saveAs("/tmp/my-first-pdf.pdf");

            // Set HTTP response headers
            Map<String, String> headers = new HashMap<>();
            headers.put("Content-Type", "application/json");
            headers.put("X-Custom-Header", "application/json");

            // Return the successful response
            return response
                    .withHeaders(headers)
                    .withStatusCode(200)
                    .withBody("ENJOY IRON-PDF!");

        } catch (Exception e) {
            // Return the error response
            return response
                    .withBody("{" + e.getMessage() + "}")
                    .withStatusCode(500);
        }
    }
}
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.Settings;

import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;

// AWS Lambda function to generate a PDF from a URL using IronPDF.
public class App {
    public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent input, final Context context) {
        APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent();

        // Enable debugging for IronPDF (optional)
        Settings.setDebug(true);

        // Set the working directory for the IronPDF engine (required)
        Settings.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));

        try {
            context.getLogger().log("RENDER PDF");

            // Render the PDF from a URL
            PdfDocument pdf = PdfDocument.renderUrlAsPdf("https://www.google.com");

            context.getLogger().log("RENDER PDF SUCCESS");

            // Save the generated PDF to a file
            pdf.saveAs("/tmp/my-first-pdf.pdf");

            // Set HTTP response headers
            Map<String, String> headers = new HashMap<>();
            headers.put("Content-Type", "application/json");
            headers.put("X-Custom-Header", "application/json");

            // Return the successful response
            return response
                    .withHeaders(headers)
                    .withStatusCode(200)
                    .withBody("ENJOY IRON-PDF!");

        } catch (Exception e) {
            // Return the error response
            return response
                    .withBody("{" + e.getMessage() + "}")
                    .withStatusCode(500);
        }
    }
}
JAVA
  1. Set Lambda config in template.yaml:
Globals:
  Function:
    Timeout: 400
    MemorySize: 2048
    EphemeralStorage:
      Size: 1024
# Do not modify other configurations
Globals:
  Function:
    Timeout: 400
    MemorySize: 2048
    EphemeralStorage:
      Size: 1024
# Do not modify other configurations
YAML
  1. Mise à jour du fichier Docker:
    • Remarque : pour Java 8, utilisez les images java8.al2 car elles utilisent AmazonLinux2, alors que java8 utilise l'ancien AmazonLinux.
FROM public.ecr.aws/sam/build-java8.al2:latest as build-image
WORKDIR "/task"
COPY src/ src/
COPY pom.xml ./
RUN mvn -q clean install
RUN mvn dependency:copy-dependencies -DincludeScope=compile

FROM public.ecr.aws/lambda/java:8.al2
RUN yum update -y
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 libxkbcommon \
    amazon-linux-extras
RUN amazon-linux-extras install epel -y
RUN yum install -y libgdiplus
RUN chmod 777 /tmp/
COPY --from=build-image /task/target/classes /var/task/
COPY --from=build-image /task/target/dependency /var/task/lib

# Command can be overridden by providing a different command in the template directly.
CMD ["helloworld.App::handleRequest"]
  1. Construire le projet:
sam build -u
sam build -u
SHELL
  1. Déployer le projet:
sam deploy --guided
sam deploy --guided
SHELL
  1. Profitez d'IronPDF dans AWS Lambda! Maintenant, votre fonction est en direct à : Accéder à la console AWS Lambda

Questions Fréquemment Posées

Comment puis-je créer et modifier des PDF en Java sur AWS Lambda ?

Vous pouvez utiliser IronPDF pour Java dans AWS Lambda en configurant l'environnement avec une image Docker 'AmazonLinux2' et en configurant les réglages nécessaires tels que l'augmentation de la taille du répertoire /tmp et la configuration du timeout Lambda.

Pourquoi ne puis-je pas utiliser le déploiement Zip pour le traitement des PDF sur AWS Lambda ?

Le déploiement Zip n'est pas pris en charge pour IronPDF dans AWS Lambda parce qu'il nécessite une exécution binaire au moment de l'exécution. Le 'PackageType' doit être réglé sur 'Image' pour le déploiement Docker.

Quelles sont les configurations requises pour le répertoire de travail d'IronPDF sur AWS Lambda ?

Définissez le répertoire de travail pour le moteur IronPDF sur '/tmp/' et assurez-vous que la taille du répertoire est augmentée à au moins 1024 Mo pour gérer efficacement le traitement des PDF.

Quelles dépendances devraient être incluses pour la génération de PDF dans un projet Maven sur AWS Lambda ?

Incluez la dépendance 'ironpdf-engine-linux-x64' dans le pom.xml de votre projet Maven, ainsi que d'autres bibliothèques nécessaires pour permettre la création et la modification de PDF.

Comment puis-je rendre un PDF à partir d'une URL sur AWS Lambda en utilisant Java ?

Utilisez la méthode IronPDF PdfDocument.renderUrlAsPdf pour convertir une URL en document PDF, et enregistrez-le avec la méthode pdf.saveAs.

Quelles sont les recommandations pour les réglages de timeout et de mémoire de Lambda pour le traitement des PDF ?

Réglez le timeout Lambda à 330 secondes et allouez au moins 1024 Mo de mémoire pour répondre aux besoins de traitement d'IronPDF sur AWS Lambda.

Quels environnements d'exécution peuvent être utilisés pour exécuter des opérations PDF en Java sur AWS Lambda ?

IronPDF prend en charge les environnements d'exécution 'java8' et 'java11' pour exécuter des tâches de traitement PDF sur AWS Lambda.

Comment puis-je commencer rapidement avec AWS Toolkit pour IntelliJ IDEA pour le traitement de PDF en Java ?

Installez IntelliJ IDEA, AWS Toolkit, SAM CLI, et Docker. Facultativement, pour les tests locaux, configurez Java 8 et Maven, puis suivez le guide de démarrage rapide pour créer et configurer votre projet.

Quel est le processus pour déployer un projet de traitement de PDF Java sur AWS Lambda en utilisant SAM CLI ?

Tout d'abord, construisez votre projet avec la commande sam build -u, puis déployez-le en utilisant sam deploy --guided pour configurer efficacement votre traitement de PDF sur AWS Lambda.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite
Prêt à commencer?
Version : 2025.11 vient de sortir