陈奇网络工作室

开发函数计算的正确态度使用——funlocal本地执行和调试

云计算

前言

首先,介绍本文中出现的几个重要概念。

函数计算)

函数计算是一种事件驱动的服务,通过函数计算,用户无需管理服务等的执行情况,只需编写和上传代码即可。 函数计算准备计算资源,以灵活可扩展的方式执行用户代码。 用户只需根据执行实际代码所消耗的资源来付费。 使用函数计算详细信息

参考。

Fun

: Fun是用于支持server less APP部署的工具,可以轻松管理函数计算、API网关和日志服务等资源。 通过资源配置文件( template.yml )帮助执行开发、生成和部署操作。 Fun的其他文档

参考。

2.0版的Fun在部署方面做了大量努力,并提供了相对高级的功能,使云资源可以轻松、顺利地部署到云中。 但是,这个版本在本地开发中的体验很多,还有很多事情要做。 于是,我们决定推出Fun Local来弥补这块短板。

Fun Local

: Fun Local作为Fun的子命令存在,如果Fun的版本为2.6.0或更高,则可以直接通过

fun local

使用命令。 Fun Local工具可在本地完全模拟和执行函数计算中的函数,提供单步调试功能以弥补函数计算比传统APP应用开发体验短的部分,并为用户提供了解决函数计算故障的新方法

在《开发函数计算的正确姿势》系列中,除了本篇向用户介绍fun local的使用方法之外,还介绍几个fun local在函数计算开发方面的大幅效率化。

Fun Local命令格式

使用

fun local invoke -h

可以查看fun local invoke的帮助信息。

$funlocalinvoke-h

usage:invoke [ options ] [ service/] function

runyourserverlessapplicationlocallyforquickdevelopmenttesting。

Options:-d,--debug-portportusedforlocaldebugging

-c,----configideprintoutidedebugconfiguration.optionsarevscode---eventpatheventfilecontaingeventdatapasedthote

-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

你可以看到日志:

[ info ] skipnonexistingresourcedirectory/users/tan/code/fun/examples/local/Java8/src/test/resources

[INFO]

[ info ]---- maven-compiler-plugin:3.1:test compile ( default-test compile ),demo---------------------------------- -

[INFO]Nosourcestocompile

[INFO]

[ info ]---maven-surefire-plugin:2.12.4:test ( default-test ) @demo---

[信息] 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

[ info ]构建子进程

请参阅[ info ]------------ info

[INFO]Totaltime:1.223s

[ info ] finished at:2018-11-22t 10:45:1408:00 [ info ] final memory:15m/309 m

请参阅[ info ]------------ info

此命令在java8/target目录下生成demo-1.0-SNAPSHOT.jar文件。

在template.yml中配置的CodeUri是Java8/target/demo-1.0-snapshot.jar,因此无需进行任何更改,即可直接从以下命令执行:

funlocalinvokejava8

执行结果如下。

以下是执行java8函数的演示。

本地调试

fun local invoke支持

-d,- -调试端口

选项,可以在本地单步调试函数。 本文档介绍如何配置调试。 没有涉及调试技巧。 有关更多文章,请参见

参考。

备注:所有涉及Fun Local的调试技术都是基于每种语言通用的调试协议实现的,任何语言的开发人员,即使不喜欢VSCode,都可以使用支持的语言远程调试方法进行调试。

本地调试nodejs、python类型的函数

对于nodejs6、nodejs8、python2.7、python3和java8类型的函数,调试方法基本一致。 以nodejs8为例。

我们向上面表明了能合格

fun local invoke nodejs8

执行名为nodejs8的函数。 如果要调试此函数,只需使用-d参数并设置相应的端口号。

例如,如果在调试中运行函数并将调试端口设置为3000,则可以使用以下命令:

funlocalinvoke-d3000nodejs8

此外,建议添加config参数。 在调试的同时,可以输出用于调试的IDE的配置信息。

funlocalinvoke-d 3000---- configvscodenodejs 8

命令的执行结果如下所示。

skippullingimages .

youcanpastetheseconfigto.vs code/launch.JSON,andthenattachtoyourrunningfunction

///////////////(version((0.2.0)、configuration ) )、configuration

{& #039; name& #039; & #039; fc/localdemo/nodejs8& #039;& #039; type& #039; & #039; 节点& amp; #039;& #039; 请求和映射; #039; & #039; attach& #039;& #039; 地址& amp; #039; & #039; localhost& #039;& #039; ppt& #039; & #039; 本地根& amp; #039; & #039;/users/tan/code/fun/examples/local/node js8 & amp; #039;& #039; 远程超级用户& amp; #039; & #039; /code& #039;& #039; 协议和映射; #039; & #039; iii

}

]

}

////////////debuggerlisteningonws://0.0.0//3000

forhelpsee https://nodejs.org/en/docs/inspector

程序在此处被阻止,不会再执行。 在连接IDE之前,不会运行程序。 接下来介绍VSCode配置、VSCode调试两个方面。

其中,仅在第一次调试函数时才需要VSCode配置,如果已经配置,则不需要重新配置。

vs代码配置

创建vscode launch.json文件

将日志中config begin和config end之间的配置复制到launch.json。

上述设置完成后,将显示在调试视图中设置的函数列表。

至此,VSCode配置完成。 VSCode的更多配置知识值得借鉴

正式文档。

vs代码调试

成功设置VSCode后,只需单击VSCode编辑器侧栏中的断点进行设置,然后单击“开始调试”按钮即可开始调试。

以下是nodejs8函数的局部步骤调试过程示例。

本地调试java类型的函数

调试java函数的过程与nodejs和python类似。 但是,java程序员通常喜欢IDEA和Eclipse这样的IDE,所以我们单独取出吧。

