更新时间:2024-12-16 GMT+08:00
分享

直接上传函数代码

要创建函数,首先需要创建函数部署程序包(包含代码和所有依赖项的文件)。

FunctionGraph支持如下三种方式部署程序包:

  • 支持在线编辑代码。用户在编辑函数代码时支持类似工程方式的管理,可以创建文件、文件夹并对其进行编辑。
  • 支持直接上传函数代码。用户在本地开发程序之后打包(程序包大小不超过40MB),必须是ZIP包(Java、Node.js、Python、Go)或者JAR文件(Java),然后上传至FunctionGraph即可运行,无需其它的部署操作。
  • 支持OBS方式上传函数代码。当函数的程序包大小超过40MB时,使用该方式部署程序包。OBS中ZIP包大小限制为300MB。

本章节将介绍FunctionGraph的直接上传函数代码方式。

表1 直接上传支持介绍

运行时

上传ZIP文件

上传JAR文件

说明

Node.js

支持

不支持

-

Python

支持

不支持

用python语言写代码时,自己创建的包名不能与python标准库同名,否则会提示module加载失败。例如“json”、“lib”,“os”等。

Java

支持

支持

部署Java程序包可以是.zip文件或独立的jar文件。

上传Jar包

  • 如果函数没有引入其他依赖包,可以直接上传函数jar包。
  • 如果函数引入了其他依赖包,可以先将依赖包上传至OBS桶,创建函数时设置依赖包,并上传函数jar包。

上传zip

如果函数中引入其他三方件,也可以制作包含所有依赖三方件和函数jar的zip包,选择上传zip文件。您可参见使用IDEA工具创建普通Java项目使用IDEA工具创建maven项目

Go

支持

不支持

必须在编译之后打zip包。编译后的动态库文件名称必须与函数执行入口的插件名称保持一致,例如:动态库名称为testplugin.so,则“函数执行入口”命名为testplugin.Handler。更多运行时语言的函数执行入口信息,请参见表1中“函数执行入口”参数介绍。

C#

支持

不支持

-

PHP

支持

不支持

-

定制运行时

支持

不支持

-

HTTP

支持

不支持

-

  • 制作ZIP包的时候,单函数入口文件必须在根目录,保证解压后,直接出现函数执行入口文件,才能正常运行。
  • 上传代码时,如果代码中包含敏感信息(如账户密码等),请您自行加密,以防止信息泄露。
  • 解压后的源代码不能超过1.5G,超大代码请联系客服。
  • 代码编辑区中如果代码有修改,请修改完成后再次单击“部署”,完成重新部署代码。
  • 当您部署的代码大于20M时,在线编辑器将不展示代码,但您仍可以测试您的函数。
    图1 编辑器不展示代码

操作步骤

  1. 登录函数工作流控制台,在左侧的导航栏选择“函数 > 函数列表”。
  2. 在函数列表中,单击函数名称进入详情页。
  3. 选择“代码”页签,右侧选择“上传自 > Zip文件”或“上传 > JAR文件”。
  4. 在弹出的窗口中,单击“添加文件”,选择本地函数代码程序包。

    程序包大小限制为不超过40MB,如果超过该限制,请使用OBS存储桶。更多函数资源的限制,请参见使用限制

  5. 文件上传完成后,单击“确定”,完成函数代码部署。

HTTP函数配置

在调用API前,确保您的业务系统所在网络与API的访问域名或地址互通。

  • 若业务系统与HTTP函数在相同VPC内时,可直接访问API。
  • 若业务系统与HTTP函数在同一区域的不同VPC内时,可通过创建VPC对等连接,将两个VPC的网络打通,实现同一区域跨VPC访问API。具体步骤请参考VPC对等连接说明
  • 若业务系统与HTTP函数在不同区域的不同VPC内时,可通过创建云连接实例并加载需要互通的VPC,将两个VPC的网络打通,实现跨区域跨VPC访问API。具体步骤请参考跨区域VPC互通
  • 若业务系统与HTTP函数通过公网互通,请确保HTTP函数已绑定弹性IP。

HTTP函数公共请求头默认携带如表2字段。

表2 默认请求头

字段

描述

X-CFF-Request-Id

当前请求ID

X-CFF-Memory

