阿里云函数计算(一)

article/2025/11/10 6:32:28

最近接触到了阿里云的函数计算的服务,经过几天的尝试还是有所收获,因此不妨把学习过程中的点滴记录下来,方便以后温习。

什么是函数计算

根据阿里云的中的相关介绍,可以知道函数计算是事件驱动的全托管计算服务。用户无需管理服务器等基础设施,只需编写代码并上传,函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码,并提供日志查询、性能监控、报警等功能。从而实现了函数即服务。更多介绍可以参考阿里云函数计算

快速建立一个函数计算服务

新建项目并引入相关的依赖

在建立一个函数计算之前,首先要在阿里云开通函数计算的服务。阿里云函数计算目前支持Java(Java8),NodeJS(nodejs6,nodejs8),Python (Python2.7,Python3.6) 3种语言。本文主要详细记录Java环境下的搭建过程。
首先在IDEA中新建一个Maven项目,若在那个在代码中正常使用函数计算,需要在pom.xml文件中加入对应的依赖:

<dependency><groupId>com.aliyun.fc.runtime</groupId><artifactId>fc-java-core</artifactId><version>1.0.0</version>
</dependency>

创建实现函数计算接口的类

正常导入依赖后,在java目录下新建一个实现函数计算预定义接口的类FCController。函数计算目前有 2 个预定义的接口可以实现,StreamRequestHandler以及PojoRequestHandler。我们先以StreamRequestHandler举例,查看StreamRequestHandler接口的代码:

public interface StreamRequestHandler {void handleRequest(InputStream var1, OutputStream var2, Context var3) throws IOException;
}

StreamRequestHandler接口只定义了一个无返回值的方法,输入以及输出均以流的方式实现,而context 是函数计算在运行时生成的一个包含一些运行时的信息对象。在FCController中重写该方法:

package example;
import ...
public class FCController implements StreamRequestHandler{@Overridepublic void handleRequest(InputStream inputStream, OutputStream outputStream, Context context)throws IOException{outputStream.write("Hello Function Compute".getBytes());}
}

到目前为止,一个最简单的函数计算的代码已经编写完成。

将代码打包

我们在开发中通常会使用到自定义的模块,因此在打jar包时需要将它们一起打包。Maven下可以通过使用maven-assembly-plugin 插件来进行打包。在pom.xml文件中加入如下代码:

  <build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><version>3.1.0</version><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><appendAssemblyId>false</appendAssemblyId> <!-- this is used for not append id to the jar name --></configuration><executions><execution><id>make-assembly</id> <!-- this is used for inheritance merges --><phase>package</phase> <!-- bind to the packaging phase --><goals><goal>single</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>

然后使用mvn clean package进行打包。打包成功后在target文件夹下生成了可执行的jar包。

配置函数计算

jar包生成后,网页打开阿里云函数计算控制台,依照以下几步完成函数计算的创建:

  • 新建服务:填写服务的名称。
  • 新建函数:函数模板下选择语言环境,本例选择Java8,选择空白函数进入下一步。
  • 触发器配置:根据需要选择触发器。每个函数只可以配置一种触发器。此处选择了不设置触发器。尽管如此,触发器依然可以在后面进行添加。
  • 基础管理配置:填写新建的函数名称,注意选择正确的运行环境。运行环境选择Java后,下方会有进一步的配置,可以通过OSS或者直接上传代码包上传代码。直接上传限制上传文件的大小不得超过5M。环境配置中输入正确的函数入口,依照"[package].[class]::[method]"的格式进行配置,如上文代码中,包名为example,类名为FCController,方法名为handleRequest,因此函数入口应当为example.FCController::handleRequest 。
  • 权限配置:此处跳过。
  • 核对信息:最后核对配置的信息,无误即可点击创建。

执行函数计算

经过上述的步骤,函数计算已经可以成功创建。我们上传的代码包在执行之前,会被解压缩,之后才会被加载,执行,因此不妨解压生成的jar文件,看一下文件结构。根目录.png
example目录.png
我们可以看到在example文件下有编译后的FCController.class文件,而文件的路径符合之前填写的函数入口。回到函数计算控制台,点击执行来执行我们上传的程序并返回结果。

执行结果.png

至此,一个最简单的函数计算已经成功实现。

触发器配置

在已经创建的函数界面可以看到如下四个窗口:
window.png

  • 概览 在概览中可以对函数的属性进行修改,例如我们在代码中修改了类名,对应的函数入口也应当进行变更。
  • 代码执行 在代码执行中可以执行已上传的代码,查看执行结果等。除此也可以上传新的代码包,注意上传之后需要点击保存才能是刚刚上传的代码包生效,否则函数计算执行的依然是之前的程序代码。
  • 触发器 显而易见,尽管之前没有配置触发器,我们依然可以在建立函数之后有选择的创建。
  • 日志查询 在日志查询中可以配置相关的日志查询服务。

我们进入到触发器窗口中,并且点击创建触发器,如图:
trigger.png

