第一个列子,当然是 Hello World
了… 下面使用 Python
, Go
, Java
分别实现…
首先准备好目录:
└── helloworld
├── go
├── java
└── python
Python
使用CLI创建 function faas-cli new --lang python hello-world
, 会自动生成以下文件
└── helloworld
├── go
├── java
└── python
├── hello-world
│ ├── handler.py
│ └── requirements.txt #如果有dependency的话,就放进这里
├── hello-world.yml
└── template #会有很多template,暂时先ignore
其中,handler.py
就是处理 request的 handler,这里我们先实现 hello world的逻辑
def handle(req):
resp='Hello Rex, ' + req
print(resp)
return resp
之后使用配置文件hello-world.yml
来build func,
version: 1.0
provider:
name: openfaas #唯一的provider,value只能为openfaas
gateway: http://<your-ip>:31112
functions:
hello-world:
lang: python
handler: ./hello-world
image: openfaas-hello-world:latest
运行faas-cli build -f ./hello-world.yml
之后,openfaas就将这个funct打包成一个新的image
$ docker image ls | grep hello
openfaas-hello-world latest 3 minutes ago 87.1MB
接下来就是部署和测试了,faas-cli deploy --image openfaas-hello-world --name hello-world-python
当然如果需要将新func upload到 Registry/Artifactory上,
faas-cli push -f ./hello-world.yml
,这之前需要配置secret
Golang
类似的,使用faas-cli new --lang go hello-world
创建新function;同样的,openfaas会创建一下几个文件
└── helloworld
├── go
│ ├── hello-world
│ │ └── handler.go
│ ├── hello-world.yml
│ └── template
添加handler实现
package function
import (
"fmt"
)
func Handle(req []byte) string {
return fmt.Sprintf("Hello Rex: %s", string(req))
}
部署并测试function
faas-cli build -f ./hello-world.yml
faas-cli deploy --image openfaas-hello-world-go --name hello-world-go
Java
同样的套路,只不过java有几个版本可以选,java8还是11之类的,faas-cli new --lang java8 hello-world
Java自动生成的目录结构较Python和Go有很大不同,起码使用gradle
build
java
├── hello-world
│ ├── build.gradle
│ ├── gradle
│ │ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── settings.gradle
│ └── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── openfaas
│ │ └── function
│ │ └── Handler.java
│ └── test
│ └── java
│ └── HandlerTest.java
├── hello-world.yml
└── template
直奔Handler,java
package com.openfaas.function;
import com.openfaas.model.IHandler;
import com.openfaas.model.IResponse;
import com.openfaas.model.IRequest;
import com.openfaas.model.Response;
public class Handler implements com.openfaas.model.IHandler {
public IResponse Handle(IRequest req) {
Response res = new Response();
res.setBody("Hello Rex, " + req.getBody());
return res;
}
}
之后就是部署并测试
faas-cli build -f ./hello-world.yml
faas-cli deploy --image openfaas-hello-world-java8 --name hello-world-java
这样,基本算是hello world级别的了解了openfaas;那下一篇就深入的了解下openfaas
最后,还是想多说一句,关于语言这方面的;本人Java是主语言,但是很多时候愿意尝试使用其他语言来完成具体的task,并不是说Java不好,不好能tag我自己是Java程序员么,而是说什么场景用什么东西,比如机器学习能不用Python
么,Spark
能不用scala
么;就像到了人家的一亩三分地上,那就得尊敬人家啊…
就像这里FaaS
,Function as a Service
,Function
啊,Java作为面向对象而非面向过程语言,显然不适合…
$ docker image ls | grep hello
openfaas-hello-world-go latest 25.1MB
openfaas-hello-world-python latest 87.1MB
openfaas-hello-world-java8 latest 141MB