如何在 AWS Lambda 中运行 IronPDF for Java
2023年一月22日
更新 2024年十月20日
This article was translated from English: Does it need improvement?
TranslatedView the article in English
重要:必需的设置
- Zip 部署不受支持,因为 IronPDF 在运行时需要执行二进制文件。
- 您必须将
PackageType设置为Image。 因为 IronPDF for Java 只支持 Docker 部署。 - 您必须使用
AmazonLinux2docker 镜像。 - 您必须设置以下IronPdfEngineWorkingDirectory:
Setting.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));Setting.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));JAVA
必需的,因为这是 AWS 允许的唯一执行环境路径。
- 增加
/tmp大小,默认值为 512 MB。 请将其设置为至少1024 MB。 - 将
ironpdf-engine-linux-x64依赖项包含到您的项目中:
<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
- 将 Lambda 超时设置为 330 秒,因为启动缓慢。
- 将 Lambda 内存大小设置为至少 1024 MB。
使用 IntelliJ IDEA 的 AWS Toolkit 快速开始 (AWS SAM)
安装工具:
IntelliJ IDEA - 下载 IntelliJ IDEA
AWS 工具包 - 设置 JetBrains 的 AWS 工具包
SAM CLI - 安装用于无服务器应用程序的 SAM CLI
- Docker - 安装 Docker 社区版
您在本地测试中可能还需要以下内容:
Java8 - 下载 Java SE Development Kit 8
- Maven - Maven 安装指南
创建项目。 (
文件->新建->项目...)配置:
包类型:
Image运行时间:
java8或java11- SAM 模板:
Maven
- 将以下依赖项添加到您的
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
- 将
App.java中的handleRequest函数代码更改为:
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
- 在
template.yaml中设置Lambda配置:
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
- 将 Dockerfile 更新为以下内容:
- 注意:对于 Java8,请使用
java8.al2镜像,因为它使用AmazonLinux2,而java8使用旧的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"]- 一起建造:
sam build -usam build -uSHELL
- 用以下设备部署
sam deploy --guidedsam deploy --guidedSHELL
- 在AWS Lambda中享受IronPDF! 现在您的函数已上线:访问 AWS Lambda 控制台





