Как использовать пакеты SDK для узлов Hyperledger Fabric в действии IBM Cloud Functions?

#hyperledger-fabric #openwhisk #ibm-cloud-functions

#hyperledger-fabric #openwhisk #ibm-cloud-функции

Вопрос:

Я пытаюсь создать блокчейн IBM Cloud Functions node.js действие, в котором используется пакет SDK узла Hyperledger Fabric, но у меня возникли проблемы с требованием пакета fabric-network в действии.

Поскольку это сторонний пакет, кажется, мне нужно загрузить действие в виде архивированного файла, но когда я это делаю, я вижу:

 "error": "Initialization has failed due to: Error: Failed to load gRPC binary module because it was not installed for the current systemnExpected directory: node-v57-linux-x64-glibcnFound: [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' }
}
 

Каков правильный способ обработки подобных пакетов сторонних производителей?

Ответ №1:

Node.js модули с собственными зависимостями должны быть скомпилированы для той же архитектуры платформы, что и бессерверная среда выполнения. Если вы node_modules объединяете каталог со своей локальной машины разработки, он, вероятно, не будет соответствовать.

Существует два подхода к использованию библиотек с собственными зависимостями…

  1. Запуск npm install внутри контейнера Docker из образов платформы.
  2. Создание пользовательского образа среды выполнения с предварительно установленными библиотеками.

Первый подход самый простой, но его можно использовать только в том случае, если размер zip-файла, содержащего все исходные файлы и библиотеки, меньше предельного размера действия (48 МБ).

Запуск 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
 

Создание пользовательского образа среды выполнения

  • Создайте a Dockerfile с npm install помощью команды, выполняемой во время сборки.
 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
 

Убедитесь node_modules , что включенный в action.zip не включает те же файлы библиотек.

Комментарии:

1. Я бы рекомендовал не включать какие-либо node_modules в action.zip при создании пользовательского образа среды выполнения просто используйте package.json и установите все пакеты npm внутри образа, после чего изображение будет кэшировано action.zip только ваши ваши файлы без каких-либо зависимостей