如何将无头铬模块与 AWS Lambda 捆绑在一起?



我正在尝试将Puppeteer与Lambda一起使用,但是,在无服务器部署中,由于超过250mb的非捆绑包大小限制,lambda错误。

因此,为了低于限制,我改用了不带铬包装的木偶核心。这需要引用可执行文件的路径才能启动 chrome。(例如puppeteer.launch({executablePath: headlessChromiumPath})(;

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

为了解决这个问题,我正在尝试几件事:

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

文件结构:

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

引用如下:

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

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

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

您可以使用chrome-aws-lambda将chrome与Lambda打包,也可以创建Lambda层以避免软件包大小。

我在这里做了类似的事情

,基于chrome-aws-lambda

chrome-aws-lambda确实很大~40MB添加到部署包中,使用Layer可能会减小包的大小,但也可能会增加大小,因为250MB的解压缩限制包括层和lambda代码。如果您使用chrome-aws-lambda那么绝对不要使用puppeteer,而是使用puppeteer-core来减小尺寸。我做了一个非常相似的设置,希望它有所帮助1

最新更新