Como executar o IronPDF for Java no AWS Lambda

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

Importante: Configurações obrigatórias

  • A implantação em formato Zip não é suportada, pois o IronPDF requer a execução de binários em tempo de execução.
  • Você deve definir PackageType para Image porque o IronPDF for Java suporta apenas implantação em Docker.
  • Você deve usar uma imagem Docker AmazonLinux2.
  • Você deve definir o seguinte 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

Observação: Isso é necessário porque é o único caminho que a AWS permite para o ambiente de execução.

  • Aumente o tamanho do arquivo /tmp. O valor padrão é 512 MB. Por favor, defina para pelo menos 1024 MB.
  • Inclua a dependência ironpdf-engine-linux-x64 em seu projeto:
<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
  • Defina o tempo limite do Lambda para 330 segundos devido a uma inicialização lenta.
  • Defina o tamanho da memória Lambda para pelo menos 1024 MB.

Guia de Início Rápido com o AWS Toolkit para IntelliJ IDEA (AWS SAM)

  1. Instalar ferramentas:

    Opcional (para testes locais):

  2. Criar projeto: (File -> New -> Project...)

Criação de Projeto AWS Lambda

  1. Configuração:
    • Tipo de pacote: Image
    • Tempo de execução: java8 ou java11
    • Modelo SAM: Maven

Configuração do AWS Lambda

  1. Adicione as seguintes dependências ao seu 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. Altere o código da função handleRequest em App.java para:
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. Configure o Lambda em 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. Atualizar Dockerfile:
    • Nota: Para Java 8, use imagens java8.al2 porque elas usam AmazonLinux2, enquanto java8 usa o antigo 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. Desenvolva o projeto:
sam build -u
sam build -u
SHELL
  1. Implante o projeto:
sam deploy --guided
sam deploy --guided
SHELL
  1. Aproveite o IronPDF no AWS Lambda! Agora sua função está ativa em: Acesse o Console do AWS Lambda

Perguntas frequentes

Como posso criar e editar PDFs em Java no AWS Lambda?

Você pode usar o IronPDF for Java no AWS Lambda configurando o ambiente com uma imagem Docker 'AmazonLinux2' e definindo as configurações necessárias, como aumentar o tamanho do diretório /tmp e definir o tempo limite do Lambda.

Por que não consigo usar o Zip Deployment para processamento de PDF no AWS Lambda?

A implantação em formato Zip não é compatível com o IronPDF no AWS Lambda, pois requer a execução de binários em tempo de execução. O 'PackageType' deve ser definido como 'Image' para a implantação em Docker.

Quais são as configurações necessárias para o diretório de trabalho do IronPDF no AWS Lambda?

Defina o diretório de trabalho do mecanismo IronPDF como '/tmp/' e certifique-se de que o tamanho do diretório seja aumentado para pelo menos 1024 MB para lidar com o processamento de PDF de forma eficiente.

Quais dependências devem ser incluídas para a geração de PDFs em um projeto Maven no AWS Lambda?

Inclua a dependência 'ironpdf-engine-linux-x64' no arquivo pom.xml do seu projeto Maven, juntamente com outras bibliotecas necessárias para habilitar a criação e edição de PDFs.

Como posso renderizar um PDF a partir de uma URL no AWS Lambda usando Java?

Utilize o método ` PdfDocument.renderUrlAsPdf do IronPDF para converter uma URL em um documento PDF e salve-o com o método pdf.saveAs .

Quais são as configurações recomendadas de tempo limite e memória do Lambda para processamento de PDF?

Defina o tempo limite do Lambda para 330 segundos e aloque pelo menos 1024 MB de memória para atender às necessidades de processamento do IronPDF no AWS Lambda.

Quais ambientes de execução podem ser usados para executar operações de PDF em Java no AWS Lambda?

O IronPDF oferece suporte aos ambientes de execução 'java8' e 'java11' para executar tarefas de processamento de PDF no AWS Lambda.

Como posso começar rapidamente a usar o AWS Toolkit para IntelliJ IDEA para processamento de PDF em Java?

Instale o IntelliJ IDEA, o AWS Toolkit, o SAM CLI e o Docker. Opcionalmente, para testes locais, configure o Java 8 e o Maven e, em seguida, siga o guia de início rápido para criar e configurar seu projeto.

Qual é o processo para implantar um projeto de processamento de PDF em Java no AWS Lambda usando a CLI do SAM?

Primeiro, compile seu projeto com o comando sam build -u , depois implante-o usando sam deploy --guided para configurar efetivamente o processamento de PDF no AWS Lambda.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Pronto para começar?
Versão: 2026.4 acaba de ser lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas?
executar um exemplo Veja seu HTML se transformar em um PDF.