部署AWS CDK栈时出现ENOENT错误,但文件实际存在
AWS CDK部署失败:软链接指向文件不存在问题
我能成功构建CDK栈,但部署时抛出ENOENT错误,提示找不到adler32文件。栈名已改为my-project,部署输出如下:
my-project: start: Building bbc607a4ac6f868ba9e45e9f9ba5f1c3cf4e3b14d0e690f4c9ce3bb9cb9f964b:910458460161-eu-central-1 my-project: success: Built bbc607a4ac6f868ba9e45e9f9ba5f1c3cf4e3b14d0e690f4c9ce3bb9cb9f964b:910458460161-eu-central-1 my-project: start: Building 87982448b5f41e7ee4a7bb49f3bc091290bac6433b3a7155eb9c6b02619deec4:910458460161-eu-central-1 my-project: success: Built 87982448b5f41e7ee4a7bb49f3bc091290bac6433b3a7155eb9c6b02619deec4:910458460161-eu-central-1 my-project: start: Publishing bbc607a4ac6f868ba9e45e9f9ba5f1c3cf4e3b14d0e690f4c9ce3bb9cb9f964b:910458460161-eu-central-1 my-project: start: Building 3c4cd26fe8b60b35c17579621245911d275a5676f6ae704257c6652d2f825998:910458460161-eu-central-1 my-project: success: Built 3c4cd26fe8b60b35c17579621245911d275a5676f6ae704257c6652d2f825998:910458460161-eu-central-1 my-project: start: Publishing 87982448b5f41e7ee4a7bb49f3bc091290bac6433b3a7155eb9c6b02619deec4:910458460161-eu-central-1 my-project: start: Building 6ec7496703495c2ec88efaf08a099bd34ff79241da190bade4794a89b3364c23:910458460161-eu-central-1 my-project: success: Built 6ec7496703495c2ec88efaf08a099bd34ff79241da190bade4794a89b3364c23:910458460161-eu-central-1 my-project: start: Publishing 3c4cd26fe8b60b35c17579621245911d275a5676f6ae704257c6652d2f825998:910458460161-eu-central-1 my-project: start: Publishing 6ec7496703495c2ec88efaf08a099bd34ff79241da190bade4794a89b3364c23:910458460161-eu-central-1 node:internal/process/promises:288 triggerUncaughtException(err, true /* fromPromise */); ^ [Error: ENOENT: no such file or directory, stat '/home/.../my-project/cdk.out/asset.87982448b5f41e7ee4a7bb49f3bc091290bac6433b3a7155eb9c6b02619deec4/nodejs/node_modules/.bin/adler32'] { errno: -2, code: 'ENOENT', syscall: 'stat', path: '/home/.../my-project/cdk.out/asset.87982448b5f41e7ee4a7bb49f3bc091290bac6433b3a7155eb9c6b02619deec4/nodejs/node_modules/.bin/adler32' } Node.js v18.17.0
问题细节
- ls命令能看到
adler32文件,权限为lrwxrwxrwx(软链接),但执行cat adler32时提示文件不存在 - 层中安装了一个本地模块和
xml2js
已尝试的无效操作
- 升级aws-cdk
- 手动将adler32安装到目标目录
- 删除栈并重新部署
解决方法
1. 修复软链接指向
cd到软链接所在目录,查看链接的实际目标:
cd /home/.../my-project/cdk.out/asset.87982448b5f41e7ee4a7bb49f3bc091290bac6433b3a7155eb9c6b02619deec4/nodejs/node_modules/.bin/ ls -l adler32
如果目标路径无效(比如相对路径错误、指向了本地node_modules外的位置),重新创建软链接:
rm adler32 # 指向node_modules/adler32下的实际可执行文件,路径根据实际情况调整 ln -s ../adler32/bin/adler32 adler32
2. 禁用npm软链接生成
在层的package.json中添加配置,让npm安装时复制文件而非创建软链接:
{ "scripts": { "install": "npm install --no-bin-links" } }
或者直接在安装依赖时添加参数:
npm install --no-bin-links
3. 彻底清理后重新构建
清理cdk.out和本地依赖,重新安装并部署:
rm -rf cdk.out node_modules npm install cdk synth cdk deploy
4. 检查本地模块依赖
如果使用了本地模块,确保其package.json中正确声明了adler32依赖,避免本地模块的软链接问题影响CDK资产打包。
内容的提问来源于stack exchange,提问作者Gabriele
相关产品推荐
相关产品推荐

