【问题标题】:Install libreoffice on lambda nodejs 12.0 but can not run command when deployed在 lambda nodejs 12.0 上安装 libreoffice 但部署时无法运行命令
【发布时间】:2021-11-19 10:29:53
【问题描述】:

我尝试将 libreoffice 安装到 lambda 函数的 docker 映像。当我在本地机器上运行它时它工作正常,但是当将图像部署到 lambda 函数时,它一直说“无法从 javaldx 读取路径”并且无法打开 soffice。有什么解决方案可以解决这个问题吗? 这是 DockerFile:

FROM public.ecr.aws/lambda/nodejs:12

RUN yum install wget tar -y
RUN yum install java-1.8.0-openjdk-devel -y
RUN mkdir "LibreOffice_7.2_Linux_x86-64_rpm"
ADD LibreOffice_*_Linux_x86-64_rpm ./LibreOffice_7.2_Linux_x86-64_rpm
RUN ls -la
RUN cd  LibreOffice_*_Linux_x86-64_rpm && cd RPMS && yum -y localinstall *.rpm
RUN chmod -R 777 /opt/libreoffice7.2
ADD test.docx ./
RUN export HOME=/tmp

COPY index.js package*.json ./
RUN npm install

CMD [ "index.handler" ]

这是我的处理程序代码:

/* Amplify Params - DO NOT EDIT
    ENV
    REGION
    STORAGE_DOCBACKENDD3C9A483_BUCKETNAME
Amplify Params - DO NOT EDIT */

const {writeFileSync, readFileSync} = require('fs');
const {execSync} = require('child_process');
const {S3} = require('aws-sdk');

const s3 = new S3(
    {
        params: {
            Bucket: "documentgenerationb25c0536d4054b9faeafca747e3f295559-dev",
            apiVersion: '2006-03-01'
        }
    }
);
const convertCommand = `/opt/libreoffice7.2/program/soffice --convert-to pdf test.docx --headless`;

exports.handler = async () => {
    const filename = "test.docx"
    const {Body: inputFileBuffer} = await s3.getObject({Key: `public/${filename}`}).promise();
    writeFileSync(`/tmp/${filename}`, inputFileBuffer);

    execSync(`${convertCommand} ${filename}`);
    const outputFilename = `test1-brandon.pdf`;
    const outputFileBuffer = readFileSync(`/tmp/${outputFilename}`);

    await s3
    .putObject({
        Key: `public/${outputFilename}`, Body: outputFileBuffer,
        ACL: 'public-read', ContentType: 'application/pdf'
    })
    .promise();

    return `https://documentgenerationb25c0536d4054b9faeafca747e3f295559-dev.s3.amazonaws.com/public/${outputFilename}`;
};

【问题讨论】:

    标签: node.js amazon-web-services docker aws-lambda libreoffice


    【解决方案1】:

    看起来这个答案Warning: failed to read path from javaldx 也适用于您的情况。

    您的用户没有设置主文件夹,或者主文件夹不可写。我刚刚从直接调用 libreoffice 切换到通过 shell 脚本调用它

    【讨论】:

      【解决方案2】:

      我目前正在使用这个带有 lambda 层的 https://github.com/shelfio/aws-lambda-libreoffice,您只需要安装 @shelf/aws-lambda-libreoffice。所以实际上只有 4 行代码和无服务器部署。

      【讨论】:

        猜你喜欢
        • 2021-10-04
        • 2011-08-29
        • 2018-08-17
        • 2022-10-15
        • 1970-01-01
        • 2017-01-11
        • 2017-10-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多