【问题标题】:AWS Lambda execute shell npm install errorAWS Lambda 执行 shell npm install 错误
【发布时间】:2021-11-04 04:58:57
【问题描述】:

我正在尝试在 AWS lambda 中构建一个 Web 应用程序并将其上传到 S3 存储桶。为此,我使用子进程,它在本地运行良好。

exec('cd /tmp/ && npm ci && ng build --prod="true"', (error, stderr, stdout) => {
      if (error) {
        console.log(error);
        return reject(error);
        }
      });

我也尝试使用 npm install 而不是 npm ci,但在所有情况下都失败并出现错误:

"npm ERR!errno -30", “npm ERR!rofs EROFS:只读文件系统,mkdir '/home/sbx_user1051'”, "npm ERR!rofs 经常虚拟化文件系统,或者其他文件系统", “npm ERR!不支持符号链接的rofs,给出这个错误。”, "npm ERR! 代码 EROFS", "npm ERR! syscall mkdir",

命令失败:cd /tmp/ && npm ci && ng build --prod="true"\nnpm ERR!代码 EROFS\nnpm 错误!系统调用 mkdir\nnpm 错误!路径 /home/sbx_user1051\nnpm 错误!错误号 -30\nnpm 错误! rofs EROFS: 只读文件系统,mkdir '/home/sbx_user1051'\nnpm ERR! rofs 经常虚拟化文件系统,或其他文件系统\nnpm ERR!不支持符号链接的 rofs,给出这个错误。\nnpm ERR!

我了解在 AWS Lambda 中只有 /tmp/ 目录是可写的。我只是不知道如何告诉 npm 在 /tmp 中运行。

有什么想法吗?

【问题讨论】:

    标签: node.js amazon-web-services shell npm aws-lambda


    【解决方案1】:

    通常,人们在构建阶段安装所有内容,然后将其压缩并部署为 lambda 函数。 AWS 提供了一些示例项目来做到这一点https://docs.aws.amazon.com/lambda/latest/dg/lambda-nodejs.html

    或者用放大https://aws.amazon.com/amplify/

    对于节点,还有一个使用无服务器的选项 https://stackify.com/aws-lambda-with-node-js-a-complete-getting-started-guide/

    或者,现在,您也可以考虑使用 docker https://aws.amazon.com/blogs/aws/new-for-aws-lambda-container-image-support/

    任何这些都可以在 CI/CD 管道中准备 (https://www.weave.works/blog/what-cicd-tool-should-i-use)。

    一般来说,我会避免自修改 lambda。这很难重复。有一天,一个 npm 包将在一分钟内不可用,AWS 将扩展您的 lambda,它将开始失败,您的整个应用程序将崩溃。

    如果您的目标是在 lambda 中重复构建节点应用程序,请使用 docker 路径,这具有最大的灵活性。

    【讨论】:

    • 我知道如何部署我的节点项目。我不知道如何在 lambda 函数中执行 npm 命令,因为该函数只是超时而没有错误
    • 好吧,我的想法是,如果你作为 docker 来做,你可以更好地调试正在发生的事情。正如我之前所写的:您正在尝试做的事情可能不是一个好的解决方案,即使它有效。但无论如何,我完全同意你这样做。如果您从节点运行 npm,请考虑使用管道而不是 exec codingwithjesse.com/blog/how-to-use-node-streams-and-how-not-to,然后在调试模式下运行 npm npmjs.com/package/debug-level 并逐行记录所有内容。您可能会了解到底发生了什么。
    猜你喜欢
    • 1970-01-01
    • 2016-10-11
    • 2020-08-29
    • 2016-10-28
    • 2020-12-01
    • 1970-01-01
    • 2013-09-17
    • 2017-04-25
    相关资源
    最近更新 更多