如何将无头 Chromium 模块与 AWS Lambda 绑定?

5

我正在尝试在Lambda中使用Puppeteer,但是,在无服务器部署期间,由于超过了250mb未捆绑软件包大小限制,lambda会出现错误。

为了满足要求,我切换到不带Chromium的Puppeteer核心。这需要引用可执行文件路径来启动chrome。(例如:puppeteer.launch({executablePath: headlessChromiumPath}))

但是,我不知道如何将一个无头的Chromium加载到我的容器中,以便稍后引用它。

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

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

文件结构:

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

引用方式如下:

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

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

如果这不是一个选项-我看到我可以将二进制文件上传到S3,然后在容器启动时下载它。 任何关于开始解决此问题的信息都将不胜感激。

2个回答

3
你可以使用 chrome-aws-lambda,将 Chrome 打包到 Lambda 中或创建一个 Lambda Layer,以避免包大小问题。
我也做了类似的事情,基于 chrome-aws-lambda,在这里

2
`chrome-aws-lambda`确实很大,约40MB,加到部署包中。使用Layer可能会减小包的大小,但也可能会增加大小,因为250MB未压缩限制包括层和lambda代码。如果您使用`chrome-aws-lambda`,则绝对不要使用`puppeteer`,而应该使用更小的`puppeteer-core`。我做了一个非常类似的设置this,希望能够帮助1

感谢您的回答。不使用层有什么好处吗? - Crashalot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接