简单示例

本示例创建一个简单的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函数代码。步骤如下:

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

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

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

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

示例代码

完整的示例代码点此下载