简单示例
本示例创建一个简单的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 get 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
使用init函数,调用运行时中的RegisterNamedHandler来注册Handler,该函数原型如下:
func RegisterNamedHandler(name string, h InvokeHandler)
其中:
name 为handler名称,要与函数配置界面的处理器名称保持一致。
h 实现了InvokeHandler接口的对象
在上述示例中,则需添加如下代码:
func init() { cfc.RegisterNamedHandler("echo_handler", &EchoHandler{}) }
启动运行时
需要定义函数的执行入口main,并调用cfc运行时的Main函数。
import ( "flag" "github.com/baidubce/bce-cfc-go/pkg/cfc" ) func main() { flag.Parse() // 进入框架,处理函数事件 cfc.Main() }
调用运行时的Main函数后,运行时会自动等待事件请求。在事件请求到达时,运行时会自动调用用户注册的Handler实现功能调用。
编译代码
编译代码时,需要设置GOOS和GOARCH两个环境变量来指定对应的运行时环境。
export GOOS=linux export GOARCH=amd64 go build
函数的运行文件必须为可执行文件,通过go build编译,会产生一个二进制可执行文件,如下:
$ ls -lah echo_demo -rwxr-xr-x 1 work 2.7M 4 3 14:37 echo_demo
您也可以使用如下命令为您的二进制文件添加可执行权限:
$ chmod a+x echo_demo
打包输出
用户可以将生成的二进制执行文件打包到zip文件中,并上传zip包即可。
注意:默认情况下,用户的函数zip包中应该只包含一个可执行文件,否则函数会执行失败。如需在函数zip包中包含多个可执行文件,您需要自定义程序启动参数,详见后续说明。
自定义程序启动参数
可以通过在zip包中添加一个bootstrap脚本文件,实现自定义的程序启动参数。 该文件中定义一个名为ExecStart的数组。示例如下:
#!/bin/bash ExecStart=( ./echo_demo "--alsologtostderr" "-v7" )
上传函数代码
在成功创建Golang的二进制zip包后,您可以将其上传至CFC函数代码。步骤如下:
- 在百度云管理控制台中选择【产品服务】>【全部产品】>【函数计算 CFC】
- 点击【创建函数】按钮,创建一个空白函数。函数运行时则选择Golang。
- 在【函数代码】页面选择【上传函数.ZIP】包按钮,上传您打包好的二进制包。同时选择您的函数执行入口。
- 上传完毕后,您可以使用默认测试事件测试函数是否部署成功。
示例代码
完整的示例代码点此下载