Apache OpenWhisk 2.0.0 常用 CLI 命令与工具详解
Apache OpenWhisk 2.0.0 常用 CLI 命令与工具详解,覆盖 wsk 1.2.0 命令体系(action/activation/trigger/rule/package/property/namespace/sdk/list)、属性配置、动作创建调用、激活记录查询、触发器规则联调、Web 动作 HTTP 调用、bash 自动补全工具及全套真实回显
Apache OpenWhisk 2.0.0 常用 CLI 命令与工具详解
目标:系统讲解 Apache OpenWhisk 官方命令行工具 wsk(1.2.0)的完整命令体系与核心用法,覆盖属性配置、动作管理、调用与监控、触发器与规则联调、包管理、Web 动作 HTTP 调用及 bash 自动补全工具,全部命令与回显在 2.0.0 standalone 真实环境实测。
一、环境信息
- wsk CLI:1.2.0(安装位置
/usr/local/bin/wsk) - 服务端:Apache OpenWhisk 2.0.0 standalone 单机模式
- API 地址:
http://172.18.0.1:3233(示例地址,请按实际服务器 IP 替换) - 默认命名空间:guest;默认凭据:
23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP - 运行用户:root(示例账号:root,密码:q1w2e3r4)
二、命令体系总览
wsk --help
回显:
____ ___ _ _ _ _ _
/\ \ / _ \ _ __ ___ _ __ | | | | |__ (_)___| | __
/\ /__\ \ | | | | '_ \ / _ \ '_ \| | | | '_ \| / __| |/ /
/ \____ \ / | |_| | |_) | __/ | | | |/\| | | | | \__ \ <
\ \ / \/ \___/| .__/ \___|_| |_|__/\__|_| |_|_|___/_|\_\
\___\/ tm |_|
Usage:
wsk [command]
Available Commands:
action work with actions
activation work with activations
api work with APIs
help Help about any command
list list entities in the current namespace
namespace work with namespaces
package work with packages
project The OpenWhisk Project Management Tool
property work with whisk properties
rule work with rules
sdk work with the sdk
trigger work with triggers
Flags:
--apihost HOST whisk API HOST
--apiversion VERSION whisk API VERSION
-u, --auth KEY authorization KEY
--cert string client cert
-d, --debug debug level output
-h, --help help for wsk
-i, --insecure bypass certificate checking
--key string client key
-v, --verbose verbose output
Use "wsk [command] --help" for more information about a command.
全局参数(每个子命令通用):
| 参数 | 说明 |
|---|---|
--apihost HOST | 指定 API 地址 |
-u, --auth KEY | 指定鉴权凭据 |
--apiversion VERSION | API 版本(默认 v1) |
-i, --insecure | 跳过证书校验 |
-v, --verbose / -d, --debug | 详细 / 调试输出 |
💡 注意:wsk 1.2.0 不支持
--version参数,执行wsk --version会报Error: unknown flag: --version;版本请用wsk property get --cliversion查看。
三、属性配置与连接(property / namespace)
3.1 查看 CLI 版本
wsk property get --cliversion
回显:
whisk CLI version 2021-04-01T23:49:54.523+0000
3.2 配置 API 地址与凭据
wsk property set --apihost http://172.18.0.1:3233
wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
3.3 查看全部属性
wsk property get --all
回显:
whisk API host http://172.18.0.1:3233
whisk auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
whisk namespace guest
client cert
Client key
whisk API version v1
whisk CLI version 2021-04-01T23:49:54.523+0000
whisk API build ???
whisk API build number standalone
3.4 查看命名空间
wsk namespace list
回显:
namespaces
guest
3.5 查看当前命名空间实体
wsk list
回显:
Entities in namespace: default
packages
actions
triggers
rules
四、动作管理(action)
动作是最小的执行单元,由代码文件 + 运行时 kind 组成。
4.1 创建动作
cat > /tmp/hello.js <<'EOF'
function main(params) {
const name = params.name || "stranger";
return { greeting: "Hello, " + name + "!" };
}
EOF
wsk action create hello /tmp/hello.js --kind nodejs:20
回显:
ok: created action hello
核心参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
--kind KIND | nodejs:20 | 运行时类型(如 nodejs:20、python:3.10、java:8、go:1.20) |
-m, --memory LIMIT | 256 | 单次调用内存上限(MB) |
-t, --timeout LIMIT | 60000 | 超时毫秒数 |
-l, --logsize LIMIT | 10 | 日志上限(MB) |
-p, --param KEY VALUE | - | 绑定默认参数 |
-a, --annotation KEY VALUE | - | 注解 |
-c, --concurrency LIMIT | 1 | 单实例内最大并发激活数 |
--sequence | - | 创建序列动作(逗号分隔的动作名) |
--main string | - | 入口函数名 |
--web string | - | yes/true 创建 Web 动作;raw 创建原始 HTTP 动作 |
4.2 列出动作
wsk action list
回显:
actions
/guest/hello private nodejs:20
4.3 查看动作详情
wsk action get hello
回显:
ok: got action hello
{
"namespace": "guest",
"name": "hello",
"version": "0.0.1",
"exec": { "kind": "nodejs:20", "binary": false },
"annotations": [ {"key":"provide-api-key","value":false}, {"key":"exec","value":"nodejs:20"} ],
"limits": { "timeout": 60000, "memory": 256, "logs": 10, "concurrency": 1 },
"publish": false,
"updated": 1791744029336
}
4.4 更新动作
wsk action update hello /tmp/hello.js -p defaultName OW
回显:
ok: updated action hello
查看更新后的摘要:
wsk action get hello --summary
回显:
action /guest/hello: Returns a result based on parameter defaultName
(parameters: *defaultName)
4.5 删除动作
wsk action delete hello2
回显:
ok: deleted action hello2
五、调用与监控(invoke / activation)
5.1 阻塞调用(等待结果,返回完整对象)
wsk action invoke hello --blocking -p name World
回显(节选):
ok: invoked /_/hello with id 77e664a9d0d7493da664a9d0d7393d7c
{
"activationId": "77e664a9d0d7493da664a9d0d7393d7c",
"duration": 455,
"name": "hello",
"namespace": "guest",
"response": {
"result": { "greeting": "Hello, World!" },
"size": 28,
"status": "success",
"success": true
},
"start": 1791744034865,
"subject": "guest",
"version": "0.0.1"
}
5.2 阻塞调用(只显示结果)
wsk action invoke hello --blocking --result -p name Trae
回显:
{
"greeting": "Hello, Trae!"
}
5.3 异步调用
wsk action invoke hello -p name Async
回显:
ok: invoked /_/hello with id 961257515f2d4e9c9257515f2dde9c11
5.4 列出激活记录
wsk activation list
回显:
Datetime Activation ID Kind Start Duration Status Entity
2026-10-11 18:40:35 961257515f2d4e9c9257515f2dde9c11 nodejs:20 warm 6ms success guest/hello:0.0.1
2026-10-11 18:40:35 0f1c7631433944b39c7631433954b3f7 nodejs:20 warm 5ms success guest/hello:0.0.1
2026-10-11 18:40:34 77e664a9d0d7493da664a9d0d7393d7c nodejs:20 cold 455ms success guest/hello:0.0.1
cold表示冷启动(首次加载运行时),warm表示复用已预热实例;activation list还支持--limit、--since、--upto、--full参数。
5.5 查看最近一次激活详情
wsk activation get --last
回显:
ok: got activation 961257515f2d4e9c9257515f2dde9c11
{ "namespace":"guest","name":"hello","version":"0.0.1","subject":"guest",
"activationId":"961257515f2d4e9c9257515f2dde9c11","start":1791744035636,"end":1791744035642,
"duration":6,"statusCode":0,
"response": { "status":"success","statusCode":0,"success":true,"result":{"greeting":"Hello, Async!"} },
"logs": [], "annotations":[{"key":"path","value":"guest/hello"},{"key":"waitTime","value":12},
{"key":"kind","value":"nodejs:20"},{"key":"limits","value":{"concurrency":1,"logs":10,"memory":256,"timeout":60000}}],
"publish":false }
5.6 查看激活日志
代码带日志输出时(如 console.log("hello2 invoked, name = " + name)):
wsk activation logs --last
回显:
2026-10-11T18:41:19.053544799Z hello2 invoked, name = Logger
5.7 查看激活结果
wsk activation result --last
回显:
{
"greeting": "Hello, Async!"
}
5.8 激活摘要
wsk activation get --last --summary
回显:
activation result for '/guest/hello2' (success at 2026-10-11 18:41:19 +0000 UTC)
{
"greeting": "Hello, Logger!"
}
activation poll可连续监听当前运行动作的日志流(Ctrl+C 退出)。
六、触发器与规则(trigger / rule)
触发器代表事件来源,规则将触发器与动作关联,触发后自动调用动作。
6.1 创建触发器
wsk trigger create mytrigger -p source demo
回显:
ok: created trigger mytrigger
6.2 列出 / 查看触发器
wsk trigger list
回显:
triggers
/guest/mytrigger private
wsk trigger get mytrigger
回显:
ok: got trigger mytrigger
{ "namespace":"guest","name":"mytrigger","version":"0.0.1",
"parameters":[{"key":"source","value":"demo"}], "limits":{}, "publish":false, "updated":1791744040694 }
6.3 手动触发
wsk trigger fire mytrigger -p source fired
回显:
ok: triggered /_/mytrigger with id
6.4 创建规则(关联触发器与动作)
wsk rule create myrule mytrigger hello
回显:
ok: created rule myrule
6.5 列出 / 查看 / 查询规则状态
wsk rule list
回显:
rules
/guest/myrule private active
wsk rule status myrule
回显:
ok: rule myrule is active
wsk rule get myrule
回显:
ok: got rule myrule
{ "namespace":"guest","name":"myrule","version":"0.0.1","status":"active",
"trigger":{"name":"mytrigger","path":"guest"}, "action":{"name":"hello","path":"guest"},
"publish":false, "updated":1791744045411 }
6.6 停用 / 启用 / 删除规则
wsk rule disable myrule
回显:
ok: disabled rule myrule
wsk rule status myrule
回显:
ok: rule myrule is inactive
wsk rule enable myrule
回显:
ok: enabled rule myrule
wsk rule delete myrule
回显:
ok: deleted rule myrule
七、包管理(package)
包用于组织动作并对参数分组绑定,绑定(binding)可复用包并覆盖默认参数。
7.1 创建包
wsk package create mypkg -p pkey pval
回显:
ok: created package mypkg
7.2 列出 / 查看包
wsk package list
回显:
packages
/guest/mypkg private
wsk package get mypkg
回显:
ok: got package mypkg
{ "namespace":"guest","name":"mypkg","version":"0.0.1","publish":false,
"parameters":[{"key":"pkey","value":"pval"}], "binding":{}, "updated":1791744054373 }
7.3 创建包绑定
wsk package bind mypkg mybinding -p bkey bval
回显:
ok: created binding mybinding
7.4 刷新绑定
wsk package refresh
回显(standalone 单机模式无外部包目录,属预期现象):
error: Package refresh for namespace '_' failed: The requested resource could not be found. (code bqMuAWZZz99uY3LVzRa7hXkIqtN7j3vM)
7.5 删除包与绑定
wsk package delete mypkg
wsk package delete mybinding
回显:
ok: deleted package mypkg
ok: deleted package mybinding
八、Web 动作与 HTTP 调用
Web 动作可通过 URL 直接以 HTTP 方式调用,无需鉴权。
8.1 创建 Web 动作
wsk action create webhello /tmp/hello.js --web true
回显:
ok: created action webhello
8.2 获取访问 URL
wsk action get webhello --url
回显:
ok: got action webhello
http://172.18.0.1:3233/api/v1/web/guest/default/webhello
8.3 GET 调用(查询参数)
curl -s "http://172.18.0.1:3233/api/v1/web/guest/default/webhello.json?name=WebUser"
回显:
{ "greeting": "Hello, WebUser!" }
8.4 POST 调用(JSON 请求体)
curl -s -X POST http://172.18.0.1:3233/api/v1/web/guest/default/webhello.json \
-H "Content-Type: application/json" -d '{"name":"BodyUser"}'
回显:
{ "greeting": "Hello, BodyUser!" }
URL 中的
.json指定响应格式(还支持.html、.http、.svg、.text)。
九、辅助工具(sdk / api)
9.1 安装 bash 自动补全
wsk sdk install bashauto --stdout > /etc/bash_completion.d/wsk
source /etc/bash_completion.d/wsk
wsk sdk install bashauto生成 bash 补全脚本,配合--stdout可重定向到系统补全目录;执行后输入wsk action <Tab>即可补全子命令。
9.2 说明:api 命令的可用性
wsk api 系列命令需要 API 网关组件,standalone 单机模式未启用该组件,实测报错:
# wsk api create /demo /hello get webhello
error: Unable to create API: The requested resource does not exist. (code MFcH7wiX1KCmkNXkdaL0T3faY75CVX22)
属预期现象;Web 动作(见第八章)是单机模式推荐的 HTTP 暴露方式。
十、综合示例:完整链路
# 1. 配置连接
wsk property set --apihost http://172.18.0.1:3233
wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
# 2. 创建并调用动作
wsk action create hello /tmp/hello.js --kind nodejs:20
wsk action invoke hello --blocking --result -p name World
# 3. 监控
wsk activation list
wsk activation get --last
# 4. 触发器 + 规则 事件驱动
wsk trigger create mytrigger
wsk rule create myrule mytrigger hello
wsk trigger fire mytrigger -p name Event
# 5. 清理
wsk rule delete myrule
wsk trigger delete mytrigger
wsk action delete hello
十一、注意事项
- 配置项可通过全局参数临时覆盖:
wsk --apihost http://172.18.0.1:3233 -u <KEY> action list,适合多环境切换。 - standalone 为内存存储,服务重启后 action / trigger / rule 全部丢失,需重新创建。
- 动作默认限额:timeout 60000ms、memory 256MB、logs 10MB、concurrency 1。
- 触发器
fire返回的with id后不带具体值,属正常回显。 - 所有示例地址(172.18.0.1)为实测环境值,生产环境请替换为实际服务器 IP。
十二、常见问题
12.1 wsk --version 报 Error: unknown flag: --version
原因:wsk 1.2.0 不支持 --version 参数。
解决:用 wsk property get --cliversion 查看版本。
12.2 连接报 dial tcp [::1]:3233 ... refused
原因:未配置 apihost 时默认解析 localhost 为 ::1,而服务监听 IPv4 地址。
解决:wsk property set --apihost http://<实际IP>:3233 后重试。
12.3 wsk action invoke 返回 HTTP 500 / 调用失败
原因:冷启动拉取标准运行时映像失败(网络受限)或运行时映像缺失。
解决:确认服务端 pull-standard-images = false 且运行时映像(如 openwhisk/action-nodejs-v20:1.22.0)已就绪,再重试调用。
12.4 wsk package refresh 报资源找不到
原因:standalone 单机模式无外部包目录。
解决:属预期现象,忽略即可。
12.5 重启服务后 wsk action list 为空
原因:standalone 使用内存存储。
解决:属正常特性,重新执行 wsk action create 等命令。