AWS Lambda Puppeteer

3
在过去的两周里,我一直尝试在AWS Lambda上安装Puppeteer,但一直没有成功。我尝试了以下两个链接: https://github.com/sambaiz/puppeteer-lambda-starter-kithttps://github.com/deathemperor/puppeteer-lambda-starter-kit 我的最终代码是: https://github.com/sambaiz/puppeteer-lambda-starter-kit 请替换index.js: https://github.com/sambaiz/puppeteer-lambda-starter-kit/blob/master/src/index.js

By: https://github.com/deathemperor/puppeteer-lambda-starter-kit/blob/master/src/index.js

此外,我在使用 Windows 7 时,在 package.json 的脚本部分删除/更改了很多内容以构建软件包。我已经创建了带有和不带有 babel 和 lint 的软件包,并尝试了不同版本的 puppeteer 和 chromium。
有人建议我将 puppeteer 版本修复为 1.1.1,但没有成功。请参见(TheCat 和 cirdes):https://github.com/GoogleChrome/puppeteer/issues/323 我在 AWS 上一直收到此错误提示:
{
    "errorMessage": "Failed to launch chrome! spawn /tmp/headless_shell ENOENT\n\n\nTROUBLESHOOTING: [...]",
    "errorType": "Error",
    "stackTrace": [
        "",
        "",
        "TROUBLESHOOTING:[..]",
        "",
        "onClose (/var/task/node_modules/puppeteer/lib/Launcher.js:299:14)",
        "ChildProcess.helper.addEventListener.error (/var/task/node_modules/puppeteer/lib/Launcher.js:290:64)",
        "emitOne (events.js:116:13)",
        "ChildProcess.emit (events.js:211:7)",
        "Process.ChildProcess._handle.onexit (internal/child_process.js:196:12)",
        "onErrorNT (internal/child_process.js:372:16)",
        "_combinedTickCallback (internal/process/next_tick.js:138:11)",
        "process._tickDomainCallback (internal/process/next_tick.js:218:9)"
    ]
}

配置AWS: 我使用“从Amazon S3上传文件”选项,因为UI总是在超时后完成,CLI命令也是如此。
运行时:Node.js 8.10
处理程序:index.handler 可执行角色:lambda_basic_execution。我还尝试了一个自定义角色,该角色具有对lambda和S3的完全访问权限,以防万一。
超时时间:30秒
内存:3008 MB。
如果有人能给我一些指导就好了。

1
Chromium(Puppeteer所需的)有一些依赖项,必须在服务器操作系统上安装。因此,在Lambda上无法直接运行。如果您找到的现有GitHub存储库无法使用,我建议考虑使用一个“适当的”服务器(EC2实例)代替。 - serakfalcon
谢谢你提供的EC2建议。如果我找不到如何修复GitHub的方法,我会检查一下。也许在创建包时我做错了什么。我希望有人已经做过这个并能测试和确认包是否正确。 - TheCat
我终于成功部署了sambaiz包。请查看这里:https://github.com/GoogleChrome/puppeteer/issues/323#issuecomment-416788368 - TheCat
请不要将答案作为问题的编辑,您可以在下面回答自己的问题,这将帮助其他遇到相同问题的人。此外,如果您提供完整的解决方案而不仅仅是链接,那么即使链接以后被迁移或无法访问,也会有所帮助。 - serakfalcon
嗨serakfalcon,没问题。谢谢。 - TheCat
2个回答

4

我终于成功部署了sambaiz软件包。同时,我更新了chronium到最新的稳定版本(HeadlessChrome/68.0.3440.106)和puppeteer的最新版本(1.7.0)。

https://www.dropbox.com/s/p4t7zod2nf97cwn/sambaiz-puppeteer.zip?dl=0

如果你想构建自己的软件包,并且你在Windows上,可以:

  1. 下载:https://github.com/sambaiz/puppeteer-lambda-starter-kit
  2. 将package.json更改为我的:
    {
      "name": "puppeteer-lambda-starter-kit",
      "version": "1.1.2",
      "description": "Starter Kit for running Headless-Chrome by Puppeteer on AWS Lambda",
      "scripts": {
        "package": "npm run package-prepare",
        "package-prepare": "npm run babel && copy package.json dist && cd dist && npm config set puppeteer_skip_chromium_download true -g && npm install --production",
        "babel": "mkdir dist && \"./node_modules/.bin/babel\" src --out-dir dist",
        "local": "npm run babel && copy node_modules dist && node dist/starter-kit/local.js",
        "package-nochrome": "npm run package-prepare && cd dist && zip -rq ../package.zip ."
      },
      "dependencies": {
        "babel": "^6.23.0",
        "puppeteer": "^1.1.1",
        "tar": "^4.0.1"
      },
      "devDependencies": {
        "aws-sdk": "^2.111.0",
        "babel-cli": "^6.26.0",
        "babel-preset-env": "^1.6.0"
      }
    }

  1. 将.babelrc中的node版本更改为8.10
  2. npm安装babel(如果尚未安装)
  3. 运行npm package
  4. 将chrome/headless_shell-67.0.3361.0.tar.gz复制到dist目录下
  5. 将dist/headless_shell-67.0.3361.0.tar.gz重命名为headless_shell.tar.gz
  6. 将dist目录的内容压缩成zip文件,即可部署你的软件包。

-1

我也曾走过这条痛苦的路,建议你看一下谷歌云函数(Google Cloud Functions),因为谷歌云函数会根据package.json文件来安装NPM包,而不需要你在本地安装并上传node_modules目录(这也是导致AWS 50MB限制问题的原因)。

你可以尝试以下操作:

gcloud functions deploy screenshot --runtime nodejs8 --trigger-http --memory=2048MB --timeout=60 --project=xyz --region europe-west1

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