关于触发器的介绍可以参考阿里云关于触发器的相关介绍。值得一提的是,文档在关于HTTP触发器的介绍中写道暂不支持HTTP触发器,然而细心的可以在上图中看到服务类型中含有HTTP触发器,并且可以正常选中。选中之后填写触发器的相关信息。请求方法可以选择多个。点击创建后,发现已经添加了HTTP触发器。HTTPTrigger.png
回到之前提及到的函数创建的触发器配置步骤中,倘若在此处选择HTTP触发器,在下一步基础配置管理中的运行环境下是无法选择Java运行环境的。NO JAVA 8.png
创建好触发器后,回到代码执行窗口,可以看到界面多出来了一个调试HTTP触发器。复制链接,在RestClient中实用Get方法请求,可以看到请求成功并且返回正确的结果。
response.png

很明显,看我们不仅创建了文档中所述的不支持Java运行环境的HTTP触发器,并且验证了创建的这个HTTP触发器是可以正常使用的。因此,目前如果你想创建一个HTTP触发器的Java运行环境的函数计算,切记在创建函数时选择不创建触发器,在函数创建成功后再添加HTTP触发器。

函数计算进阶

在实际开发中,我们的服务往往会接受一些参数,对这些参数或根据这些参数来进行下一步的代码编写,因此,Java写的函数计算若要实现此功能需要实现PojoRequestHandler。PojoRequestHandler需要我们提供两个Pojo类,分别用于输入以及输出。先上代码:

@Data
public class Input {private Integer num;private String name;private Boolean tag;private List<Integer> integerList;private Map<String,Integer> stringIntegerMap;private Person person;
}

