首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在AWS Lambda上安装Poppler

如何在AWS Lambda上安装Poppler
EN

Stack Overflow用户
提问于 2018-11-20 23:58:45
回答 4查看 7.7K关注 0票数 9

我必须在AWS中的Python函数上运行pdf2image,但是它需要在机器上安装poppler和poppler。

我试着在很多不同的地方搜索,但是没有找到任何使用lambda函数做过这件事的人。

你们中有谁知道如何生成poppler二进制文件,把它放到我的Lambda包中,并告诉Lambda使用它呢?

谢谢你们所有人。

EN

回答 4

Stack Overflow用户

发布于 2021-10-21 08:35:52

我的方法是使用AWS 2映像作为基础,以确保与Lambda环境最大程度的兼容性,在容器中编译openjpeg和poppler,并构建包含所需二进制文件和库的zip,然后将其用作一个层。

这使您能够在它自己的lambda中编写代码,该lambda将poppler依赖项作为一个层,简化了构建和部署。

该层的内容将被解压到/opt/中。这意味着内容将自动可用,因为默认情况下,在lambda环境中。

  • $PATH/usr/local/bin:/usr/bin/:/bin:/opt/bin
  • $LD_LIBRARY_PATH/lib64:/usr/lib64:$LAMBDA_RUNTIME_DIR:$LAMBDA_RUNTIME_DIR/lib:$LAMBDA_TASK_ROOT:$LAMBDA_TASK_ROOT/lib:/opt/lib

Dockerfile

代码语言:javascript
复制
# https://www.petewilcock.com/using-poppler-pdftotext-and-other-custom-binaries-on-aws-lambda/

ARG POPPLER_VERSION="21.10.0"
ARG POPPLER_DATA_VERSION="0.4.11"
ARG OPENJPEG_VERSION="2.4.0"


FROM amazonlinux:2

ARG POPPLER_VERSION
ARG POPPLER_DATA_VERSION
ARG OPENJPEG_VERSION

WORKDIR /root

RUN yum update -y
RUN yum install -y \
   cmake \
   cmake3 \
   fontconfig-devel \
   gcc \
   gcc-c++ \
   gzip \
   libjpeg-devel \
   libpng-devel \
   libtiff-devel \
   make \
   tar \
   xz \
   zip

RUN curl -o poppler.tar.xz https://poppler.freedesktop.org/poppler-${POPPLER_VERSION}.tar.xz
RUN tar xf poppler.tar.xz
RUN curl -o poppler-data.tar.gz https://poppler.freedesktop.org/poppler-data-${POPPLER_DATA_VERSION}.tar.gz
RUN tar xf poppler-data.tar.gz
RUN curl -o openjpeg.tar.gz https://codeload.github.com/uclouvain/openjpeg/tar.gz/refs/tags/v${OPENJPEG_VERSION}
RUN tar xf openjpeg.tar.gz

WORKDIR poppler-data-${POPPLER_DATA_VERSION}
RUN make install

WORKDIR /root
RUN mkdir openjpeg-${OPENJPEG_VERSION}/build
WORKDIR openjpeg-${OPENJPEG_VERSION}/build
RUN cmake .. -DCMAKE_BUILD_TYPE=Release
RUN make
RUN make install

WORKDIR /root
RUN mkdir poppler-${POPPLER_VERSION}/build
WORKDIR poppler-${POPPLER_VERSION}/build
RUN cmake3 .. -DCMAKE_BUILD_TYPE=release -DBUILD_GTK_TESTS=OFF -DBUILD_QT5_TESTS=OFF -DBUILD_QT6_TESTS=OFF \
    -DBUILD_CPP_TESTS=OFF -DBUILD_MANUAL_TESTS=OFF -DENABLE_BOOST=OFF -DENABLE_CPP=OFF -DENABLE_GLIB=OFF \
    -DENABLE_GOBJECT_INTROSPECTION=OFF -DENABLE_GTK_DOC=OFF -DENABLE_QT5=OFF -DENABLE_QT6=OFF \
    -DENABLE_LIBOPENJPEG=openjpeg2 -DENABLE_CMS=none  -DBUILD_SHARED_LIBS=OFF
RUN make
RUN make install


