node.js - 如何将 headless Chrome 模块与AWS Lambda捆绑在一起?

标签 node.js aws-lambda puppeteer serverless-framework google-chrome-headless

我尝试将 Puppeteer 与 Lambda 结合使用,但是,在无服务器部署中,由于超出 250mb 未 bundle 大小限制,Lambda 会出错。

因此,为了低于限制,我已切换到 Puppeteer 核心,该核心未使用 chromium 进行打包。这需要引用可执行文件的路径来启动 chrome。 (例如puppeteer.launch({executablePath: headlessChromiumPath}));

但是,我不确定如何将 headless Chromium 加载到我的容器中,以便稍后引用它。

为了解决这个问题,我正在尝试一些方法:

首先,我下载了一个二进制 headless chromium 并将其包含到我的 API 中。

文件结构:

-run-puppeteer.js    
-headless_shell.tar.gz

引用如下:

const browser = await puppeteer.launch({
    executablePath: "../headless_shell.tar.gz"
  });

但是,我无法导入或要求它,因此我的 lambda 无法识别它的存在,并且不会将其包含在我的部署包中。 我的问题是如何正确地将 headless 文件包含到我的 API 中,以便我可以从该 lambda 中引用它?

如果这不是一个选项 - 我发现我可以将二进制文件上传到 S3,然后在容器启动时下载它。任何关于从哪里开始解决这个问题的引用资料将不胜感激。

最佳答案

您可以使用chrome-aws-lambda将 chrome 与 Lambda 一起打包,或者创建 Lambda 层以避免包大小。

我做了类似的事情here基于chrome-aws-lambda

关于node.js - 如何将 headless Chrome 模块与AWS Lambda捆绑在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57408181/

相关文章:

node.js - 如何使用nodemon查看多个文件夹?

javascript - 咕噜声 : get line numbers for errors

java - AWS Lambda 构造函数重载 Java POJO

aws-lambda - 当我在本地部署 aws lambda 时,console.log 输出会去哪里?

javascript - 是否可以模拟按下 'Down' 箭头?

javascript - Node - 将 m3u8 流保存为 mp3 文件

node.js - 当真正的 sequelize 连接在 require 树中时,为什么这个 sequelize-test-helper 调用不起作用?

python - 提高从 s3 读取 lambda 代码的性能

javascript - Mongoose 类型错误: findOneAndUpdate is not a function

node.js - 如何将 ElementHandle 移动到另一个页面