开发事件函数
Go函数接口定义
FunctionGraph运行时支持Go 1.x版本,函数有明确的接口定义,如下所示:
func Handler (payload []byte, ctx context.RuntimeContext)
- 入口函数名(Handler):入口函数名称。
- 执行事件体(payload): 函数执行界面由用户输入的执行事件参数, 格式为JSON对象。
- 上下文环境(ctx):Runtime提供的函数执行上下文,其接口定义在SDK接口说明。
Go函数的函数执行入口参数格式为:与代码包中的可执行文件名保持一致。编译后的动态库文件名称必须与函数执行入口的插件名称保持一致,例如:动态库名称为testplugin.so,则函数执行入口命名为testplugin.Handler。可通过FunctionGraph控制台进入函数详情页的常规设置中进行配置或修改。
约束与限制
GetToken()、GetAccessKey()和GetSecretKey()方法返回的内容包含敏感信息,请谨慎使用,避免造成用户敏感信息的泄露。
SDK接口
FunctionGraph函数GoSDK提供了Event事件接口、Context接口和日志记录接口。Go SDK下载(Go SDK下载.sha256)。
- Event事件接口
Go SDK加入了触发器事件结构体定义,目前支持、DIS、DDS、SMN、TIMER、APIG、触发器。在需要使用触发器的场景时,编写相关代码更简单。
- APIG触发器相关字段说明
- APIGTriggerEvent相关字段说明
表1 APIGTriggerEvent相关字段说明 字段名
字段描述
IsBase64Encoded
Event中的body是否是base64编码
HttpMethod
Http请求方法
Path
Http请求路径
Body
Http请求body
PathParameters
所有路径参数
RequestContext
相关的APIG配置(APIGRequestContext对象)
Headers
Http请求头
QueryStringParameters
查询参数
UserData
APIG自定义认证中设置的userdata
- APIGTriggerResponse相关字段说明
表3 APIGTriggerResponse相关字段说明 字段名
字段描述
Body
消息体
Headers
最终返回的Http响应头
StatusCode
Http状态码,int类型
IsBase64Encoded
body是否经过base64编码,bool类型
APIGTriggerEvent提供GetRawBody()方法获取base64解码后的body体,相应的APIGTriggerResponse提供SetBase64EncodedBody()方法来设置base64编码的body体。
- APIGTriggerEvent相关字段说明
- DIS触发器相关字段说明
表4 DISTriggerEvent相关字段说明 字段名
字段描述
ShardID
分区ID
Message
DIS消息体(DISMessage结构)
Tag
函数版本
StreamName
通道名称
表5 DISMessage相关字段说明 字段名
字段描述
NextPartitionCursor
下一个游标
Records
消息记录(DISRecord结构)
MillisBehindLatest
保留字段
- KAFKA触发器相关字段说明
表7 KAFKATriggerEvent相关字段说明 字段名
字段描述
InstanceId
实例ID
Records
消息记录(表8)
TriggerType
触发器类型,返回KAFKA
Region
region
EventTime
事件发生时间,秒数
EventVersion
事件版本
- SMN触发器相关字段说明
表9 SMNTriggerEvent相关字段说明 字段名
字段描述
Record
消息记录集合(SMNRecord结构)
表10 SMNRecord相关字段说明 字段名
字段描述
EventVersion
事件版本(当前为1.0)
EventSubscriptionUrn
订阅URN
EventSource
事件源
Smn
SMN事件消息体(SMNBody结构)
- 定时触发器相关字段说明
表12 TimerTriggerEvent相关字段说明 字段名
字段描述
Version
版本名称(当前为“v1.0”)
Time
当前时间
TriggerType
触发器类型(“Timer”)
TriggerName
触发器名称
UserEvent
触发器附加信息
- 例如使用APIG触发器时,只需要把入口函数(假如函数名为handler)的第一个参数按照如下方式设置:handler(APIGTriggerEvent event, Context context)。相关约束条件请参考Base64解码和返回结构体的说明。
- 关于所有TriggerEvent,上面提到的TriggerEvent方法均有与之对应的set方法,建议在本地调试时使用;DIS和LTS均有对应的getRawData()方法,但无与之相应的setRawData()方法。
- APIG触发器相关字段说明
- Context接口
Context接口提供函数获取函数执行上下文,例如,用户委托的AccessKey/SecretKey、当前请求ID、函数执行分配的内存空间、CPU数等。
Context接口说明如表13所示。
表13 Context类上下文方法说明 方法名
方法说明
getRequestID( )
获取请求ID。
getRemainingTimeInMilligetRunningTimeInSecondsSeconds ( )
获取函数剩余运行时间。
getAccessKey( )
获取用户委托的AccessKey(有效期24小时),使用该方法需要给函数配置委托。
当前函数工作流已停止维护Runtime SDK 中getAccessKey接口,您将无法使用getAccessKey获取临时AK。
getSecretKey( )
获取用户委托的SecretKey(有效期24小时),使用该方法需要给函数配置委托。
当前函数工作流已停止维护Runtime SDK 中getSecretKey接口,您将无法使用getSecretKey获取临时SK。
getSecurityAccessKey()
获取用户委托的SecurityAccessKey(有效期24小时),使用该方法需要给函数配置委托。
getSecuritySecretKey()
获取用户委托的SecuritySecretKey(有效期24小时),使用该方法需要给函数配置委托。
getSecurityToken()
获取用户委托的SecurityToken(有效期24小时),使用该方法需要给函数配置委托。
getUserData(string key)
通过key获取用户通过环境变量传入的值。
getFunctionName( )
获取函数名称。
getRunningTimeInSeconds ( )
获取函数超时时间。
getVersion( )
获取函数的版本。
getMemorySize( )
分配的内存。
getCPUNumber( )
获取函数占用的CPU资源。
getPackage( )
获取函数组。
getToken( )
获取用户委托的token(有效期24小时),使用该方法需要给函数配置委托。
getLogger( )
获取context提供的logger方法(默认会输出时间、请求ID等信息)。
getAlias
获取函数的别名
- 日志接口Go SDK日志接口日志说明如表14所示。
开发Go函数
登录已经安装了Go 1.x SDK的linux服务器,按照如下步骤进行编译和打包。(当前支持Ubuntu 14.04,Ubuntu 16.04,SuSE 11.3,SuSE 12.0,SuSE 12.1)
执行结果
执行结果由3部分组成:函数返回、执行摘要和日志。
参数项 |
执行成功 |
执行失败 |
---|---|---|
函数返回 |
返回函数中定义的返回信息。 |
返回包含错误信息和错误类型的JSON文件。格式如下: { "errorMessage": "", "errorType":"", } errorMessage:Runtime返回的错误信息 errorType:错误类型 |
执行摘要 |
显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 |
显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 |
日志 |
打印函数日志,最多显示4KB的日志。 |
打印报错信息,最多显示4KB的日志。 |