Lua
CFC 支持 Lua 编程语言,Lua 函数的运行环境是 Lua5.3,本文主要介绍使用 Lua 函数的基本方法。
函数入口
使用 Lua 运行时,您需要定义一个 Lua 代码编写的函数作为执行入口。以空白函数为例,在 CFC 的页面上创建一个运行时为 Lua5.3 的空白函数后。在"函数代码"页,您可看到如下函数代码,这就是一个最简单的 Lua 函数。
function handler(event, context)
return "hello world"
end
如上所示,这个 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 将无法找到函数入口。示例如下:
$ unzip -l luafunc.zip
Archive: luafunc.zip
Length Date Time Name
--------- ---------- ----- ----
117 12-27-2019 09:52 index.lua
0 12-27-2019 10:11 mylib/
361 12-27-2019 10:11 mylib/utils.lua
--------- -------
478 3 files
依赖管理
若您的 Lua 函数需要一些依赖文件,您需要把依赖与源文件一起打包上传,函数才能执行。
对于您自己实现的依赖库,把依赖文件或文件夹与 index.lua
放置在同级目录,然后一起打包上传即可。
Luarocks 是一个常用的 Lua 包管理工具,CFC 支持以 Luarocks 的默认组织路径去查找 Lua5.3 的依赖文件。因此您可以在本地使用 Luarocks 安装依赖后,将源文件与依赖直接打包上传,而无需更改依赖文件的路径。示例如下:
$ tree
.
├── index.lua
└── mylib
└── utils.lua
$ luarocks install --tree `pwd` lpeg # 在当前路径安装依赖
Installing https://luarocks.org/lpeg-1.0.2-1.src.rock
...
$ tree
.
├── index.lua
├── lib
│ ├── lua
│ │ └── 5.3
│ │ └── lpeg.so
│ └── luarocks
│ └── rocks-5.3
│ ├── lpeg
│ │ └── 1.0.2-1
│ │ ├── lpeg-1.0.2-1.rockspec
│ │ └── rock_manifest
│ └── manifest
├── luafunc.zip
├── mylib
│ └── utils.lua
└── share
└── lua
└── 5.3
└── re.lua
$ zip -r luafunc.zip * # 将此目录下所有文件打包
如上所示,自己实现的依赖位于 mylib/
中,Luarocks 安装的依赖分别在 lib/lua/5.3/
和 share/lua/5.3/
中。把 luafunc.zip
上传到 CFC 后,您可以在 index.lua
中可以这样引用依赖:
require("re")
require("mylib/utils")
请注意,Luarocks 安装的一些依赖包中有 .so
文件,您在 Windows 或 MacOS 环境中安装的依赖,可能无法在函数的 Linux 执行环境中直接使用。为了避免此类问题,推荐您使用CFC 本地开发工具 BSAM 在本地调试代码、安装依赖,避免本地与云端不兼容问题。