如何使用 Apache OpenWhisk 开发函数即服务

使用常用语言编写函数,并使用容器构建组件。
254 位读者喜欢这篇文章。
Our cloud-based future demands organizational change

Opensource.com

Apache OpenWhisk 是一个无服务器、开源的云平台,允许您根据任何规模的事件执行代码。Apache OpenWhisk 为开发者提供了一个基于四个概念的简单编程模型:动作触发器规则

动作 是在 Apache OpenWhisk 平台上运行的无状态代码片段。您可以通过 JavaScriptSwiftPythonPHPJava 或任何二进制兼容的可执行文件(包括打包为 Linux 容器的 Go 程序和自定义可执行文件)来开发动作(或函数)。动作可以显式调用或响应事件运行。在任何一种情况下,每次运行动作都会产生一个激活记录,该记录由唯一的激活 ID 标识。动作的输入和动作的结果都是键值对字典,其中键是字符串,值是有效的 JSON 值。

提供事件源;任何人都可以创建新的包供他人使用。

与这些源关联的触发器在事件发生时触发,开发者可以使用规则将动作(或函数)映射到触发器。

以下命令用于在 Apache OpenWhisk 中创建、更新、删除和列出动作

Usage:
  wsk action [command]

Available Commands:
  create      create a new action
  update      update an existing action, or create an action if it does not exist
  invoke      invoke action
  get         get action
  delete      delete action
  list        list all actions in a namespace or actions contained in a package

设置 OpenWhisk

让我们探索一下它是如何在实践中工作的。首先,下载 Minishift 以在您的工作站上创建一个单节点本地 OKD(Kubernetes 的社区发行版,为 Red Hat OpenShift 提供支持)集群

$ minishift start --vm-driver=virtualbox --openshift-version=v3.10.0

一旦 Minishift 启动并运行,您可以使用 admin /admin 登录并创建一个新项目(命名空间)。OpenShift 上的 OpenWhisk 项目提供了部署 Apache OpenWhisk 所需的 OpenShift 模板

$ eval $(minishift oc-env) && eval $(minishift docker-env)
$ oc login $(minishift ip):8443 -u admin -p admin
$ oc new-project faas
$ oc project -q
$ oc process -f https://git.io/openwhisk-template | oc create -f -

Apache OpenWhisk 由许多组件组成,这些组件必须启动并相互同步,此过程可能需要几分钟才能稳定。以下命令将等待组件 pod 运行

$ while $(oc get pods -n faas controller-0 | grep 0/1 > /dev/null); do sleep 1; done

您还可以使用以下命令观看状态

$ while [ -z "`oc logs controller-0 -n faas 2>&1 | grep "invoker status changed"`" ]; do sleep 1; done

开发一个简单的 Java 动作

Maven archetype 是一个 Maven 项目模板工具包。为了创建一个示例 Java 动作项目,您不会引用中央 Maven archetype,但您需要首先生成您自己的 Maven archetype,如下所示

$ git clone https://github.com/apache/incubator-openwhisk-devtools
$ cd incubator-openwhisk-devtools/java-action-archetype
$ mvn -DskipTests clean install
$ cd $PROJECT_HOM

现在让我们创建一个简单的 Java 动作,将其部署到本地 Minishift 上的 OpenWhisk,最后,调用它以查看结果。如下所示创建 Java 动作

$ mvn archetype:generate \
  -DarchetypeGroupId=org.apache.openwhisk.java \
  -DarchetypeArtifactId=java-action-archetype \
  -DarchetypeVersion=1.0-SNAPSHOT \
  -DgroupId=com.example \
  -DartifactId=hello-openwhisk \
  -Dversion=1.0-SNAPSHOT \
  -DinteractiveMode=false

接下来,构建 Java 应用程序并将其部署到本地 Minishift 上的 OpenWhisk

$ cd hello-openwhisk
$ mvn clean package
$ wsk -i action create hello-openwhisk target/hello-openwhisk.jar --main com.example.FunctionApp

创建函数 hello-openwhisk 后,通过调用它来验证该函数

$ wsk -i action invoke hello-openwhisk --result

由于所有 OpenWhisk 动作都是异步的,因此您需要添加 --result 以在控制台上显示结果。成功执行命令将显示以下输出

{"greetings":  "Hello! Welcome to OpenWhisk" }

结论

借助 Apache OpenWhisk,您可以使用常用语言(如 NodeJS、Swift、Java、Go、Scala、Python、PHPRuby)编写函数,并使用容器构建组件。它轻松支持多种部署选项,包括本地部署和云基础设施(如 KubernetesOpenShift)内的部署。

下一步阅读
标签
danieloh
技术营销,开发者倡导者,CNCF 大使,公开演讲者,出版作家,Quarkus,红帽运行时

评论已关闭。

© . All rights reserved.