AWS Lambda中Playwright page.goto()持续报错排查求助
环境信息
- Lambda 1:
- playwright-aws-lambda v0.9.0
- Node.js 16
- Lambda 2:
- playwright-aws-lambda v0.10.0
- Node.js 18
- 部署环境:AWS Lambda
- CI/CD工具:GitLab
报错详情
- 页面访问阶段报错:
Error: page.goto: Target page, context or browser has been closed
- 处理程序执行阶段报错:
TypeError: Cannot read properties of undefined (reading 'close')
at d. (/var/task/src/handler.js:1:17387)
at Generator.next ()
at a (/var/task/src/handler.js:1:15631)
关键现象
仅4月18日及之后通过GitLab流水线构建部署的Lambda实例出现问题,同代码、同依赖版本的旧部署包运行完全正常。
可能的触发原因
AWS Lambda运行时底层更新
AWS在4月中旬可能对Node.js 16/18的Lambda运行时进行了底层调整,比如资源回收策略、进程生命周期管理或文件系统权限变更。playwright-aws-lambda高度依赖Lambda的运行时环境,这类变化可能导致浏览器实例被提前回收,触发page.goto的关闭错误;后续代码尝试调用已销毁实例的close方法,就会出现读取undefined属性的报错。GitLab CI构建环境隐性变更
即使锁定了项目依赖版本,GitLab Runner的基础镜像可能在4月18日后更新,导致构建过程中生成的部署包存在隐性差异——比如系统依赖库版本、Node.js编译字节码的细微变化。这类差异可能破坏playwright二进制文件与Lambda运行时的兼容性,导致浏览器启动后异常退出。间接依赖的隐性更新
虽然你锁定了playwright-aws-lambda的版本,但它的间接依赖(如playwright-core、AWS SDK相关包)可能未被严格锁定,npm/yarn在构建时拉取了新的次要版本。这些新版本可能与Lambda的新运行时不兼容,引发浏览器上下文异常关闭。
排查与解决建议
- 对比新旧部署包的文件哈希值,确认二进制文件、编译产物是否存在差异;
- 使用AWS官方提供的Lambda运行时Docker镜像(如
public.ecr.aws/sam/build-nodejs18.x)在本地模拟构建与运行,复现问题; - 将GitLab Runner的基础镜像回退到4月18日前的版本,重新构建部署,验证问题是否消失;
- 查看Lambda的完整运行日志,重点排查
browserType.launch阶段的底层报错,定位实例提前关闭的具体原因; - 尝试升级playwright-aws-lambda到对应Node.js版本的最新兼容版,确保依赖与运行时匹配。
内容的提问来源于stack exchange,提问作者user17991685

