当前位置: 首页 > 知识库问答 >
问题:

在lambda nodejs 12.0上安装libreoffice,但部署时无法运行命令

林辰钊
2023-03-14

我尝试将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}`;
};

共有2个答案

张瀚漠
2023-03-14

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

宇文智敏
2023-03-14

看起来这个答案警告:未能从javaldx读取路径也适用于您的情况。

您的用户没有主文件夹集,或者主文件夹不可写。我刚从直接调用libreoffice改为通过shell脚本调用

 类似资料:
  • 问题内容: 我在Windows 7的python 2.7环境中安装了Scrapy,但是当我尝试使用命令提示符启动新的Scrapy项目时,显示此消息 注意: 我也有python 3.5但那没有沙皮 这个问题是不重复的这 问题答案: 请参阅官方文档。 设置环境变量 安装pywin32

  • =D:\Users\pjha\AppData\Roaming\npm\node\u modules\tty。js\node\u模块\ws (节点gyp重建2

  • 我想用早期版本的JasperReports编译我的报告,所以我试图将其他版本的JasperReports添加到我的Jaspersoft Studio中:项目->属性->Jaspersoft Studio->兼容性->使用项目设置->管理JasperReports版本。 我选择从URL添加选项,然后在组合框上选择某个版本。过了一会儿,我得到了下面的错误: 我试图安装许多版本,但都失败了。 null

  • 如果我执行docker命令,如 我得到一个错误,docker没有安装,我可以做sudo apt get install docker来安装它。如果我这样做,它会说docker是最新版本。我是否需要设置二进制文件的某种路径才能运行它? 如果我做,没有答案。

  • 我正在使用Visual Studio Code,但我无法运行“在路径中安装代码命令”选项,因为当我键入Shift Ctrl P时,此命令不会出现。我正在使用Windows 10和最新版本的Visual Studio Code。 我尝试了许多步骤来解决我的问题,但没有成功。以下是我所做的: 重新安装了Visual Studio Code(最新版本),并检查了要添加到PATH变量的选项。不起作用。 打

  • 我试着在这些问题中应用所有的解决方案: 在我的web.xml中,我使用了标记'res-ref-name'。 多谢!