Jak uruchomic IronPDF for Java w AWS Lambda

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

Wazne: Wymagane ustawienia

  • Zip Deployment nie jest wspierane, poniewaz IronPDF wymaga wykonania binariów w czasie rzeczywistym.
  • Nalezy ustawic PackageType na Image, poniewaz IronPDF for Java wspiera tylko wdrazanie w Dockerze.
  • Nalezy uzyc obrazu Docker AmazonLinux2.
  • Nalezy ustawic nastepujacy 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

Uwaga: Jest to wymagane, poniewaz jest to jedyna sciezka, ktora AWS pozwala na uzycie w srodowisku wykonawczym.

  • Zwiekszyc rozmiar /tmp. Domyslna wartosc wynosi 512 MB. Ustaw to na co najmniej 1024 MB.
  • Dolacz zaleznosc ironpdf-engine-linux-x64 do swojego projektu:
<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
  • Ustaw timeout Lambda na 330 sekund z powodu wolnego startu.
  • Ustaw rozmiar pamieci Lambda na co najmniej 1024 MB.

Szybki start z AWS Toolkit dla IntelliJ IDEA (AWS SAM)

  1. Instalacja narzedzi:

    Opcjonalnie (do lokalnych testów):

  2. Utwórz projekt: (File -> New -> Project...)

Tworzenie projektu AWS Lambda

  1. Konfiguracja:
    • Typ pakietu: Image
    • Srodowisko wykonawcze: java8 lub java11
    • Szablon SAM: Maven

Konfiguracja AWS Lambda

  1. Dodaj nastepujace zaleznosci do swojego 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. Zmien kod funkcji handleRequest w App.java na:
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. Ustaw konfiguracje Lambda w 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. Zaktualizuj plik Dockerfile:
    • Uwaga: Dla Java 8 uzywaj obrazów java8.al2, poniewaz uzywaja AmazonLinux2, podczas gdy java8 uzywa starego 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. Zbuduj projekt:
sam build -u
sam build -u
SHELL
  1. Wdróz projekt:
sam deploy --guided
sam deploy --guided
SHELL
  1. Ciesz sie IronPDF w AWS Lambda! Twoja funkcja jest teraz dostepna pod adresem: Uzyskaj dostep do konsoli AWS Lambda

Często Zadawane Pytania

Jak mogę tworzyć i edytować pliki PDF w Javie na AWS Lambda?

Możesz używać IronPDF for Java w AWS Lambda, konfigurując środowisko za pomocą obrazu Docker „AmazonLinux2” i wprowadzając niezbędne ustawienia, takie jak zwiększenie rozmiaru katalogu /tmp oraz ustawienie limitu czasu Lambda.

Dlaczego nie mogę używać wdrożenia ZIP do przetwarzania plików PDF w AWS Lambda?

Wdrożenie w formacie ZIP nie jest obsługiwane dla IronPDF w AWS Lambda, ponieważ wymaga ono wykonywania plików binarnych w czasie wykonywania. W przypadku wdrożenia w Dockerze parametr „PackageType” musi być ustawiony na „Image”.

Jakie są wymagane konfiguracje katalogu roboczego IronPDF w AWS Lambda?

Ustaw katalog roboczy silnika IronPDF na „/tmp/” i upewnij się, że rozmiar katalogu został zwiększony do co najmniej 1024 MB, aby zapewnić wydajne przetwarzanie plików PDF.

Jakie zależności należy uwzględnić w celu generowania plików PDF w projekcie Maven na AWS Lambda?

Dodaj zależność „IronPDF-engine-linux-x64” do pliku pom.xml swojego projektu Maven wraz z innymi bibliotekami niezbędnymi do tworzenia i edycji plików PDF.

Jak mogę wygenerować plik PDF z adresu URL w AWS Lambda przy użyciu języka Java?

Użyj metody IronPDF PdfDocument.renderUrlAsPdf, aby przekonwertować adres URL na dokument PDF, a następnie zapisz go za pomocą metody pdf.saveAs.

Jakie są zalecane ustawienia limitu czasu i pamięci Lambda dla przetwarzania plików PDF?

Ustaw limit czasu Lambda na 330 sekund i przydziel co najmniej 1024 MB pamięci, aby zaspokoić potrzeby przetwarzania IronPDF w AWS Lambda.

Jakie środowiska uruchomieniowe można wykorzystać do wykonywania operacji na plikach PDF w Javie na AWS Lambda?

IronPDF obsługuje środowiska uruchomieniowe „java8” i „java11” do wykonywania zadań związanych z przetwarzaniem plików PDF w AWS Lambda.

Jak szybko rozpocząć pracę z AWS Toolkit for IntelliJ IDEA w celu przetwarzania plików PDF w języku Java?

Zainstaluj IntelliJ IDEA, AWS Toolkit, SAM CLI i Docker. Opcjonalnie, w celu przeprowadzenia lokalnych testów, skonfiguruj Java 8 i Maven, a następnie postępuj zgodnie z przewodnikiem szybkiego startu, aby utworzyć i skonfigurować swój projekt.

Jak wygląda proces wdrażania projektu przetwarzania plików PDF w Javie na AWS Lambda przy użyciu SAM CLI?

Najpierw skompiluj projekt za pomocą polecenia sam build -u, a następnie wdróż go za pomocą sam deploy --guided, aby skutecznie skonfigurować przetwarzanie plików PDF w AWS Lambda.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu?
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.