使用 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 fnprojectcd /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 myappfn 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/618562.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记一次Oracle DG备库实例宕分析

一、问题现象 同事反馈国外点在国内的XXX备库实例宕&#xff0c;尝试将该实例重启&#xff0c;结果重启报如下错误&#xff0c;未能正常启动该数据库。 Standby crash recovery failed to bring standby database to a consistent point because needed redo hasnt arrived yet…

乐写9612手写板实测故障

闲鱼上淘了二手的 ①需要驱动很强的usb口&#xff0c;老usb口会不识别&#xff0c;尤其是笔记本容易不识别&#xff0c;非常容易出现下面这种问题&#xff1a; ②需要microsoft2013以上的&#xff0c;兼容性做的比较差 ③由于可视化&#xff0c;导致数据线容易烧&#xff0c;…

GEE非参数趋势分析(Mk-Sen)

趋势分析是寻找感兴趣的东西正在增加的地方&#xff0c;或者 减少多少。更具体地说&#xff0c;本教程演示了 使用非参数 Mann-Kendall 检测影像中的单调趋势 测试是否存在增加或减少的趋势以及 Sen 的斜率 量化趋势的幅度&#xff08;如果存在&#xff09;。本教程还显示 估计…

缓存与数据库的数据一致性解决方案分析

在现代应用中&#xff0c;缓存技术的使用广泛且至关重要&#xff0c;主要是为了提高数据访问速度和优化系统整体性能。缓存通过在内存或更快速的存储系统中存储经常访问的数据副本&#xff0c;使得数据检索变得迅速&#xff0c;从而避免了每次请求都需要从较慢的主存储&#xf…

OSI七层网络模型 —— 筑梦之路

在信息技术领域&#xff0c;OSI七层模型是一个经典的网络通信框架&#xff0c;它将网络通信分为七个层次&#xff0c;每一层都有其独特的功能和作用。为了帮助记忆这七个层次&#xff0c;有一个巧妙的方法&#xff1a;将每个层次的英文单词首字母组合起来&#xff0c;形成了一句…

腾讯云优惠券详细介绍及领券步骤详解

随着云计算技术的不断发展和普及&#xff0c;越来越多的企业和个人开始选择使用云服务来满足自身的需求。腾讯云作为国内领先的云服务提供商&#xff0c;以其稳定、高效、安全的服务赢得了广大用户的信赖。为了回馈广大用户&#xff0c;腾讯云经常推出各种优惠活动&#xff0c;…

时间序列模型:lag-Llama

项目地址&#xff1a;GitHub - time-series-foundation-models/lag-llama: Lag-Llama: Towards Foundation Models for Probabilistic Time Series Forecasting 论文地址&#xff1a;https://arxiv.org/pdf/2310.08278.pdf hugging-face镜像&#xff1a;https://hf-mirror.c…

THS6.0.1.0开启健康检查(by lqw)

可以在节点管理器或者分组管理的编辑配置里添加以下信息&#xff1a; 之后点监控,点击实时指标&#xff0c;点击HTTP集群统计&#xff1a; 下图是配置并生效的效果&#xff1a; 也可以使用頁面配置&#xff1a; 推荐使用tcp形式&#xff0c;有的应用后端可能不支持http…

学校4-11天梯赛选拔赛

目录 L1-5 6翻了 题目 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 思路 AC代码 L1-1 嫑废话上代码 题目 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; AC代码 L1-8 刮刮彩…

每日练习——leetcode402. 移掉 K 位数字和17. 电话号码的字母组合

目录 402. 移掉 K 位数字 题目描述 解题思路 代码实现 17. 电话号码的字母组合 题目描述 解题思路 代码实现 402. 移掉 K 位数字 题目描述 给你一个以字符串表示的非负整数 num 和一个整数 k &#xff0c;移除这个数中的 k 位数字&#xff0c;使得剩下的数字最小。请…

攻防世界12-baby_web

12-baby_web 题目说想想初始页面是哪个&#xff0c;一般都是index.php&#xff0c;然后如题分析即可。 我们在链接后面拼接上/index.php&#xff0c;返回后发现界面又回到了1.php&#xff0c;有可能是重定向。 我们点击检查-网络&#xff0c;发现没有index的请求&#xff0c;…

LINUX命令行后台运行matlab程序

UBUNTU安装了matlab&#xff0c;需要后台运行matlab程序。 一、MobaXterm程序&#xff08;非后台&#xff09; 使用mobaxterm程序&#xff0c;ssh连接ubuntu&#xff0c;在对应账号中输入matlab&#xff0c;即可基于mobaxterm自带的Xserver可视化界面&#xff0c;打开matlab界…