【问题标题】:How to deploy large nodejs package to AWS Lambda?如何将大型 nodejs 包部署到 AWS Lambda?
【发布时间】:2020-01-28 17:57:04
【问题描述】:

我正在尝试向 AWS Lambda 部署一个简单的脚本,该脚本将为网站生成关键的 CSS。运行这个无服务器似乎很有意义(但我找不到任何工作示例)。

问题在于包装尺寸。我正在尝试使用https://github.com/pocketjoso/penthouse。当我只是npm install penthouse 突然包大小超过300MB。 Lambda 的大小限制只有 250MB,不会上传。

有没有办法解决这个问题?也许即时下载顶层公寓?如果有,有什么例子吗?

在这种情况下,性能并不那么重要,因为自动化流程每天只会调用几次。

【问题讨论】:

  • 也许使用 CDN 会有所帮助?虽然它与penthouse 无关,但更多的是与您在项目中拥有的node_modules 的其余部分有关。您可以在此处查看penthouse 的捆绑包大小:bundlephobia.com/result?p=penthouse@2.2.2
  • 没错。我是 nodejs 的新手,但我的理解是 penthouse 依赖于 puppeteer ,其中包括铬二进制文件,这使得包的大小增加。
  • 我会说只使用 CDN。 unpkg.com/browse/penthouse@2.2.2
  • 您考虑过 Lambda 层吗?这篇文章给出了很好的解释——medium.com/harrythegreat/…
  • @CarlMichaels 基本上创建 2 个图层。一种是铬,你可以使用这个:github.com/shelfio/chrome-aws-lambda-layer。另一个是 Penthouse - 您需要自己安装并作为图层导入。它在内部使用 Puppeteer 并用铬安装它 - 你不想要那个。设置 ENV 变量 PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = true,设置后,Puppeteer 将在没有 chromium 的情况下安装,并且 Penthouse 足够小,因此可以作为图层导入。比使用第一层的铬github.com/pocketjoso/penthouse/blob/master/examples/…

标签: amazon-web-services aws-lambda


【解决方案1】:

查看包的捆绑包大小 (https://bundlephobia.com/result?p=penthouse),看来您的问题主要不是与 penthouse 包有关。

虽然我不能肯定地说,但我认为这主要取决于您的其他依赖项的大小。

尽管如此,鉴于这不是一个关键系统,并且每天会通过自动化流程访问几次,因此您可以使用 CDN 减小 node_modules 文件夹的大小。

有许多服务可以让您做到这一点,我过去主要使用 UNPKGjsDelivr,因为它们看起来很可靠,停机时间最短甚至没有。

我没有从您的问题中获得所需的详细信息,即您具体使用了哪种技术以及您可以达到预期结果的程度,但您可以选择以下几个选项:

我对@9​​87654334@ 了解不多,但使用scriptjs,我认为您可以实现这样的目标:

var penthouseScript = require("scriptjs");

penthouseScript("https://cdn.jsdelivr.net/npm/penthouse@2.2.2/lib/index.min.js", () => {

  // penthouse related code

  penthouse({
    url: 'http://google.com',
    cssString: 'body { color: red }'
  })
  .then(criticalCss => {
    // use the critical css
    fs.writeFileSync('outfile.css', criticalCss);
  });

});

【讨论】:

  • 抱歉,我不明白这与 AWS Lambda 函数有什么关系。我的网站必须完全独立于 lambda 脚本。我要做的就是向 lambda 脚本发送一个请求,其中包含网站和 css url 作为参数,它必须返回关键的 css 样式。
  • 谢谢,试试看!
  • 和我想的一样。它给了我“errorMessage”:“文档未定义”。我想那是因为它不是在浏览器中执行的。这就是 puppeteer 依赖的目的。将不得不以另一种方式来做。
猜你喜欢
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2019-07-05
  • 2023-03-29
  • 2017-06-19
  • 2018-12-02
  • 2019-07-09
相关资源
最近更新 更多