AWS Lambda 木偶师
AWS Lambda Puppeteer
由于浪费了 2 周的时间,我尝试在 AWS Lambda 上安装 Puppeteer 但没有成功。
我试过:
https://github.com/sambaiz/puppeteer-lambda-starter-kit
和
https://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 上,所以为了构建程序包,我 remove/change 在脚本部分的 package.json 上有很多东西。
我创建了包含和不包含 babel 和 lint 的包。另外,我尝试了不同版本的 puppeteer 和 chronium。
有人建议我修复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:
我使用 "Upload a file from Amazon S3" 选项,因为它总是通过 UI 超时完成,对于 CLI 命令也是如此。
运行时间:Node.js8.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 上,您可以:
- 下载:https://github.com/sambaiz/puppeteer-lambda-starter-kit
- 由我更改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"
}
}
- 将.babelrc中的node版本改为8.10
- npm install babel(如果尚未安装)
- npm 运行 包
- 复制chrome/headless_shell-67.0.3361.0.tar.gz到dist
- 将 dist/headless_shell-67.0.3361.0.tar.gz 重命名为 headless_shell.tar.gz
- 压缩 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
由于浪费了 2 周的时间,我尝试在 AWS Lambda 上安装 Puppeteer 但没有成功。
我试过: https://github.com/sambaiz/puppeteer-lambda-starter-kit 和 https://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 上,所以为了构建程序包,我 remove/change 在脚本部分的 package.json 上有很多东西。 我创建了包含和不包含 babel 和 lint 的包。另外,我尝试了不同版本的 puppeteer 和 chronium。
有人建议我修复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: 我使用 "Upload a file from Amazon S3" 选项,因为它总是通过 UI 超时完成,对于 CLI 命令也是如此。
运行时间:Node.js8.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 上,您可以:
- 下载:https://github.com/sambaiz/puppeteer-lambda-starter-kit
- 由我更改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" } }
- 将.babelrc中的node版本改为8.10
- npm install babel(如果尚未安装)
- npm 运行 包
- 复制chrome/headless_shell-67.0.3361.0.tar.gz到dist
- 将 dist/headless_shell-67.0.3361.0.tar.gz 重命名为 headless_shell.tar.gz
- 压缩 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