繁体   English   中英

AWS Lambda木偶

[英]AWS Lambda Puppeteer

由于浪费了两个星期的时间,我尝试在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

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

另外,我在Windows 7上,因此要构建该程序包,请在package.json上删除/更改脚本部分的很多内容。 我创建了包含和不包含babel和lint的程序包。 另外,我尝试使用其他版本的puppeteer和chronium。

有人建议我将puppeteer的版本修复为1.1.1,但没有成功。 参见(TheCat and 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)"
    ]
}

Config AWS:我使用“从Amazon S3上载文件”选项,因为它总是通过UI超时和CLI命令的相同操作来完成。

运行时:Node.js 8.10

处理程序:index.handler

可执行角色:lambda_basic_execution。 我还尝试了一个自定义角色,以防万一,他可以完全访问lambda和S3。

超时:30秒

内存:3008 mb

如果有人可以指导我一点。

我终于设法部署了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中的节点版本更改为8.10
  2. npm install babel(如果尚未安装)
  3. npm运行包
  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的内容,然后就可以部署软件包了

我也走过了这条痛苦的道路,建议您查看Google Cloud Functions,因为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM