如何在AWS Lambda的Node.js镜像中安装pdf2htmlEX?
解决Node.js Lambda容器镜像中运行pdf2htmlEX的可行方案
方案一:基于AWS Lambda Node.js镜像手动编译pdf2htmlEX
AWS Lambda Node.js镜像基于Amazon Linux 2023,不支持apt-get,但可通过dnf安装编译依赖,手动编译pdf2htmlEX:
# 基础镜像 FROM public.ecr.aws/lambda/nodejs:20 # 安装编译依赖 RUN dnf install -y git make gcc-c++ poppler-devel cmake boost-devel libpng-devel jpeg-devel tiff-devel fontconfig-devel freetype-devel # 克隆pdf2htmlEX源码并编译安装 RUN git clone --depth=1 https://github.com/coolwanglu/pdf2htmlEX.git /tmp/pdf2htmlEX \ && mkdir -p /tmp/pdf2htmlEX/build \ && cd /tmp/pdf2htmlEX/build \ && cmake .. \ && make \ && make install # 清理编译依赖,减小镜像体积 RUN dnf remove -y git make gcc-c++ cmake && dnf clean all && rm -rf /tmp/pdf2htmlEX # 安装Lambda运行时接口客户端 RUN npm install aws-lambda-ric # 复制Lambda函数代码 COPY app.js ${LAMBDA_TASK_ROOT} # 设置Lambda启动命令 CMD ["app.handler"]
方案二:用Amazon Linux 2作为基础镜像构建完整环境
Amazon Linux 2支持yum,能更方便处理依赖,同时兼容Lambda运行时:
# 基础镜像 FROM amazonlinux:2 # 安装Node.js 20 RUN curl -fsSL https://rpm.nodesource.com/setup_20.x | bash - \ && yum install -y nodejs # 安装pdf2htmlEX依赖及编译工具 RUN yum install -y git make gcc-c++ poppler-devel cmake boost-devel libpng-devel libjpeg-turbo-devel libtiff-devel fontconfig-devel freetype-devel # 编译安装pdf2htmlEX RUN git clone --depth=1 https://github.com/coolwanglu/pdf2htmlEX.git /tmp/pdf2htmlEX \ && mkdir -p /tmp/pdf2htmlEX/build \ && cd /tmp/pdf2htmlEX/build \ && cmake .. \ && make \ && make install # 清理依赖 RUN yum remove -y git make gcc-c++ cmake && yum clean all && rm -rf /tmp/pdf2htmlEX # 安装Lambda运行时接口客户端和模拟器(可选,本地调试用) RUN npm install aws-lambda-ric aws-lambda-runtime-interface-emulator # 设置Lambda工作目录 WORKDIR /var/task # 复制函数代码 COPY app.js . # 设置Lambda启动命令 CMD ["npx", "aws-lambda-ric", "app.handler"]
方案三:预编译pdf2htmlEX二进制文件(推荐,减小镜像构建时间)
在本地或CI环境中编译好适配Amazon Linux的pdf2htmlEX二进制,直接复制到AWS Lambda Node.js镜像中:
- 本地编译二进制(需在Amazon Linux 2/2023环境执行,或用Docker模拟):
# 启动Amazon Linux 2容器 docker run -it --rm amazonlinux:2 bash # 在容器内执行编译步骤 yum install -y git make gcc-c++ poppler-devel cmake boost-devel libpng-devel libjpeg-turbo-devel libtiff-devel fontconfig-devel freetype-devel git clone --depth=1 https://github.com/coolwanglu/pdf2htmlEX.git /tmp/pdf2htmlEX mkdir -p /tmp/pdf2htmlEX/build cd /tmp/pdf2htmlEX/build cmake .. make # 将二进制文件复制到本地 docker cp <container-id>:/usr/local/bin/pdf2htmlEX ./pdf2htmlEX
- 构建Lambda镜像:
FROM public.ecr.aws/lambda/nodejs:20 # 复制预编译的pdf2htmlEX二进制 COPY pdf2htmlEX /usr/local/bin/ RUN chmod +x /usr/local/bin/pdf2htmlEX # 安装Lambda运行时接口客户端 RUN npm install aws-lambda-ric # 复制函数代码 COPY app.js ${LAMBDA_TASK_ROOT} CMD ["app.handler"]
关键注意事项
- pdf2htmlEX依赖的字体文件:Lambda环境默认字体有限,若转换PDF时出现字体问题,需将所需字体复制到镜像的
/usr/share/fonts目录。 - 镜像大小优化:编译完成后务必清理编译依赖和源码,避免镜像体积过大影响Lambda冷启动速度。
内容的提问来源于stack exchange,提问作者bytrangle
相关产品推荐
相关产品推荐

