Постановка задачи:
OpenWhisk имеет ограничение на создание действий Node.js6/8, которые зависят от внешних сторонних модулей. Мы должны установить такие модули локально на клиенте перед созданием нового действия и упаковать их как часть источника действия. Например, мы хотим создать действие helloworld
в среде выполнения Node.js6. Наше действие helloworld
использует модуль NPM под названиемstring-format
, который недоступен в контейнере среды выполнения Node.js6 (созданный с использованием openwhisk/nodejs6action
образа докера). В нашем образце источника действия есть два файла:
$ cd nodejs/actions/helloworld $ ls -1 index.js package.json
index.js содержит:
package.json содержит:
Теперь нам нужно установить string-format
локально и упаковать его исходный код вместе с index.js
и package.json
в zip-файл с именем helloworld.zip
:
$ cd nodejs/actions/helloworld
$ npm install --production
$ ls -1
index.js
node_modules/
package.json
$ zip -rq helloworld.zip *
Создайте действие, используя файл helloworld.zip
:
$ wsk action create helloworld --kind nodejs:6 helloworld.zip
$ wsk action invoke helloworld -r --blocking --param name Amy
{
"message": "Hello, Amy!"
}
Решение:
Теперь это немного длительный процесс для создания действия, которое зависит от сторонних модулей, и по этой причине мы решили внести новшества и создать действие OpenWhisk build/nodejs, которое может устанавливать и упаковывать внешние модули на стороне сервера для нас. перед созданием предполагаемого действия.
Позвольте мне сначала показать вам, как создать helloworld
с помощью build/nodejs
(при условии, что build/nodejs
является частью вашего сервера OpenWhisk):
$ cd nodejs/actions/helloworld $ ls -1 index.js package.json $ zip -rq helloworld.zip index.js package.json $ wsk action invoke build/nodejs --blocking --param action_name helloworld --param action_data `cat helloworld.zip | base64`
Здесь helloworld
использует модуль узла string-format
, который раньше был недоступен, но был установлен build/nodejs
как часть создания действия. Тест helloworld
с:
$ wsk action invoke helloworld -r --blocking --param name Amy
{
"message": "Hello, Amy!"
}
Плюсы:
- Это решение упрощает создание действий за счет установки сторонних модулей и упаковки их с предполагаемым действием на сервере.
- Модули NPM, установленные один раз
build/nodejs
, доступны для дальнейшего использования любыми другими действиями Node.js. Это сокращает время создания действия для последующих действий на несколько секунд, так как не нужно снова устанавливать тот же пакет. - Этот подход уменьшает размер zip-файла, поскольку сторонние модули не упаковываются вместе с файлами действий. Это помогает ускорить развертывание и, что наиболее важно, остается в пределах 48 МБ для исходного кода действия.
Установка:
Этот сценарий установки может помочь вам развернуть build/nodejs
на вашем собственном сервере OpenWhisk. Бегать:
./install.sh <authkey> <edgehost> <apihost>
Где ‹authkey› — это ключ аутентификации администратора с доступом к whist.system, ‹edgehost› и ‹apihost› — это имя хоста/IP-адрес сервера OpenWhisk, на котором запущены соответствующие службы.
Вы можете поэкспериментировать build/nodejs
сами! Ознакомьтесь с этой автоматизацией здесь на GitHub. Не стесняйтесь оставлять свои комментарии ниже. Наслаждаться! 👍