OpenFaaS 101 - 3:Hello World

第一个列子,当然是 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有很大不同,起码使用gradlebuild

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么;就像到了人家的一亩三分地上,那就得尊敬人家啊…

就像这里FaaSFunction as a ServiceFunction啊,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
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值