@Data
@Builder
public class Output {private Integer length;private String welcome;private Boolean ifSuccess;private List<Integer> integerList;private Map<String, Integer> stringIntegerMap;private Person person;

@Data
@AllArgsConstructor
public class Person {private Integer age;private String gender;
}

public class FCController implements PojoRequestHandler<Input, Output> {@Overridepublic Output handleRequest(Input input, Context context){return Output.builder().length(input.getIntegerList().size()).welcome("Hello "+ input.getName()).ifSuccess(!input.getTag()).integerList(input.getIntegerList().stream().map(l -> l+2).collect(Collectors.toList())).stringIntegerMap(input.getStringIntegerMap()).person(new Person(100,"female")).build();}public static void main(String[] args){}
}

Input类用于接收参数,定义了一些常用类型的属性。Output类用于返回结果。FCController类实现了预定义的PojoRequestHandler接口,并重写了handleRequest方法,接收Input类为输入,并以Output类为输出。打包后上传函数计算控制台,上传后记得点击保存保证计算使用最近更新的包。HTTP触发器中请求选择选择POST方法,Body的row下填入要传入的参数。例如:

{
"num": 10,
"name": "lwf",
"tag": false,
"integerList": [1, 2, 3, 4, 5, 6, 7],
"stringIntegerMap": {"key": 10
},
"person": {"age": 50,"gender": "male"
}
}

点击执行,返回结果。
success.png
到此我们已经实现了如何编写代码使得在函数计算下来接受参数值完成我们的业务。具体代码见GitHub,target下的jar包可以直接上传到函数计算中进行PojoRequestHandler的测试。


http://chatgpt.dhexx.cn/article/GKPbcjcE.shtml

相关文章

yolov5目标检测神经网络——损失函数计算原理

前面已经写了4篇关于yolov5的文章&#xff0c;链接如下&#xff1a; 1、基于libtorch的yolov5目标检测网络实现——COCO数据集json标签文件解析 2、基于libtorch的yolov5目标检测网络实现(2)——网络结构实现 3、基于libtorch的yolov5目标检测网络实现(3)——Kmeans聚类获取anc…

计算机上怎么用函数算比例,如何使用Excel函数计算所占的比例

通过Excel的函数的使用&#xff0c;我们可以轻松计算出某种产品在同类或总产品中所占的比例。 下面是一个实例&#xff0c;希望对您有帮助。 如上图&#xff0c;我们所要计算的是&#xff0c;男女款的服装&#xff0c;各占同类款式的比例分别为多少。 比如&#xff0c;A2单元格…

python中三角函数计算

1、采用math库计算 #!/usr/bin/python import mathprint "cos(3) : ", math.cos(3) print "cos(-3) : ", math.cos(-3) print "cos(0) : ", math.cos(0) print "cos(math.pi) : ", math.cos(math.pi) print "cos(2*math.pi) : &…

计算机及格人数函数公式大全,excel函数计算及格人数和合格人数

下面小编为大家介绍如何利用excel函数计算及格人数和合格人数方法&#xff0c;有需要的朋友快快来学习吧&#xff01; 步骤 用countif函数计算单科及格人数。如图&#xff0c;分别在单元格内输人函数&#xff0c;计算出语文及格人数和数学及格人数。 合格人数要求计算出语文和数…

年龄的计算方式计算机函数,excel使用时间函数计算年龄 使用Excel函数计算年龄的三种方法...

excel使用时间函数计算年龄 使用Excel函数计算年龄的三种方法,听说excel的教程在抖音很火,很多白领小朋友都在争相学习,下面就跟小编一起学习一下excel使用时间函数计算年龄的新技能吧,看完excel使用时间函数计算年龄 使用Excel函数计算年龄的三种方法会帮助你完成很多复杂…

python 三角函数 计算

今天做结构的时候突然要算一下角度&#xff0c;就想用python简单计算一下&#xff0c;结果发现&#xff0c;中学学的三角函数内容全喂狗了。 python中三角函数计算当然就是直接进math库&#xff0c;这没啥说的&#xff0c;导入这个库就行。但是下边计算的时候度这个东西就难搞…

计算机total函数,Excel中怎样用subtotal函数计算总值

Excel计算各种总计值的SUBTOTAL函数是如何使用的呢?具体该怎么去进行操作?对于不常用函数的朋友或许有点难度&#xff0c;今天&#xff0c;学习啦小编就教大家在Excel中subtotal函数计算各种总计值的操作方法&#xff0c;欢迎大家来到学习啦学习。 Excel中subtotal函数计算各…

一文搞懂函数计算及其工作原理

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 什么是函数计算&#xff1f; 大家都了解&#xff0c;Serverless 并不是没有服务器&#xff0c;而是开发者不再需要关心服务器…

函数计算简介

什么是函数计算 大家都了解&#xff0c;Serverless 并不是没有服务器&#xff0c;而是开发者不再需要关心服务器。下图是一个应用从开发到上线的对比图&#xff1a; 在传统 Serverful 架构下&#xff0c;部署一个应用需要购买服务器&#xff0c;部署操作系统&#xff0c;搭建开…

Excel常用函数公式20例

目录 一、【IF函数条件判断】 二、【多条件判断】 三、【条件求和】 四、【多条件求和】 五、【条件计数】 六、【多条件计数】 七、【条件查找】 八、【多条件查找】 九、【计算文本算式】 十、【合并多个单元格内容】 十一、【合并带格式的单元格内容】 十二、…

excel函数公式大全,最常用的6个公式

Excel中的函数引用一些预定义的公式&#xff0c;可以通过输入参数值来计算函数的对应函数&#xff0c;并且函数名称基本上与函数相对应&#xff0c;这很容易记住。在日常工作中&#xff0c;功能可用于数据统计、计算、处理和分析。本文主要介绍EXCEL中一些常用公式&#xff0c;…

前端入门(雷云特效,css)

&#xff08;推荐个别人写的css特效网站CSS3的奇思妙想&#xff0c;感觉有好多蛮好玩的功能&#xff0c;这个特效是在里面偏下面一点的位置&#xff09; &#xff08;最好还是看一下动画的演示效果&#xff0c;直接复制粘贴就行了&#xff09; 实现原理其实很简单&#xff0c;…

那些让人惊叹的前端特效

大鲨鱼 3D隧道 3D液体 更多特效请看在线效果 在线演示地址 http://gnipbao.github.io/css3-test/menu.html

前端特效——简单下雪(纯css)

原理&#xff1a; 雪花背景平铺&#xff0c;背景图片位置向右下移动的动画 缺点&#xff1a;不会永远都向下移动&#xff0c;动画时间结束会闪回去首帧 实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&q…

【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个响应式网站登陆页面|使用全屏可拖动图像滑块~手把手一步一步教学 ~快来收藏吧!

b站视频演示效果: 【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个响应式网站登陆页面|使用全屏可拖动图像滑块~手把手一步一步教学 ~快来收藏吧! 效果图: 用到的图片在后面: 完整代码: <!DOCTYPE html> <html lang="en" dir="ltr"…

前端特效-HTML+CSS - 图片悬浮效果

实现的效果 html部分 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible…

前端特效——时钟

方法一&#xff1a;htmljs <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>钟表</title> </head> <body> <style type"text/css">.time{width:200px;height:50px;background:#030303;c…

前端特效——复杂下雪,雪花纷飞(纯css)

效果&#xff1a; 原理&#xff1a; 因为是用的纯css&#xff0c;所以为了实现很多个雪花&#xff0c;我们就需要创建200个div&#xff08; 数量适量多即可&#xff09; 然后先设置雪花div的共同属性&#xff1a;雪花的背景图片是雪花&#xff0c;给初始大小width: 10px;heig…

前端特效 —— 八卦图旋转(纯css)

原理&#xff1a; 用div的左边框和右边框实现两个半圆 然后用div的before 和 after 伪元素 画 两个小圆 注意&#xff1a;伪元素不加绝对定位&#xff0c;怎么完整显示出来&#xff1f;转为块级元素&#xff0c;宽高就生效了。 然后把小圆的位置移到中间即可 最后加上旋转的…

精美的web前端源码的特效

1.JS自定义烟花特效 这是一款基于JS和Canvas的自定义烟花特效&#xff0c;初始化界面的时候特效是不带声效的绽放&#xff0c;当你点击顶部中间的播放&#xff0c;即可以看到美丽的烟火也可以听到烟花绽放的声音&#xff0c;让你脑海浮现过年团圆放烟火的画面。当然除了声音的…