跳转至

FunctionGraph函数计算

FunctionGraph是一项基于事件驱动的函数托管计算服务。使用FunctionGraph函数,只需编写业务函数代码并设置运行的条件,无需配置和管理服务器等基础设施,函数以弹性、免运维、高可靠的方式运行。此外,按函数实际执行资源计费,不执行不产生费用。

事件函数

函数有明确的接口定义,如下所示。

def handler (event, context)

  • 入口函数名(handler):入口函数名称,需和函数执行入口处用户自定义的入口函数名称一致。
  • 执行事件(event): 函数执行界面由用户输入的执行事件参数, 格式为JSON对象。
  • 上下文环境(Context):Runtime提供的函数执行上下文,其接口定义在SDK接口说明。

其中 event 和 context 是在开发函数时必须传入的两个值,以python为例,对应的函数样例如下:

1
2
3
4
5
import json

def handler (event, context):
    output =json.dumps(event)
    return output

制作依赖包

为Python函数制作依赖包

打包环境中的Python版本要和对应函数的运行时版本相同,如Python2.7建议使用2.7.12及以上版本,Python3.6建议使用3.6.3以上版本。

为Python 2.7安装PyMySQL依赖包,并指定此依赖包的安装路径为本地的/tmp/pymysql下,可以执行如下命令。

1
pip install PyMySQL --root /tmp/pymysql

执行成功后,执行以下命令。

进入子目录直到site-packages路径下(一般路径为usr/lib64/python2.7/site-packages/),接下来执行以下命令。

所生成的包即为最终需要的依赖包。

说明:

如果需要安装存放在的本地wheel安装包,直接输入:

1
2
pip install piexif-1.1.0b0-py2.py3-none-any.whl --root /tmp/piexif   
//安装包名称以piexif-1.1.0b0-py2.py3-none-any.whl为例,请以实际安装包名称为准

为Nodejs函数制作依赖包

需要先保证环境中已经安装了对应版本的Nodejs。

为Nodejs 8.10安装MySQL依赖包,可以执行如下命令。

可以看到当前目录下会生成一个node_modules文件夹。

  • Linux系统

    Linux系统下可以使用以下命令生成zip包。

    1
    zip -rq mysql-node8.10.zip node_modules
    

    即可生成最终需要的依赖包。

  • windows系统

    用压缩软件将node_modules目录压缩成zip文件即可。

如果需要安装多个依赖包,也可以先新建一个package.json文件,例如在package.json中填入如下内容后,执行如下命令。

1
2
3
4
5
6
7
8
{
"name": "test",
"version": "1.0.0",
"dependencies": {
    "redis": "~2.8.0",
    "mysql": "~2.17.1"
    }
}

说明:

不要使用CNPM命令制作nodejs依赖包。

然后将node_modules打包成zip即可生成一个既包含MySQL也包含redis的依赖包。

Nodejs其他版本制作依赖包过程与上述相同。

为PHP函数制作依赖包

制作函数依赖包推荐在EulerOS2.9.6环境中进行。

为php7.3通过composer安装protobuf3.19依赖包,默认环境中已经安装了composer和对应版本的php。

新建一个composer.json文件,在composer.json中填入以下内容。

1
2
3
4
5
{
    "require": {
        "google/protobuf": "^3.19"
    }
}

可以看到当前目录底下生成一个vendor文件夹,文件夹中有autoload.php、composer 和google三个文件夹。

  • Linux系统

    Linux系统下可以使用以下命令生成zip包。

    1
    zip –rq vendor.zip vendor
    
  • windows系统

    用压缩软件将vendor目录压缩成zip文件即可。

    如果要安装多个依赖包,在composer.json文件中指定需要的依赖,把生成的vendor文件整体打包成zip上传。

说明:

php工程代码中使用通过composer下载的第三方依赖时,需要通过require "./vendor/autoload.php" 加载,平台默认把上传的zip包解压后的内容置于项目代码的同级目录下。

存储挂载

functiongraph-mountnfs

FunctionGraph 仅支持通过 NFS 协议挂载 SFS盘或者 ECS上的NFS共享盘。在测试时,发现将SQLite这种比较少的数据和源码一起打包上传后,无法正常读取数据内的内容,而上传到共享盘可以正常运行,如果在数据量比较小的时候,这将产生额外费用。

外部调用

如果需要将函数向外暴漏,需要配置 APIG 触发器当前新用户不支持 APIG共享版,仅支持专享版本,这点感觉是不好的,会增加用户的初始费用。这点看了下AWS Lambda 和 Azure Function是支持直接配置外部调用访问的 (友商需要支持Lambda HTTP 响应流费用,不过这个没有初始费用)。函数前100万次/月调用免费,这点基本和其他厂商是一样的。

  1. 创建和管理 Lambda 函数 URL
  2. 将事件接收到 HTTP 终结点

捐赠本站(Donate)

weixin_pay
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))