#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
объединяете каталог со своей локальной машины разработки, он, вероятно, не будет соответствовать.
Существует два подхода к использованию библиотек с собственными зависимостями…
- Запуск
npm install
внутри контейнера Docker из образов платформы. - Создание пользовательского образа среды выполнения с предварительно установленными библиотеками.
Первый подход самый простой, но его можно использовать только в том случае, если размер 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 только ваши ваши файлы без каких-либо зависимостей