我在使用无服务器框架部署 AWS Lambda 函数时遇到问题。我使用
@google-cloud-firestore
npm 包,它需要 grpc
包。
函数执行抛出错误:
{
"errorMessage": "Failed to load gRPC binary module because it was not installed for the current system\nExpected directory: node-v48-linux-x64-glibc\nFound: [node-v59-darwin-x64-unknown]\nThis problem can often be fixed by running \"npm rebuild\" on the current system\nOriginal error: Cannot find module '/var/task/node_modules/grpc/src/node/extension_binary/node-v48-linux-x64-glibc/grpc_node.node'",
"errorType": "Error",
"stackTrace": [
"Found: [node-v48-linux-x64-unknown]",
"This problem can often be fixed by running \"npm rebuild\" on the current system",
"Original error: Cannot find module '/var/task/node_modules/grpc/src/node/extension_binary/node-v48-linux-x64-glibc/grpc_node.node'",
"Object.<anonymous> (/var/task/node_modules/grpc/src/grpc_extension.js:44:17)",
"Module._compile (module.js:570:32)",
"Object.Module._extensions..js (module.js:579:10)",
"Module.load (module.js:487:32)",
"tryModuleLoad (module.js:446:12)",
"Function.Module._load (module.js:438:3)",
"Module.require (module.js:497:17)",
"require (internal/module.js:20:19)",
"Object.<anonymous> (/var/task/node_modules/grpc/src/client.js:38:12)",
"Module._compile (module.js:570:32)",
"Object.Module._extensions..js (module.js:579:10)",
"Module.load (module.js:487:32)",
"tryModuleLoad (module.js:446:12)",
"Function.Module._load (module.js:438:3)",
"Module.require (module.js:497:17)",
"require (internal/module.js:20:19)"
]
}
所以,据我了解,lambda 需要使用目标构建的 grps
node-v48-linux-x64-glibc
键入
npm i -S grpc --target=6.4.0 --target_arch=x64 --target_platform=linux
仅将 node-v59-darwin-x64-unknown
更改为 node-v48-linux-x64-unknown
。
如何将
unknown
更改为 glibc
?
任何帮助将不胜感激!
基本上,您需要指定grcp库的目标。 从该链接复制:
{
"main": "index.js",
"scripts": {
"postinstall": "npm rebuild grpc --target=6.1.0 --target_arch=x64 --target_platform=linux --target_libc=glibc"
}
}
我能够通过采取以下步骤解决此问题:
从 PyPi 下载 invoke-x.x.x.tar.gz。
提取包的内容并找到调用文件夹。
将调用文件夹放置在您的requirements.txt 文件所在的目录中。
在脚本的开头集成以下代码片段:
from invoke import run
cmd = "pip install --target /tmp -r requirements.txt"
result = run(cmd, hide=False, warn=False)
import pathlib
import sys
temp_dir = pathlib.Path('/tmp')
sys.path.insert(0, temp_dir.absolute().as_posix())
按照这些步骤,将直接从您的脚本安装所需的依赖项。此方法可能会解决您遇到的问题。因此,您将能够使用脚本以及调用包文件夹和requirements.txt 在各种无服务器服务提供商中安装包。