无法为 AWS Lambda 创建最新的无头 chrome

Unable to create latest headless chrome for AWS Lambda

我需要在 AWS Lambda 上使用最新的 headless chrome 和 puppeteer,为此,我参考了:https://github.com/adieuadieu/serverless-chrome/blob/master/docs/chrome.md.

我已经尝试了以下所有方法来使用给定的指令创建无头 chrome,但不会工作,并且会得到与下面相同的错误。

  1. 本地(在本地构建无头 Chromium Docker)
  2. 使用 AWS EC2(使用 EC2 Spot 实例 (spot-block) 构建 Chromium)
  3. EC2 上的 AmazonLinux(仅使用 build.sh 脚本在没有 Docker 的情况下构建 Chromium)

错误:

ninja: Entering directory `out/Headless'
[1/26797] STAMP obj/build/win/default_exe_manifest.stamp
[2/26797] ACTION //build/util:webkit_version(//build/toolchain/linux:clang_x64)
[3/26797] STAMP obj/base/numerics/base_numerics.stamp
[4/26797] ACTION //base:build_date(//build/toolchain/linux:clang_x64)
[5/26797] STAMP obj/build/buildflag_header_h.stamp
[6/26797] STAMP obj/base/util/type_safety/type_safety.stamp
[7/26797] CXX obj/base/base_static/base_switches.o
FAILED: obj/base/base_static/base_switches.o 
../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD -MF obj/base/base_static/base_switches.o.d -DUSE_AURA=1 -DUSE_NSS_CERTS=1 -DUSE_OZONE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DCR_CLANG_REVISION=\"373424-64a362e7-1\" -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FORTIFY_SOURCE=2 -D_LIBCPP_ABI_UNSTABLE -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_ENABLE_NODISCARD -DCR_LIBCXX_REVISION=361348 -DCR_SYSROOT_HASH=bcc994cc6e5d4d6f0eec8b44e7f0a65f5a1a7b90 -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -I../.. -Igen -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -funwind-tables -fPIC -B../../third_party/binutils/Linux_x64/Release/bin -pthread -fcolor-diagnostics -fmerge-all-constants -fcrash-diagnostics-dir=../../tools/clang/crashreports -Xclang -mllvm -Xclang -instcombine-lower-dbg-declare=0 -fcomplete-member-pointers -m64 -march=x86-64 -Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -no-canonical-prefixes -Wall -Werror -Wextra -Wimplicit-fallthrough -Wthread-safety -Wextra-semi -Wno-missing-field-initializers -Wno-unused-parameter -Wno-c++11-narrowing -Wno-unneeded-internal-declaration -Wno-undefined-var-template -Wno-ignored-pragma-optimize -Wno-implicit-int-float-conversion -Wno-c99-designator -Wno-reorder-init-list -Wno-final-dtor-non-final-class -Wno-sizeof-array-div -fno-omit-frame-pointer -g0 -fvisibility=hidden -Xclang -add-plugin -Xclang find-bad-constructs -Xclang -plugin-arg-find-bad-constructs -Xclang check-ipc -Wheader-hygiene -Wstring-conversion -Wtautological-overlap-compare -O2 -fno-ident -fdata-sections -ffunction-sections -std=c++14 -fno-exceptions -fno-rtti -nostdinc++ -isystem../../buildtools/third_party/libc++/trunk/include -isystem../../buildtools/third_party/libc++abi/trunk/include --sysroot=../../build/linux/debian_sid_amd64-sysroot -fvisibility-inlines-hidden -c ../../base/base_switches.cc -o obj/base/base_static/base_switches.o

../../third_party/llvm-build/Release+Asserts/bin/clang++: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by /build/chromium/src/third_party/llvm-build/Release+Asserts/bin/../lib/libstdc++.so.6)
ninja: build stopped: subcommand failed.
The command '/bin/sh -c sh /build.sh' returned a non-zero code: 1

如果您的应用不需要托管在 AWS 上,我也遇到过这个问题。将您的应用程序放入云端的最简单方法是使用 Google Cloud Functions 和相当大的 RAM。这是一个向您展示如何操作的视频:https://www.youtube.com/watch?v=i8THvr03FaY

implementation/orchestration 的方式在 lambda 中被更改为与之前相比使用无头 chrome 和 puppeteer。

我在 Nodejs10.x/12.x 的 lambda 中使用 chrome-aws-lambda 到 运行 无头 chrome 和 puppeteer。亚马逊已经宣布 lambda Nodejs8.x 的 EOL(生命周期结束)。

A​​mazon 使用 Amazon Linux AMI 2 for Node.js10.x/12.x 和 Amazon Linux AMI for Node.js8.x。 Amazon Linux AMI 2 没有某些依赖项,这些依赖项会在 Nodejs10.x/12.x inside lambda 中使用 puppeteer 运行 headless chrome 产生问题,因此将使用在 Node.js10.x/12.x.

上使用 puppeteer 将 lambda 层 运行 无头 chrome

chrome-aws-lambda 将为我们提供最新版本的 puppeteer 和 headless chrome。