NodeJS AWS Lambda访问Layer代码触发EACCES权限错误求助
解决AWS Lambda部署Node.js函数时Chromium二进制文件EACCES权限错误
问题根源
Lambda运行时的lambda执行用户无权限执行/opt/nodejs/node_modules/@sparticuz/chromium/bin下的Chromium二进制文件。核心原因是打包Lambda层时未保留文件执行权限:本地执行chmod -R 777 node_modules后,默认zip命令不会保留文件权限位,导致上传至AWS后权限丢失。
修复步骤
1. 修正层打包脚本zip-pupeteer-layer.sh
更新脚本,确保打包时保留权限,并精准设置Chromium二进制文件的执行权限:
mkdir -p pupeteer-layer/nodejs cd pupeteer-layer/nodejs npm init -y npm install @sparticuz/chromium@109.0.1 puppeteer-core@19.6.3 # 给Chromium二进制文件添加执行权限 chmod +x node_modules/@sparticuz/chromium/bin/* # 使用zip的-y参数强制保留文件权限,避免上传后权限丢失 cd .. zip -ry layer.zip nodejs/ -x "nodejs/package.json" -x "nodejs/package-lock.json"
关键改动:
- 直接针对Chromium二进制文件设置执行权限,比递归777更精准
- 打包时添加
-y参数,确保文件权限信息被保留
2. 重新部署资源
执行Terraform命令重新生成层并部署函数:
terraform apply
额外验证项
- 确认Lambda函数架构(x86_64/arm64)与
@sparticuz/chromium版本兼容(109.0.1支持双架构) - 确认Lambda内存配置不低于Chromium运行要求(当前10240MB符合要求)
内容的提问来源于stack exchange,提问作者Tal Rofe
相关产品推荐
相关产品推荐

