开发函数计算的正确姿势 —— 使用 Fun Local 本地运行与调试

发布时间:2024-08-10 点击:67
云计算
前言
首先介绍下在本文出现的几个比较重要的概念:
函数计算(function compute)
: 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息
参考

fun
: fun 是一个用于支持 serverless 应用部署的工具,能帮助您便捷地管理函数计算、api 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。fun 的更多文档
参考

2.0 版本的 fun,在部署这一块做了很多努力,并提供了比较完善的功能,能够做到将云资源方便、平滑地部署到云端。但该版本,在本地开发上的体验,还有较多的工作要做。于是,我们决定推出 fun local 弥补这一处短板。
fun local
: fun local 作为 fun 的一个子命令存在,只要 fun 的版本大于等于 2.6.0,即可以直接通过
fun local
命令使用。fun local 工具可以将函数计算中的函数在本地完全模拟运行,并提供单步调试的功能,旨在弥补函数计算相对于传统应用开发体验上的短板,并为用户提供一种解决函数计算问题排查的新途径。
《开发函数计算的正确姿势》系列除本篇是为用户介绍 fun local 的使用方法外,其他几篇都会向用户展示 fun local 对于函数计算开发所带来的效率上的巨大提升。
fun local 命令格式
使用
fun local invoke -h
可以查看 fun local invoke 的帮助信息:
$funlocalinvoke-husage:invoke[options]<[service/]function>runyourserverlessapplicationlocallyforquickdevelopment&testing.options:-d,--debug-port<port>usedforlocaldebugging-c,--config<ide>printoutidedebugconfiguration.optionsarevscode-e,--event<path>eventfilecontainingeventdatapassedtothefunction-h,--helpoutputusageinformation本地运行函数
运行函数的命令格式为:
funlocalinvoke[options]<[service/]function>其中 options、service 都是可以省略的。
从调用方式上,可以理解为,fun local invoke 支持通过
函数名
调用,或者
服务名/函数名
的方式调用,即
funlocalinvokefunctionfunlocalinvokeservice/function比如,如果要运行名为 php72 的函数,可以直接通过以下命令完成:
funlocalinvokephp72调用结果为:
再比如,要运行名为 nodejs8 的函数,可以使用:
funlocalinvokenodejs8会得到如下结果:
如果 template.yml 中包含多个服务,而多个服务中包含相同名称的函数时,通过函数名的方式调用 fun 只会
运行第一个名称匹配的函数

如果想要精准匹配,可以使用
服务名/函数名
的方式。
比如想要调用 localdemo 下的 php72,可以使用:
funlocalinvokelocaldemo/php72在本例中,会得到和
fun local invoke php72
一致的结果。
以下是一个运行 nodejs8 函数的演示:
本地运行 java 类型的函数
java 不同于解释型的语言,在作为函数运行前,需要先编译。在我们的例子中,可以进入到 demo 中的 java8 目录,然后执行:
mvnpackage可以看到 log:
[info]skipnonexistingresourcedirectory/users/tan/code/fun/examples/local/java8/src/test/resources[info][info]---maven-compiler-plugin:3.1:testcompile(default-testcompile)@demo---[info]nosourcestocompile[info][info]---maven-surefire-plugin:2.12.4:test(default-test)@demo---[info]noteststorun.[info][info]---maven-dependency-plugin:2.8:copy-dependencies(copy-dependencies)@demo---[info]fc-java-core-1.0.0.jaralreadyexistsindestination.[info][info]---maven-jar-plugin:2.4:jar(default-jar)@demo---[info]------------------------------------------------------------------------[info]buildsuccess[info]------------------------------------------------------------------------[info]totaltime:1.223s[info]finishedat:2018-11-22t10:45:14 08:00[info]finalmemory:15m/309m[info]------------------------------------------------------------------------该命令会在 java8/target 目录下生成 demo-1.0-snapshot.jar 文件。
由于我们在 template.yml 中配置的 codeuri 为 java8/target/demo-1.0-snapshot.jar,因此不需要任何改动,可以直接通过以下命令运行:
funlocalinvokejava8运行结果如下:
以下是一个运行 java8 函数的演示:
本地调试
fun local invoke 支持
-d, --debug-port <port>
选项,可以对函数进行本地单步调试。本文档只介绍如何配置调试,并不涉及调试技巧,更多文章,请
参考

备注:fun local 涉及到的 debugging 技术全部都基于各个语言通用的调试协议实现的,因此无论什么语言的开发者,即使不喜欢用 vscode,只要使用对应语言的 remote debugging 方法都可以进行调试。
本地调试 nodejs、python 类型的函数
对于 nodejs6、nodejs8、python2.7、python3、java8 类型的函数,调试方法基本一致。下面拿 nodejs8 举例。
我们上面演示了可以通过
fun local invoke nodejs8
来运行名称为 nodejs8 的函数,如果想对该函数进行调试,只需要使用 -d 参数,并配置相应的端口号即可。
比如我们以调试方式运行函数,并将调试端口设定在 3000,可以通过下面的命令:
funlocalinvoke-d3000nodejs8另外,推荐添加 –config 参数,在调试的同时,可以输出用来调试的 ide 的配置信息:
funlocalinvoke-d3000--configvscodenodejs8命令执行结果如下:
skippullingimages...youcanpastetheseconfigto.vscode/launch.json,andthenattachtoyourrunningfunction/////////////////configbegin/////////////////{"version":"0.2.0","configurations":[{"name":"fc/localdemo/nodejs8","type":"node","request":"attach","address":"localhost","port":3000,"localroot":"/users/tan/code/fun/examp

域名隐私保护要买么?为什么要使用域名隐私?
主机删掉吧我这边删不掉了
多域名ssl证书价格
便宜好用的云服务器价格
【果断收藏】网站优化的外链这样放,效果才最棒!
可以上传自己的通过控制台来安装吗
RIO鸡尾酒该如何打一场漂亮的翻身仗?
为什么要注册域名?国内域名和国际域名哪个好?