函数计算CFC

    Golang

    简单示例

    本示例创建一个简单的echo函数,该函数将调用事件的内容回显出来。

    创建项目

    $ mkdir echo_demo
    $ cd echo_demo
    $ go mod init github.com/baidubce/echo_demo

    添加runtime依赖

    go runtime运行时位于github.com/baidubce/bce-cfc-go,可以通过如下命令添加项目依赖:

    $ go mod download github.com/baidubce/bce-cfc-go

    创建Handler

    函数的Handler需要实现InvokeHandler接口,该接口原型定义如下:

    type InvokeHandler interface {
    	Handle(input io.Reader, output io.Writer, context InvokeContext) error
    }

    Handle函数有三个参数:

    input 用户输入的事件。

    output 函数执行的结果。

    context 函数执行所需的context。

    该示例中定义EchoHandler,它将input事件拷贝至output,代码如下:

    import (
    	"io"
    	"log"
    
    	"github.com/baidubce/bce-cfc-go/pkg/cfc"
    )
    
    type EchoHandler struct {
    }
    
    func (h *EchoHandler) Handle(input io.Reader, output io.Writer, context cfc.InvokeContext) error {
    	log.Printf("reqid=%s, brn=%s, name=%s, ver=%s, mem=%d\n",
    		context.GetRequestID(), context.GetFunctionBrn(), context.GetFunctionName(),
    		context.GetFunctionVersion(), context.GetMemoryLimitMB())
    	credential := context.GetCredential()
    	if credential != nil {
    		log.Printf("ak=%s, sk=%s, token=%s\n",
    			credential.AccessKeyId, credential.AccessKeySecret, credential.SessionToken)
    	}
    	_, err := io.Copy(output, input)
    	return err
    }

    向运行时注册Handler

    调用运行时中的RegisterNamedHandler来注册Handler,该函数原型如下:

    func RegisterNamedHandler(name string, h InvokeHandler) 

    其中:

    name 为handler名称,要与函数配置界面的处理器名称保持一致。

    h 实现了InvokeHandler接口的对象

    启动运行时

    需要定义函数的执行入口main,并调用运行时的Main函数。

    import (
    	"flag"
    
    	"github.com/baidubce/bce-cfc-go/pkg/cfc"
    )
    
    func main() {
    	flag.Parse()
        // 进入框架,处理函数事件
    	cfc.Main()
    }

    调用运行时的Main函数后,运行时会自动等待事件请求。在事件请求到达时,运行时会自动调用用户注册的Handler实现功能调用。

    编译代码

    编译代码时,需要设置GOOSGOARCH两个环境变量来指定对应的运行时环境。

    export GOOS=linux
    export GOARCH=amd64
    go build

    打包输出

    用户可以将生成的二进制执行文件打包到zip文件中,并上传zip包即可。

    自定义程序启动参数

    可以通过在zip包中添加一个bootstrap脚本文件,实现自定义的程序启动参数。 该文件中定义一个名为ExecStart的数组。示例如下:

    #!/bin/bash
    
    ExecStart=(
        ./echo_demo
        "--alsologtostderr"
        "-v7"
    )

    上传函数代码

    在成功创建Golang的二进制zip包后,您可以将其上传至CFC函数代码。步骤如下:

    1. 在百度云管理控制台中选择【产品服务】>【全部产品】>【函数计算 CFC】

    image.png

    1. 点击【创建函数】按钮,创建一个空白函数。函数运行时则选择Golang。

    image.png

    1. 在【函数代码】页面选择【上传函数.ZIP】包按钮,上传您打包好的二进制包。同时选择您的函数执行入口。

    image.png

    1. 上传完毕后,您可以使用默认测试事件测试函数是否部署成功。

    image.png

    示例代码

    完整的示例代码点此下载

    上一篇
    开发注意事项
    下一篇
    Java