Постановка задачи:

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. Не стесняйтесь оставлять свои комментарии ниже. Наслаждаться! 👍