WORKDIR /root
RUN mkdir -p package/{lib,bin,share}
RUN cp -d /usr/lib64/libexpat* package/lib
RUN cp -d /usr/lib64/libfontconfig* package/lib
RUN cp -d /usr/lib64/libfreetype* package/lib
RUN cp -d /usr/lib64/libjbig* package/lib
RUN cp -d /usr/lib64/libjpeg* package/lib
RUN cp -d /usr/lib64/libpng* package/lib
RUN cp -d /usr/lib64/libtiff* package/lib
RUN cp -d /usr/lib64/libuuid* package/lib
RUN cp -d /usr/lib64/libz* package/lib
RUN cp -rd /usr/local/lib/* package/lib
RUN cp -rd /usr/local/lib64/* package/lib
RUN cp -d /usr/local/bin/* package/bin
RUN cp -rd /usr/local/share/poppler package/share

WORKDIR package
RUN zip -r9 ../package.zip *

为了逃跑..。

代码语言:javascript
复制
docker build -t poppler .
docker run --name poppler -d -t poppler cat
docker cp poppler:/root/package.zip .

然后使用控制台或aws将package.zip作为一个层上载。

票数 3
EN

Stack Overflow用户

发布于 2022-04-25 06:35:57

我使用了预建的AWS层https://github.com/jeylabs/aws-lambda-poppler-layer/releases,它起作用了!

如果您只想运行该函数,可以使用此解决方案,但是如果您希望指定版本并具有更多的控制,我建议使用容器映像解决方案。

票数 2
EN

Stack Overflow用户

发布于 2020-04-03 14:30:43

使用Docker在Lambda上简单地构建Poppler的说明

为了在Lambda上放置Poppler,我们将构建一个压缩文件夹,并将其添加为一个层。在运行Amazon 2的EC2实例上执行以下步骤(t2micro足够多)。

  1. 安装机器

在EC2机器上安装对接器。指令这里

代码语言:javascript
复制
mkdir -p poppler_binaries
  1. 创建Dockerfile

使用此链接或从下面复制/粘贴。

代码语言:javascript
复制
FROM ubuntu:18.04

# Installing dependencies
RUN apt update
RUN apt-get update
RUN apt-get install -y locate \
                       libopenjp2-7 \
                       poppler-utils

RUN rm -rf /poppler_binaries;  mkdir /poppler_binaries;
RUN updatedb
RUN cp $(locate libpoppler.so) /poppler_binaries/.
RUN cp $(which pdftoppm) /poppler_binaries/.
RUN cp $(which pdfinfo) /poppler_binaries/.
RUN cp $(which pdftocairo) /poppler_binaries/.
RUN cp $(locate libjpeg.so.8 ) /poppler_binaries/.
RUN cp $(locate libopenjp2.so.7 ) /poppler_binaries/.
RUN cp $(locate libpng16.so.16 ) /poppler_binaries/.
RUN cp $(locate libz.so.1 ) /poppler_binaries/.
  1. 构建Docker图像并创建一个zip文件

运行下面的命令将在主目录中生成一个zip文件。

代码语言:javascript
复制
docker build -t poppler-build .
# Run the container
docker run -d --name poppler-build-cont poppler-build sleep 20 
#docker exec poppler-build-cont 
sudo docker cp poppler-build-cont:/poppler_binaries .
# Cleaning up
docker kill poppler-build-cont
docker rm poppler-build-cont
docker image rm poppler-build
cd poppler_binaries
zip -r9 ..poppler.zip .
cd ..
  1. 创建并添加Lambda层

下载您的zip文件或将其上传到S3。头到Lambda控制台页面创建一个层,然后将它添加到您的函数中。有关图层这里的信息。

  1. 向Lambda添加环境变量

为了避免向zip中添加不必要的文件夹结构,如这里所述。我们将添加一个环境变量来指向我们的依赖项。

代码语言:javascript
复制
PYTHONPATH: /opt/

还有维奥拉!您现在有一个工作的Lambda功能与波卜勒!

注:归功于这两篇文章,这两篇文章帮助我把这篇文章拼凑在一起。

警告:不要尝试将pdf2image添加到同一层。我不知道为什么,但当他们在同一层,pdf2image找不到波普尔。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53403399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档