Lua
CFC 支持 Lua 编程语言,Lua 函数的运行环境是 Lua5.3,本文主要介绍使用 Lua 函数的基本方法。
函数入口
使用 Lua 运行时,您需要定义一个 Lua 代码编写的函数作为执行入口。以空白函数为例,在 CFC 的页面上创建一个运行时为 Lua5.3 的空白函数后。在"函数代码"页,您可看到如下函数代码,这就是一个最简单的 Lua 函数。
1function handler(event, context)
2 return "hello world"
3end
如上所示,这个 Lua 代码编写的函数名为 handler
,默认情况下 CFC 会将代码存储在一个名为 index.lua
的文件中。CFC 用“不带类型后缀的文件名.函数名”的形式表示 Lua 函数的执行入口,在本例中就是 index.handler
。
在“函数代码”页,“处理程序”即表示函数入口,您可以看到,新创建的函数已为您填入正确的入口。若您修改了函数代码和入口函数名,请相应地修改“处理程序”的值,否则函数将无法执行。
event 参数
event
参数是函数的输入参数,也是您调用函数时传入的数据,其数据类型是 table
。
context 参数
context
参数是 CFC 向函数提供的运行时信息,数据类型是 table
。其包含了一些环境参数,比如 functionBrn
,或调用函数的客户端传入的 context 参数 clientContext
。
从本地或 BOS 上传 ZIP 包
当您从本地或者 BOS 上传一个函数 ZIP 包时,请注意 ZIP 包的层级目录以及函数入口。index.lua
文件应放在 ZIP 包的根目录,而不是根目录下的某个文件夹里。若您修改了文件名称,那么“处理程序”也要做对应的修改,否则 CFC 将无法找到函数入口。示例如下:
1$ unzip -l luafunc.zip
2Archive: luafunc.zip
3 Length Date Time Name
4--------- ---------- ----- ----
5 117 12-27-2019 09:52 index.lua
6 0 12-27-2019 10:11 mylib/
7 361 12-27-2019 10:11 mylib/utils.lua
8--------- -------
9 478 3 files
依赖管理
若您的 Lua 函数需要一些依赖文件,您需要把依赖与源文件一起打包上传,函数才能执行。
对于您自己实现的依赖库,把依赖文件或文件夹与 index.lua
放置在同级目录,然后一起打包上传即可。
Luarocks 是一个常用的 Lua 包管理工具,CFC 支持以 Luarocks 的默认组织路径去查找 Lua5.3 的依赖文件。因此您可以在本地使用 Luarocks 安装依赖后,将源文件与依赖直接打包上传,而无需更改依赖文件的路径。示例如下:
1$ tree
2.
3├── index.lua
4└── mylib
5 └── utils.lua
6
7$ luarocks install --tree `pwd` lpeg # 在当前路径安装依赖
8Installing https://luarocks.org/lpeg-1.0.2-1.src.rock
9...
10
11$ tree
12.
13├── index.lua
14├── lib
15│ ├── lua
16│ │ └── 5.3
17│ │ └── lpeg.so
18│ └── luarocks
19│ └── rocks-5.3
20│ ├── lpeg
21│ │ └── 1.0.2-1
22│ │ ├── lpeg-1.0.2-1.rockspec
23│ │ └── rock_manifest
24│ └── manifest
25├── luafunc.zip
26├── mylib
27│ └── utils.lua
28└── share
29 └── lua
30 └── 5.3
31 └── re.lua
32
33$ zip -r luafunc.zip * # 将此目录下所有文件打包
如上所示,自己实现的依赖位于 mylib/
中,Luarocks 安装的依赖分别在 lib/lua/5.3/
和 share/lua/5.3/
中。把 luafunc.zip
上传到 CFC 后,您可以在 index.lua
中可以这样引用依赖:
1require("re")
2require("mylib/utils")
请注意,Luarocks 安装的一些依赖包中有 .so
文件,您在 Windows 或 MacOS 环境中安装的依赖,可能无法在函数的 Linux 执行环境中直接使用。为了避免此类问题,推荐您使用CFC 本地开发工具 BSAM 在本地调试代码、安装依赖,避免本地与云端不兼容问题。