Comment exécuter IronPDF for Java dans 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 Zip n'est pas pris en charge, car IronPDF nécessite l'exécution des binaires au moment de l'exécution.
  • Vous devez définir PackageType sur Image. Parce qu'IronPDF for Java ne prend en charge que le déploiement Docker.
  • Vous devez utiliser l'image docker AmazonLinux2.
  • Vous devez définir les paramètres suivants IronPdfEngineWorkingDirectory :
Setting.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
Setting.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
JAVA

Requis car c'est le seul chemin que AWS autorise pour l'environnement d'exécution.

  • Augmentez la taille de /tmp. La valeur par défaut est de 512 Mo. Réglez-le à au moins 1024 Mo.
  • Incluez la dépendance ironpdf-engine-linux-x64 à 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.
  • Fixez la taille de la mémoire Lambda à au moins 1024 Mo.

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

  1. Outils d'installation :

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

    Comment exécuter IronPDF for Java dans AWS Lambda - Figure 1

  3. Config :

    • Type de package : Image

    • Environnement d'exécution : java8 ou java11

    • Modèle SAM : Maven
      Comment exécuter IronPDF for Java dans AWS Lambda - Figure 2

  4. Ajoutez 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. Changez le code de la fonction handleRequest dans App.java en :
import com.ironsoftware.ironpdf.*;
public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent input, final Context context) {
        APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent();
        Settings.setDebug(true); //optional
        Settings.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/")); //requried!
        try {
            context.getLogger().log("RENDER PDF");
            PdfDocument pdf = PdfDocument.renderUrlAsPdf("https://www.google.com");
            context.getLogger().log("RENDER PDF SUCCESS");
            pdf.saveAs("/tmp/my-first-pdf.pdf");
            //Done! Now you can do anything with the pdf such as upload this pdf to S3.
            //return something..
            Map<String, String> headers = new HashMap<>();
            headers.put("Content-Type", "application/json");
            headers.put("X-Custom-Header", "application/json");
            APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent()
                    .withHeaders(headers);
            return response
                    .withStatusCode(200)
                    .withBody("ENJOY IRON-PDF!");
        } catch (Exception e) {
            return response
                    .withBody("{" + e.getMessage() + "}")
                    .withStatusCode(500);
        }
    }
import com.ironsoftware.ironpdf.*;
public APIGatewayProxyResponseEvent handleRequest(final APIGatewayProxyRequestEvent input, final Context context) {
        APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent();
        Settings.setDebug(true); //optional
        Settings.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/")); //requried!
        try {
            context.getLogger().log("RENDER PDF");
            PdfDocument pdf = PdfDocument.renderUrlAsPdf("https://www.google.com");
            context.getLogger().log("RENDER PDF SUCCESS");
            pdf.saveAs("/tmp/my-first-pdf.pdf");
            //Done! Now you can do anything with the pdf such as upload this pdf to S3.
            //return something..
            Map<String, String> headers = new HashMap<>();
            headers.put("Content-Type", "application/json");
            headers.put("X-Custom-Header", "application/json");
            APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent()
                    .withHeaders(headers);
            return response
                    .withStatusCode(200)
                    .withBody("ENJOY IRON-PDF!");
        } catch (Exception e) {
            return response
                    .withBody("{" + e.getMessage() + "}")
                    .withStatusCode(500);
        }
    }
JAVA
  1. Définir la configuration Lambda dans template.yaml :
Globals:
  Function:
    Timeout: 400
    MemorySize: 2048
    EphemeralStorage:
      Size: 1024
#don't touch the other config    
Globals:
  Function:
    Timeout: 400
    MemorySize: 2048
    EphemeralStorage:
      Size: 1024
#don't touch the other config    
YAML
  1. Mettre à jour le fichier Dockerfile comme suit :
  • Remarque : pour Java8, veuillez utiliser les images java8.al2 car elles utilisent AmazonLinux2, mais 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
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
RUN yum install -y 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 overwritten by providing a different command in the template directly.
CMD ["helloworld.App::handleRequest"]
  1. Construire avec :
sam build -u
sam build -u
SHELL
  1. Déployer avec :
sam deploy --guided
sam deploy --guided
SHELL
  1. Profitez d'IronPDF dans AWS Lambda ! Maintenant, votre fonction est prête à l'adresse suivante : Accéder à la console AWS Lambda