分配的内存

X-CFF-Timeout

函数超时时间

X-CFF-Func-Version

函数版本

X-CFF-Func-Name

函数名称

X-CFF-Project-Id

ProjectID

X-CFF-Package

函数组

X-CFF-Region

当前region

制作程序包

  1. 准备一个node脚本,代码示例如下:
    const http = require('http'); // Import Node.js core module
     
    var server = http.createServer(function (req, res) {   //create web server
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.write('<html><body><h2>This is http function.</h2></body></html>');
        res.end();
    });
     
    server.listen(8000, '127.0.0.1'); //6 - listen for any incoming requests
     
    console.log('Node.js web server at port 8000 is running..')
  2. 准备一个bootstrap启动文件,作为HTTP函数的启动文件。

    示例:

    bootstrap文件内容如下。

    /opt/function/runtime/nodejs12.13/rtsp/nodejs/bin/node $RUNTIME_CODE_ROOT/index.js
  3. 将上述两个文件打成zip包。
    图2 文件打成zip包

    如果执行HTTP类型是Python函数,则bootstrap文件中执行函数时,建议增加“-u”参数确保日志落盘。例如:

    /opt/function/runtime/python3.6/rtsp/python/bin/python3 -u $RUNTIME_CODE_ROOT/index.py

    若需要使用其他语言,则参见表3更换语言路径,代码包路径无需更换。

    表3 多语言路径说明

    语言

    路径

    Java8

    /opt/function/runtime/java8/rtsp/jre/bin/java

    Java11

    /opt/function/runtime/java11/rtsp/jre/bin/java

    Node.js6

    /opt/function/runtime/nodejs6.10/rtsp/nodejs/bin/node

    Node.js8

    /opt/function/runtime/nodejs8.10/rtsp/nodejs/bin/node

    Node.js10

    /opt/function/runtime/nodejs10.16/rtsp/nodejs/bin/node

    Node.js12

    /opt/function/runtime/nodejs12.13/rtsp/nodejs/bin/node

    Node.js14

    /opt/function/runtime/nodejs14.18/rtsp/nodejs/bin/node

    Node.js16

    /opt/function/runtime/nodejs16.17/rtsp/nodejs/bin/node

    Node.js18

    /opt/function/runtime/nodejs18.15/rtsp/nodejs/bin/node

    Python2.7

    /opt/function/runtime/python2.7/rtsp/python/bin/python

    Python3.6

    /opt/function/runtime/python3.6/rtsp/python/bin/python3

    Python3.9

    /opt/function/runtime/python3.9/rtsp/python/bin/python3

    PHP7.3

    /opt/function/runtime/php7.3/rtsp/php/bin/php

部署程序包

  1. 在HTTP函数的代码详情页中,单击“上传自”,选择“Zip文件”方式上传准备好的zip包。
  2. 创建触发器。

    1. 选择“设置 > 触发器”页签,单击“创建触发器”。
    2. 配置触发器信息,此处以创建“API网关服务(APIG)”触发器为例,其他配置信息请参见使用APIG共享版触发器
      图3 创建触发器

      示例中“安全认证”暂时选择“None”,用户在配置时应根据实际情况选择。

      • App:采用 Appkey&Appsecret 认证,安全级别高,推荐使用。
      • IAM:IAM 认证,只允许IAM用户能访问,安全级别中等。
      • None:无认证模式,所有用户均可访问。
    3. 配置完成后,单击“确定”,完成API触发器创建。

  3. 发布API。

    1. 单击“触发器”页签下的API名称,跳转至API的总览页面。
      图4 API触发器
    2. 单击右上方的“编辑”,进入“基本信息”页面。
      图5 编辑API
    3. 单击“下一步”,进入“定义api请求”页面,修改“请求Path”为“/user/get”并单击“立即完成”。
      图6 定义API请求
    4. 单击“发布API”,在发布页面继续单击“发布”。

  4. 触发函数。

    1. 返回函数工作流控制台,在左侧导航栏选择“函数 > 函数列表”,单击创建的HTTP函数进入函数详情页。
    2. 选择“设置 > 触发器”,复制“调用URL”,在浏览器访问。
      图7 复制URL
    3. 查看请求结果。
      图8 查看请求结果

相关文档