我正在创建一个 Lambda 扩展,以使用作为模板从密钥管理器获取密钥值: https://github.com/hariohmprasath/aws-lambda-extensions
我已将文件压缩为以下结构。
extension.zip
--> extensions
--> secret-extension
--> secret-extension
--> node_modules
--> extensions-api.js
--> index.js
--> package.json
--> package-lock.json
--> secrets.js
错误:
{
"errorMessage": "RequestId: e5c06575-cf7d-46c0-b168-624e8e9cf572 Error: exit status 127",
"errorType": "Extension.Crash"
}
错误是/usr/bin/env: 节点:没有这样的文件或目录 在索引的顶部.js文件是命令#!/usr/bin/env节点(为了解释node中的文件)
运行时环境是 Nodejs 12,并且也尝试过使用 14。(扩展文档说需要节点 12 运行时)
可能导致此问题的原因是什么?
- lambda 运行时是节点运行时,因此应安装节点。
- 我已经
ls
文件夹并且/env
文件夹存在。 - 我知道运行时中存在节点,因为
node -v
返回 v14.20.0 或 v12.22.11 - 我在一台窗户机器上 创建扩展(不要认为部署可能导致 这是因为它是在Windows机器上编写的。
任何帮助将不胜感激。
因此发现这与他们用于AWS提供的示例的自定义环境有关。相反,我选择了使用运行时独立解决方案的路线,该解决方案按预期工作。
文档
我怀疑您可能遇到的问题与我的相同,该问题是:#!/usr/bin/env node
在行尾rn
了空格字符,除非您让编辑器显示这些字符,否则显然看不到这些字符,这就是 Windows 处理新行的方式(*nix 系统仅使用n
);现在,当 lambda 读取该行时,它试图将其解释为显然不存在的#!/usr/bin/env noder
,并且无法通过node
运行文件。
日志的问题在于,当您查看日志时,它不会将r
呈现为那样,它可以执行以下 2 件事中的 1 件事,具体取决于您查看日志的位置:
- 它将
r
解释为换行符,从而只打印空格,这在日志消息中并不明显;或者可能发生的其他情况(这就是发生在我身上的情况): - 它只显示
: No such file or directory
,因为它将r
解释为回车符,这意味着它将cursor
带到行的开头,并在打印新字符时覆盖,
我很有信心这是你的问题,我承认我没有自己 100% 解决这个问题,因为我团队中的一个人在空白字符方面遇到了类似的问题,只有在分配头部撞击之后我才想到它,并确认使用hexdump -C
来确认问题。