云计算
前言
首先,介绍本文中出现的几个重要概念。
函数计算)
函数计算是一种事件驱动的服务,通过函数计算,用户无需管理服务等的执行情况,只需编写和上传代码即可。 函数计算准备计算资源,以灵活可扩展的方式执行用户代码。 用户只需根据执行实际代码所消耗的资源来付费。 使用函数计算详细信息
参考。
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