如何将无头铬模块与 AWS Lambda 捆绑在一起?
How to bundle headless chromium module with AWS Lambda?
我正在尝试将 Puppeteer 与 Lambda 结合使用,但是,在无服务器部署中,由于超过 250mb 的未捆绑包大小限制,lambda 出错。
所以,为了达到限制,我已经切换到 Puppeteer 核心,它没有随附 chromium。这需要引用可执行文件的路径才能启动 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,然后在容器启动时下载它。任何关于从哪里开始解决这个问题的参考资料将不胜感激。
您可以使用 chrome-aws-lambda 将 chrome 与您的 Lambda 打包或创建 Lambda 层以避免包大小。
我根据chrome-aws-lambda
做了类似的事情here
chrome-aws-lambda
确实很大~40MB 添加到部署包中,使用 Layer 可能会减小包的大小但也可能会增加大小,因为 250MB 的解压缩限制包括层和 lambda 代码。如果您使用 chrome-aws-lambda
,则绝对不要使用 puppeteer
,而是使用 puppeteer-core
以获得更小的尺寸。我做了一个非常相似的设置 this hopefully it helps1
我正在尝试将 Puppeteer 与 Lambda 结合使用,但是,在无服务器部署中,由于超过 250mb 的未捆绑包大小限制,lambda 出错。
所以,为了达到限制,我已经切换到 Puppeteer 核心,它没有随附 chromium。这需要引用可执行文件的路径才能启动 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,然后在容器启动时下载它。任何关于从哪里开始解决这个问题的参考资料将不胜感激。
您可以使用 chrome-aws-lambda 将 chrome 与您的 Lambda 打包或创建 Lambda 层以避免包大小。
我根据chrome-aws-lambda
chrome-aws-lambda
确实很大~40MB 添加到部署包中,使用 Layer 可能会减小包的大小但也可能会增加大小,因为 250MB 的解压缩限制包括层和 lambda 代码。如果您使用 chrome-aws-lambda
,则绝对不要使用 puppeteer
,而是使用 puppeteer-core
以获得更小的尺寸。我做了一个非常相似的设置 this hopefully it helps1