So führen Sie IronPDF for Java in AWS Lambda aus

Darrius Serrant
Darrius Serrant
22. Januar 2023
Aktualisiert 20. Oktober 2024
Teilen Sie:
This article was translated from English: Does it need improvement?
Translated
View the article in English

Wichtig! Erforderliche Einstellungen

  • Zip-Deployment wird nicht unterstützt, da IronPDF die Ausführung von Binärdateien zur Laufzeit erfordert.
  • Sie müssen PackageType auf Image setzen. Denn IronPDF for Java unterstützt nur die Docker-Bereitstellung.
  • Sie müssen das Docker-Image AmazonLinux2 verwenden.
  • Sie müssen das folgende IronPdfEngineWorkingDirectory einstellen:
Setting.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
JAVA

Erforderlich, da dies der einzige Pfad ist, den AWS für die Ausführungsumgebung zulässt.

  • Erhöhen Sie die Größe von /tmp, der Standardwert ist 512 MB. Bitte stellen Sie ihn auf mindestens 1024 MB ein.
  • Fügen Sie die Abhängigkeit ironpdf-engine-linux-x64 in Ihr Projekt ein:
 <dependency>
    <groupId>com.ironsoftware</groupId>
    <artifactId>ironpdf-engine-linux-x64</artifactId>
    <version>2022.xx.x</version>
</dependency>
XML
  • Setzen Sie die Lambda-Zeitüberschreitung wegen des langsamen Starts auf 330 Sekunden.
  • Setzen Sie die Lambda-Speichergröße auf mindestens 1024 MB.

Schnellstart mit AWS Toolkit für IntelliJ IDEA (AWS SAM)

  1. Werkzeuge installieren:
  1. Projekt erstellen. (datei" -> "Neu" -> "Projekt"..)

    So führen Sie IronPDF for Java in AWS Lambda aus - Abbildung 1

  2. Konfig:

    • Pakettyp : Bild

    • Laufzeit: java8 oder java11

    • SAM Vorlage : Maven
      So führen Sie IronPDF for Java in AWS Lambda aus - Abbildung 2

  3. Fügen Sie die folgenden Abhängigkeiten zu Ihrer pom.xml hinzu:
<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. Ändern Sie den Code der Funktion handleRequest in App.java in:
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. Lambda-Konfiguration in template.yaml festlegen:
Globals:
  Function:
    Timeout: 400
    MemorySize: 2048
    EphemeralStorage:
      Size: 1024
#don't touch the other config    
YAML
  1. Aktualisieren Sie das Dockerfile wie folgt:
  • Hinweis: Für Java8 verwenden Sie bitte java8.al2-Images, weil es AmazonLinux2 verwendet, aber java8 verwendet das alte 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. Bauen Sie mit:
sam build -u
  1. Einsetzen mit:
sam deploy --guided
  1. Genießen Sie IronPDF in AWS Lambda! Jetzt ist Ihre Funktion bei:Zugang zur AWS Lambda-Konsole
Darrius Serrant
Full Stack Software Engineer (WebOps)

Darrius Serrant hat einen Bachelor-Abschluss in Informatik von der University of Miami und arbeitet als Full Stack WebOps Marketing Engineer bei Iron Software. Schon in jungen Jahren vom Programmieren angezogen, sah er das Rechnen sowohl als mysteriös als auch zugänglich an, was es zum perfekten Medium für Kreativität und Problemlösung machte.

Bei Iron Software genießt Darrius es, neue Dinge zu erschaffen und komplexe Konzepte zu vereinfachen, um sie verständlicher zu machen. Als einer unserer ansässigen Entwickler hat er sich auch freiwillig gemeldet, um Schüler zu unterrichten und sein Fachwissen mit der nächsten Generation zu teilen.

Für Darrius ist seine Arbeit erfüllend, weil sie geschätzt wird und einen echten Einfluss hat.