使用 Fn Project 搭建无服务平台

目录

下载

脚本直接下载

下载可执行文件

上传

启动 Fn 服务

初始化 Fn 工程

创建 app

部署 function

调用 function

JSON 入参

官方文档


下载

有两种下载方式

脚本直接下载

直接在服务器执行该命令即可

curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh

下载可执行文件

本文演示的是直接下载可执行文件的方式,可以自定义安装路径

下载地址:

Release 0.6.31 · fnproject/cli · GitHubicon-default.png?t=N7T8https://github.com/fnproject/cli/releases/tag/0.6.31

上传

将下载好的 fn_linux 上传到服务器上

这里上传的目录为 /usr/local/my/fnproject

mkdir fnproject

cd /fnproject

#重命名
mv fn_linux fn

#创建软链接,以便在任意路径下执行 fn 命令
ln -s /usr/local/my/fnproject/fn /usr/local/bin/fn

#添加执行权限
chmod 777 ./fn

启动 Fn 服务

启动 fn 服务前必须确保 docker 也启动了,没 docker 需要先下载 docker

# 没下载需先下载 docker
yum install -y docker-ce

# 启动docker
systemctl start docker

# 开机自启动 docker
systemctl enable docker

第一次启动,会去下载基础镜像,默认端口是8080

fn start

启动后,访问服务器 8080 端口

 

初始化 Fn 工程

使用 init 命令创建一个工程模板

fn init --runtime java hello

func.yaml 文件内容如下

其中 cmd 的配置就是最终要执行的方法

 schema_version: 20180708
name: hello
version: 0.0.1
runtime: java
build_image: fnproject/fn-java-fdk-build:jdk17-1.0.186
run_image: fnproject/fn-java-fdk:jre17-1.0.186
cmd: com.example.fn.HelloFunction::handleRequest

创建 app

先创建 app,然后再将刚刚用 init 创建出来的 function(模板工程中的方法) 部署在新建的 app 上

fn create --app myapp

fn list apps

部署 function

# fn deploy <APP_NAME> <FUNCTION_NAME>
fn deploy myapp hello --local

# fn inspect function <APP_NAME> <FUNCTION_NAME>
fn inspect function myapp hello

 部署后会给 function 自动生成一个调用地址,可以通过 inspect 命令来查看该地址

调用 function

可以通过命令行调用

#fn invoke <APP_NAME> <FUNTION_NAME>
fn invoke myapp hello

也可以直接通过接口来调用

curl -X "POST" http://localhost:8080/invoke/01HV1XRSY8NG8G00GZJ0000002

JSON 入参

以上只是直接使用 init 创建的模板工程简单部署个云函数,实际使用中,一般都需要出入参,而出入参则是通过 json 的格式来传递的。

对模板工程做简单的修改即可,将以下两个文件分别修改入参和出参类型

 vim src/main/java/com/example/fn/HelloFunction.java 

 vim src/test/java/com/example/fn/HelloFunctionTest.java

HelloFunction

package com.example.fn;

public class HelloFunction {

    public static class Input {
        public String name;
    }

    public static class Result {
        public String salutation;
    }

    public Result handleRequest(Input input) {
        Result result = new Result();
        result.salutation = "Hello " + input.name;
        return result;
    }

}          

HelloFunctionTest

package com.example.fn;

import com.fnproject.fn.testing.*;
import org.junit.*;

import static org.junit.Assert.*;

public class HelloFunctionTest {

    @Rule
    public final FnTestingRule testing = FnTestingRule.createDefault();

    @Test
    public void shouldReturnGreeting(){
        testing.givenEvent().withBody("{\"name\":\"Bob\"}").enqueue();
        testing.thenRun(HelloFunction.class,"handleRequest");

        FnResult result = testing.getOnlyResult();
        assertEquals("{\"salutation\":\"Hello Bob\"}", result.getBodyAsString());
    }
}

 重新部署

fn deploy --app myapp hello

curl 调用验证

curl -X "POST" -H "Content-Type: application/json" -d '{"name":"Bob"}' http://localhost:8080/invoke/01HV1XRSY8NG8G00GZJ0000002

官方文档

Introduction to Fn with Java (fnproject.io)icon-default.png?t=N7T8https://fnproject.io/tutorials/JavaFDKIntroduction/#AcceptingJSONInput

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-13 23:38:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-13 23:38:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-13 23:38:07       82 阅读
  4. Python语言-面向对象

    2024-04-13 23:38:07       91 阅读

热门阅读

  1. R-tree总结

    2024-04-13 23:38:07       34 阅读
  2. 【并发】面试题汇总

    2024-04-13 23:38:07       37 阅读
  3. 面试题讲解

    2024-04-13 23:38:07       32 阅读
  4. R-tree总结

    2024-04-13 23:38:07       33 阅读
  5. 安全地创建一个临时文件 - mkstemp

    2024-04-13 23:38:07       36 阅读
  6. 游戏&软件测试流程

    2024-04-13 23:38:07       38 阅读
  7. springboot+vue2+mybatisplus实现文件上传

    2024-04-13 23:38:07       29 阅读
  8. mysql 配置说明

    2024-04-13 23:38:07       40 阅读
  9. 【Vue】$emits和props

    2024-04-13 23:38:07       33 阅读
  10. 第8周 Python面向对象编程刷题

    2024-04-13 23:38:07       33 阅读
  11. Rockchip Android13 Vold(三):App层

    2024-04-13 23:38:07       41 阅读