AWS Lambda 错误:无法加载 gRPC 二进制模块,因为当前系统未安装该模块

问题描述 投票:0回答:3

我在使用无服务器框架部署 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

任何帮助将不胜感激!

firebase aws-lambda glibc google-cloud-firestore grpc
3个回答
8
投票

修复

基本上,您需要指定grcp库的目标。 从该链接复制:

{
  "main": "index.js",
  "scripts": {
  "postinstall": "npm rebuild grpc --target=6.1.0 --target_arch=x64 --target_platform=linux --target_libc=glibc"
  }
}

1
投票

我通过包含

--target_libc=glibc
获得了类似的工作,可以在 node-pre-gyp 的文档中找到。


0
投票

我能够通过采取以下步骤解决此问题:

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 在各种无服务器服务提供商中安装包。

© www.soinside.com 2019 - 2024. All rights reserved.