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 OpenWhiskApache OpenWhisk2026/10/12

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 VERSIONAPI 版本(默认 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 KINDnodejs:20运行时类型(如 nodejs:20、python:3.10、java:8、go:1.20)
-m, --memory LIMIT256单次调用内存上限(MB)
-t, --timeout LIMIT60000超时毫秒数
-l, --logsize LIMIT10日志上限(MB)
-p, --param KEY VALUE-绑定默认参数
-a, --annotation KEY VALUE-注解
-c, --concurrency LIMIT1单实例内最大并发激活数
--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 等命令。

十三、参考链接