使用VSCode调试java

要使用VSCode调试java,必须安装以下两个插件:

languagesupportforJava(TM ) by Red Hat

在、

Debugger for Java。 利用VSCode插件市场安装插件很简单,可以做到

参考。

以下是使用VSCode调试java类型函数的示例。

使用IDEA调试java

IDEA配置

IDEA放置remote debugging还很简单,首先在菜单栏中依次单击

运行编辑配置s .

然后创建新的远程调试。

自由输出名称,将端口号设定为3000。

以下是配置idea远程调试的完整过程演示。

使用IDEA开始调试

首先,将java函数作为debug执行。

funlocalinvoke-d3000java8

你可以看到函数卡在这里。 然后使用IDEA连接并开始调试。 菜单栏的

运行调试.

或者,也可以直接单击工具栏上的Debug按钮开始调试。

以下是使用IDEA的远程调试的完整进程演示。

本地调试php类型的函数

php调试与其他类型的函数调试的过程略有不同。

首先,php的执行通过了

fun local invoke php72

命令已完成。 这与其他类型的函数一致。 调试时,与其他类型的函数一样,使用-d参数在调试模式下启动函数。

funlocalinvoke-d 3000---- configvscodephp 72

但是,用debug方式执行php函数后,php函数不屏蔽vscode调试器的连接,直接结束执行。

skippullingimages .

youcanpastetheseconfigto.vs code/launch.JSON,andthenattachtoyourrunningfunction

///////////////(version((0.2.0)、configuration ) )、configuration

{& #039; name& #039; & #039; fc/localdemo/php72& #039;& #039; type& #039; & #039; php& #039;& #039; 请求和映射; #039; & #039; launch& #039;& #039; 端口& amp; #039; 3000,& #039; stoponentry& #039; }

、& #039; ignore& #039; [& #039; /var/fc/runtime/**

]

}

]

}

////////////functioncomputephp 7.2 runtime inited。

fcinvokestartrequestid:6e 8f 7ed7- 653 d-4a6a-94cc-1ef0d 028 E4 B4

fcinvokeendrequestid:6e 8f 7ed7- 653 d-4a6a-94cc-1ef0d 028 E4 B4

hello world request id:6e 8f 7ed7- 653 d-4a6a-94cc-1ef0d 028 E4 B4 B4 billed duration:48 msmemorysize:1998 mbmaxmemoryused:58mb

这是因为对于php程序,必须首先启动vscode调试器。

php类型的函数启动VSCode调试器的过程与其他类型的函数一致。 复制上述日志中的VSCode配置并将其放置在launch.json中,然后单击“开始调试”。

然后,在终端上以调试模式重新启动php函数就可以开始调试了。

funlocalinvoke-d3000php72

事件事件源

函数计算提供了丰富的触发器,包括但不限于对象存储触发器、日志服务触发器和CDN事件触发器。 无论是在本地执行函数还是调试函数,都经常需要创建触发事件来完全模拟联机环境。

触发事件可以是可读的json配置或不可读的二进制数据。 现在让我们以json为例。 假设触发事件的内容如下:

{& #039; testKey& #039; & #039; testValue& #039; }

有三种方法可以将此事件的内容传递给函数:

管道:

Echo& #039; {& #039; testkey& #039; & #039; testvalue& #039; }}|funlocalinvokenodejs8

文件:

将的json内容写入文件。 文件名是自由的。 例如,event.json。 然后用-e指定文件名。

funlocalinvoke-e event.JSON nodejs 8

重定向:

funlocalinvokenodejs8event.JSON

或者

funlocalinvokenodejs8& #039; {& #039; testkey& #039; & #039; testvalue& #039; }

等等。 有关详细信息,请参阅此处

文章。

环境变量

使用template.yml配置的

环境变量

与联机行为一致,可以在函数执行时从代码中检索。 其他信息

参考。

在本地执行函数时,除了在EnvironmentVariables中配置的环境变量外,fun还提供了另一个环境变量

local=true

的环境变量来标识这是在本地执行的函数。

通过使用此环境变量,用户可以区分是在本地运行还是在线运行,以便于执行特定的逻辑处理。

启动器

使用template.yml配置的

启动器

属性与联机行为一致,并且在执行函数时,将首先执行Initializer指定的方法。 初始化程序详细信息

参考。

Credentials

用户可以通过存储在Credentials中的ak信息访问AlibabaCloud (阿里巴巴云)上的其他服务。 Fun local与fun deploy一样在本地执行函数

策略

查找ak信息。

有关函数计算Credentials的说明,可以执行以下操作

参考。

以下示例根据本地和联机环境使用函数提供的Credentials配置OSS客户端。

local=bool(OS.getenv(local ),) ) if ) local ):print& #039; thankyouforrunningfunctioninlocal! & #039;

auth=OSS2. auth ( creds.access _ key _ id,

creds.access_key_secret ) else :

auth=OSS2. STS auth ( creds.access _ key _ id,

creds.access_key_secret,

creds.security_token )

附录

代码

本文介绍了相关的demo代码。 主机呢

github

上去。 项目目录结构如下。

同调

( ( Java8) ( POM.XML ( ( src ( ( main ( Java ) ) ) ) )2) PHP 7.2 (index.PHPpython 2.7 (index.py ) )

template.yml

定义了一个函数计算模型,其中定义了一个名为localdemo的服务,下面定义了六个函数。 名字各不相同

nodejs6、nodejs8、php72、python27、python3和java8。 对应的代码目录是template的

CodeUri的定义分别位于nodejs6、nodejs8、php7.2、python2.7、python3和java8目录中。

其他参照

Fun Repo

Fun specs

Fun examples

Fun发布了2.0的新版本

函数计算工具链新成员—— Fun Local已发布

详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3