函数工作流 FunctionGraph函数工作流 FunctionGraph

更新时间:2021/09/09 GMT+08:00
分享

Node.js函数开发指南

函数定义

建议使用Node.js 12.13版本。

  • Node.js 6.10函数定义

    Node.js6.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,那么函数计算会去加载index.js中定义的handler函数,如图1所示。

      图1 Node.js函数执行入口
  • Node.js 8.10、Node.js 10.16、Node.js 12.13函数定义

    Node.js 8.10、Node.js 10.16、Node.js 12.13 Runtime除了兼容Node.js 6.10 Runtime函数的接口定义规范,还支持使用async的异步形式作为函数入口。

    exports.handler = async (event, context, callback[可选]) => { return data;}

    通过return进行返回。

SDK接口

Context类中提供了许多上下文方法供用户使用,其声明和功能如表1所示。

表1 Context类上下文方法说明

方法名

方法说明

getRequestID()

获取请求ID。

getRemainingTimeInMilliSeconds ()

获取函数剩余运行时间。

getAccessKey()

获取用户委托的AccessKey(有效期24小时),使用该方法需要给函数配置委托。

getSecretKey()

获取用户委托的SecretKey(有效期24小时),使用该方法需要给函数配置委托。

getUserData(string key)

通过key获取用户通过环境变量传入的值。

getFunctionName()

获取函数名称。

getRunningTimeInSeconds ()

获取函数超时时间。

getVersion()

获取函数的版本。

getMemorySize()

分配的内存。

getCPUNumber()

获取函数占用的CPU资源,单位为millicore(1 core=1000 millicores)。

取值与MemorySize成比例,默认是128M内存占0.1个核(100 millicores),函数占用的CPU为基础CPU:200 millicores,再加上内存按比例占用的CPU,计算方法:内存/128 * 100 + 200。

getProjectID()

获取projectID。

getPackage()

获取函数组。

getToken()

获取用户委托的token(有效期24小时),使用该方法需要给函数配置委托。

getLogger()

获取context提供的logger方法,返回一个日志输出类,通过使用其info方法按“时间-请求ID-输出内容”的格式输出日志。

如调用info方法输出日志:

logg = context.getLogger()

logg.info("hello")

getToken()、getAccessKey()和getSecretKey()方法返回的内容包含敏感信息,请谨慎使用,避免造成用户敏感信息的泄露。

开发Node.js函数

开发Node.js函数步骤如下。

  1. 创建函数工程

    1. 编写打印context和event的代码。

      打开文本编辑器,编写helloworld函数,代码如下,文件命名为helloworld.js,保存文件。

      var return_helloworld = function (event, context) {
          const function_name = context.getFunctionName();
          const function_version = context.getVersion();
          const package = context.getPackage();
          const eventKey = event['key'];
          const logger = context.getLogger();
          logger.info(JSON.stringify({
              function_name,
              function_version,
              package,
              eventKey
          }));
      }
       
      module.exports = {
          print: return_helloworld
      };
    2. 定义FunctionGraph函数

      打开文本编辑,定义函数,代码如下,文件命名为index.js,保存文件(与helloworld.js保存在同一文件夹下)。

      var h = require('./helloworld.js');
      exports.handler = function (event, context, callback) {
          h.print(event, context);
          callback(null, JSON.stringify(event));
      }
    1. callback返回的第一个参数不为null,则认为函数执行失败,会返回定义在第二个参数的HTTP错误信息。
    2. 函数仅支持返回如下几种类型的值。

      null:函数返回的HTTP响应Body为空。

      []byte: 函数返回的HTTP响应Body内容为该字节数组内容。

      string:函数返回的HTTP响应Body内容为该字符串内容。

      其他:函数会返回值作为对象进行json编码,并将编码后的内容作为HTTP响应的Body,同时设置响应的"Content-Type"头为"application/json"。

  2. 工程打包

    函数工程创建以后,可以得到以下目录,选中工程所有文件,打包命名为“fss_examples_nodejs6.10.zip”,如图2所示。

    图2 打包

    本例函数工程文件保存在“~/Code/”文件夹下,在打包的时候务必进入Code文件夹下选中所有工程文件进行打包,这样做的目是:定义了FunctionGraph函数的index.js是程序执行入口,确保fss_examples_nodejs6.10.zip解压后,index.js文件位于根目录。

  3. 创建FunctionGraph函数,上传程序包

    登录FunctionGraph控制台,创建Node.js函数,上传fss_examples_nodejs6.10.zip文件。如图3所示。
    图3 上传程序包
    1. 函数执行入口中的index与定义FunctionGraph函数的文件名保持一致,通过该名称找到FunctionGraph函数所在文件。
    2. 函数执行入口中的handler为函数名,与index.js文件中的函数名保持一致。
    3. 函数执行过程为:用户上传fss_examples_nodejs6.10.zip保存在OBS中,触发函数后,解压缩zip文件,通过index匹配到FunctionGraph函数所在文件,通过handler匹配到index.js文件中定义的FunctionGraph函数,找到程序执行入口,执行函数。

  4. 测试函数

    1. 创建测试事件。

      在函数详情页,单击“请选择测试事件>请配置测试事件”,弹出“配置测试事件”页,输入测试信息如图4所示,单击“保存”。

      图4 配置测试事件
    2. 在函数详情页,选择已配置测试事件,单击“测试”。

  5. 函数执行

    函数执行结果分为三部分,分别为函数返回(由callback返回)、执行摘要、日志输出(由console.log或getLogger()方法获取的日志方法输出),如图5所示。

    图5 测试结果

执行结果

执行结果由3部分组成:函数返回、执行摘要和日志。

表2 执行结果说明

参数项

执行成功

执行失败

函数返回

返回函数中定义的返回信息。

返回包含错误信息和错误类型的JSON文件。格式如下:

{
    "errorMessage": "", 
    "errorType":"", 
}

errorMessage:Runtime返回的错误信息

errorType:错误类型

执行摘要

显示请求ID、配置内存、执行时长、实际使用内存和收费时长。

显示请求ID、配置内存、执行时长、实际使用内存和收费时长。

日志

打印函数日志,最多显示4KB的日志。

打印报错信息,最多显示4KB的日志。

分享:

    相关文档

    相关产品