开发事件函数
函数定义
建议使用Node.js 12.13版本。
- Node.js 6.10函数定义
export.handler = function(event, context, callback)
- 入口函数名(handler):入口函数名称, 需和函数执行入口处用户自定义的入口函数名称一致。
- 执行事件(event):函数执行界面由用户输入的执行事件参数, 格式为JSON对象。
- 上下文环境(context):Runtime提供的函数执行上下文,其接口定义在SDK接口说明。
- 回调函数(callback):callback方法完整声明为callback(err, message),用户通过此方法可以返回err和message至前台结果显示页面。具体的err或message内容需要用户自己定义,如字符串。
- 函数执行入口: index.handler
函数执行入口格式为“[文件名].[函数名]”。例如创建函数时设置为index.handler,那么FunctionGraph会去加载index.js中定义的handler函数。
- Node.js 8.10、Node.js 10.16、Node.js 12.13、Node.js14.18函数定义
Node.js 8.10、Node.js 10.16、Node.js 12.13、Node.js14.18 Runtime除了兼容Node.js 6.10 Runtime函数的接口定义规范,还支持使用async的异步形式作为函数入口。
exports.handler = async (event, context, callback[可选]) => { return data;}
通过return进行返回。
Node.js的initializer入口介绍
FunctionGraph目前支持以下Node.js运行环境:
- Node.js6.10 (runtime = Node.js6)
- Node.js8.10 (runtime = Node.js8)
- Nodejs10.16(runtime = Node.js10)
- Nodejs12.13(runtime = Node.js12)
- Node.js16.17(runtime = Node.js16)
- Node.js18.15(runtime = Node.js18)
Initializer入口格式为:
[文件名].[initializer名]
示例:实现initializer接口时指定的Initializer入口为“index.initializer”,那么函数服务会去加载index.js中定义的initializer函数。
在函数服务中使用Node.js编写initializer逻辑,需要定义一个Node.js函数作为initializer入口,一个最简单的initializer示例如下。
exports.initializer = function(context, callback) { callback(null, ''); };
- 函数名
exports.initializer需要与实现initializer接口时的Initializer字段相对应。
示例:创建函数时指定的Initializer入口为index.initializer,那么FunctionGraph会去加载index.js中定义的initializer函数。
- context参数
context参数中包含一些函数的运行时信息。例如:request id、临时AccessKey、function meta等。
- callback参数
callback参数用于返回调用函数的结果,其签名是function(err, data),与Nodejs中惯用的callback一样,它的第一个参数是error,第二个参数data。如果调用时error不为空,则函数将返回HandledInitializationError,由于屏蔽了初始化函数的返回值,所以data中的数据是无效的,可以参考上文的示例设置为空。
SDK接口
Context类中提供了许多上下文方法供用户使用,其声明和功能如表1所示。
方法名 |
方法说明 |
---|---|
getRequestID() |
获取请求ID。 |
getRemainingTimeInMilliSeconds () |
获取函数剩余运行时间。 |
getAccessKey() |
获取用户委托的AccessKey(有效期24小时),使用该方法需要给函数配置委托。
说明:
当前函数工作流已停止维护Runtime SDK 中getAccessKey接口,您将无法使用getAccessKey获取临时AK。 |
getSecretKey() |
获取用户委托的SecretKey(有效期24小时),使用该方法需要给函数配置委托。
说明:
当前函数工作流已停止维护Runtime SDK 中getSecretKey接口,您将无法使用getSecretKey获取临时SK。 |
getSecurityAccessKey() |
获取用户委托的SecurityAccessKey(有效期24小时),使用该方法需要给函数配置委托。 |
getSecuritySecretKey() |
获取用户委托的SecuritySecretKey(有效期24小时),使用该方法需要给函数配置委托。 |
getSecurityToken() |
获取用户委托的SecurityToken(有效期24小时),使用该方法需要给函数配置委托。 |
getUserData(string key) |
通过key获取用户通过环境变量传入的值。 |
getFunctionName() |
获取函数名称。 |
getRunningTimeInSeconds () |
获取函数超时时间。 |
getVersion() |
获取函数的版本。 |
getMemorySize() |
分配的内存。 |
getCPUNumber() |
获取函数占用的CPU资源。 |
getPackage() |
获取函数组。 |
getToken() |
获取用户委托的token(有效期24小时),使用该方法需要给函数配置委托。 |
getLogger() |
获取context提供的logger方法,返回一个日志输出类,通过使用其info方法按“时间-请求ID-输出内容”的格式输出日志。 如调用info方法输出日志: logg = context.getLogger() logg.info("hello") |
getAlias |
获取函数的别名 |
getToken()、getAccessKey()和getSecretKey()方法返回的内容包含敏感信息,请谨慎使用,避免造成用户敏感信息的泄露。
执行结果
执行结果由3部分组成:函数返回、执行摘要和日志。
参数项 |
执行成功 |
执行失败 |
---|---|---|
函数返回 |
返回函数中定义的返回信息。 |
返回包含错误信息和错误类型的JSON文件。格式如下: { "errorMessage": "", "errorType":"", } errorMessage:Runtime返回的错误信息 errorType:错误类型 |
执行摘要 |
显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 |
显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 |
日志 |
打印函数日志,最多显示4KB的日志。 |
打印报错信息,最多显示4KB的日志。 |