如何在 IBM Cloud Functions 操作中使用 Hyperledger Fabric 节点 SDK 包?

How to use Hyperledger Fabric node SDK packages in an IBM Cloud Functions action?

我正在尝试创建一个使用 Hyperledger Fabric 节点 SDK 包的 IBM Cloud Functions 区块链 node.js 操作,但我在操作中需要 fabric-network 包时遇到问题。

因为它是第 3 方包,似乎我需要将动作作为压缩文件上传,但是当我这样做时,我看到:

"error": "Initialization has failed due to: Error: Failed to load gRPC binary module because it was not installed for the current system\nExpected directory: node-v57-linux-x64-glibc\nFound: [node-v57-darwin-x64-unknown]\nThis problem can often be fixed by running \"npm rebuild\" on the current system"

我想创建一个如下所示的 javascript 操作:

'use strict'

const { X509WalletMixin, Gateway } = require('fabric-network')

async function main(params) {
  return { message: 'success' }
}

像这样处理第 3 方包的正确方法是什么?

Node.js 需要为与无服务器 运行 时代相同的平台架构编译具有本机依赖项的模块。如果您从本地开发机器捆绑 node_modules 目录,它可能不匹配。

有两种方法可以使用具有本机依赖项的库...

  1. 运行 npm install 在来自平台图像的 Docker 容器内。
  2. 构建自定义 运行time 映像并预装库。

第一种方法最简单,但只能在包含所有源文件和库的 zip 文件小于操作大小限制 (48MB) 时使用。

运行宁npm install在运行时间容器

  • 运行下面命令将本地目录绑定到运行时间容器和运行npm install.
docker run -it -v $PWD:/nodejsAction openwhisk/action-nodejs-v10 "npm install"

这将留下一个 node_modules 文件夹,其中包含为正确的 运行 时间编译的本机依赖项。

  • 压缩包含 node_modules 目录的动作源文件。
zip -r action.zip *
  • 使用动作存档创建新动作。
ibmcloud wsk action create my-action --kind nodejs:10 action.zip

构建自定义运行时间图像

  • 在构建期间使用 npm install 命令 运行 创建一个 Dockerfile
FROM openwhisk/action-nodejs-v10

RUN npm install fabric-network
  • 构建并将映像推送到 Docker Hub。
$ docker build -t <USERNAME>/custom-runtime .
$ docker push <USERNAME>/custom-runtime
  • 使用自定义运行时间图像创建新动作。
ibmcloud wsk action create my-action --docker <USERNAME>/custom-runtime action.zip

确保 action.zip 中包含的 node_modules 不包含相同的库文件。