一种在 IBM OpenWhisk 中配置和调用操作的简单方法(1)
- UID
- 1066743
|
一种在 IBM OpenWhisk 中配置和调用操作的简单方法(1)
IBM OpenWhisk 是一种简单的开源服务,它可以根据需要快速启动和运行代码片段,以响应传入的 REST 请求。查阅 。在本教程中,我首先将介绍如何手动发出 OpenWhisk 命令。然后介绍如何使用我创建的 Python 库让命令执行变得更简单。
我非常渴望试用 OpenWhisk,因为我听说它具有两大优势:配置很容易,费用比在长期运行的机器上运行应用程序还要低。在了解了 后,我创建并发布了一个微型的 Python 库 openWhiskLib.py,以简化这些任务(如下图左侧所示):
- 在 OpenWhisk 中准备一个 JavaScript 操作
- 调用操作
完成本教程要做的准备工作- 一个 Bluemix 帐户。(注册您的 ,如果您已经有一个帐户,请 。)
- 一个带 Ubuntu Linux 14.04 的虚拟机(本教程中的步骤针对的是一台 Ubuntu Linux 机器,但其他操作系统的步骤应该与此类似。)
1
设置 OpenWhisk 客户端机器
启动一个带 Ubuntu Linux 14.04 的虚拟机,以根用户身份进行登录,并应用最新的更新:
apt-get -y update ; apt-get -y dist-upgrade
|
您现在可以使用此机器将 “Hello world” 应用程序上传到 OpenWhisk,如下面的第 3 步所示。
2
安装、配置和测试 OpenWhisk 客户端
- 注册 Bluemix 并访问 。在屏幕上,您现在会看到 3 个步骤,以及为您的 Bluemix 帐户自定义的参数。
- 在您的 OpenWhisk 客户端机器上执行以下 3 步:
- 第 1 步:下载 OpenWhisk CLI,解压该文件,并将可执行的 wsk 添加到您的路径。
- 第 2 步:运行 wsk property set...此命令会将您的 Bluemix 凭证写入您的 OpenWhisk 客户端机器上一个隐藏的文件中。对我而言,它在我的主目录中创建了这个隐藏文件:.wskprops
提示:保存这个隐藏文件。我们将为 Python 库的环境变量使用本教程后面的一些参数。
- 第 3 步:wsk action invoke...此命令与 Bluemix 上的 OpenWhisk 服务通信,确认您的凭证有效。几秒后,wsk 会发回一个包含单词 ‘hello’ 的 JSON 结构作为响应。大功告成!
为了增加点趣味性,可以将消息字符串从 ‘hello’ 更改为其他文字并重复该操作。响应应包含您的新字符串。
提示:Verbose Mode
如果您将 -v 参数添加到 wsk 命令,则会显示发送到服务器的 HTTP 请求。我发现此功能对调试和发现发出 REST 请求需要的参数非常有用。( 介绍了更多细节。)
3
将此操作文件上传到 Bluemix 上的 OpenWhisk 服务
中提供了一个操作文件的简单 JavaScript 代码段。
- 发出教程中所示的 wsk 命令,以创建、使用和删除操作文件。
- 使用 -v 选项重复执行这些命令。这会显示从命令行发出这些命令所需的 REST 请求和参数。以下是一个示例:
在您的 OpenWhisk 客户端机器上创建一个名为 ‘hello.js’ 的文件:
1
2
3
| function main() {
return {payload: 'hello'};
}
|
- 现在发出 wsk 命令来上传 hello.js。以下是我试用的命令(为保护隐私,我的用户名和凭证已被模糊化):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| wsk -v action create hello hello.js
{'apihost': 'openwhisk.ng.bluemix.net', 'namespace': 'user@example.com_dev', 'clibuild': '2016-
05-24T09:54:44-05:00', 'apiversion': 'v1'}
========
REQUEST:
PUT https://openwhisk.ng.bluemix.net/api/v1/namespaces/user
%40example.com_dev/actions/hello
Headers sent:
{
"Authorization": "Basic
S3sjGo6dKeKSIIRENS135xOsT3jEs7IiS3sjGo6dKeKSIIRENS135xOsT3jEs7Ii",
"Content-Type": "application/json"
}
Body sent:
{"exec": {"kind": "nodejs", "code": "function main() {\n return {payload: 'hello'};\n}\n"}}
|
备注:
- 请求标头的 Auth 字符串不同于 .wskprops 中存储的字符串。(我认为它采用的是 base 64 编码。)
- hello.js 的内容以长字符串形式包含在请求主体中的 code 变量中。
|
|
|
|
|
|