AWS Lambda GoLang 处理程序 API
AWS Lambda GoLang handler API
是否可以使用自定义 API 实现 Lambda 函数处理程序?
对于 aws-lambda-go,有效的处理程序是以下类型之一:
// func ()
// func () error
// func (TIn) error
// func () (TOut, error)
// func (TIn) (TOut, error)
// func (context.Context) error
// func (context.Context, TIn) error
// func (context.Context) (TOut, error)
// func (context.Context, TIn) (TOut, error)
在我的例子中,TIn
是包含 MySpecificType
作为负载的 KinesisEvent。
我正在寻找能够创建类型为
的处理程序的方法(可能会覆盖 lambda.Start()
)
func(MySpecificType) error
目标是避免在每个 lambda 中从 KinesisEvent 中提取有效负载并使处理程序源独立
看起来解决方案很简单。只需覆盖 lambda.Start() 方法:
func Start(handler func(t * MySpecificType, i int) error) {
lambda.Start(func(kinesisEvent events.KinesisEvent) (err error) {
for i, record := range kinesisEvent.Records {
mySpecType := new(MySpecificType)
if err = json.Unmarshal(record.Kinesis.Data, mySpecType); err != nil {
logrus.Errorf("records[%d]: %s", i, err)
continue
}
err = handler(mySpecType, i)
}
return
})
}
然后:
// main.go
func Handler(m *MySpecificType, index int) error {
// ...
}
func main() {
<wherever_you_put_it_package>.Start(Handler)
// instead of lambda.Start(Handler)
}
是否可以使用自定义 API 实现 Lambda 函数处理程序?
对于 aws-lambda-go,有效的处理程序是以下类型之一:
// func ()
// func () error
// func (TIn) error
// func () (TOut, error)
// func (TIn) (TOut, error)
// func (context.Context) error
// func (context.Context, TIn) error
// func (context.Context) (TOut, error)
// func (context.Context, TIn) (TOut, error)
在我的例子中,TIn
是包含 MySpecificType
作为负载的 KinesisEvent。
我正在寻找能够创建类型为
lambda.Start()
)
func(MySpecificType) error
目标是避免在每个 lambda 中从 KinesisEvent 中提取有效负载并使处理程序源独立
看起来解决方案很简单。只需覆盖 lambda.Start() 方法:
func Start(handler func(t * MySpecificType, i int) error) {
lambda.Start(func(kinesisEvent events.KinesisEvent) (err error) {
for i, record := range kinesisEvent.Records {
mySpecType := new(MySpecificType)
if err = json.Unmarshal(record.Kinesis.Data, mySpecType); err != nil {
logrus.Errorf("records[%d]: %s", i, err)
continue
}
err = handler(mySpecType, i)
}
return
})
}
然后:
// main.go
func Handler(m *MySpecificType, index int) error {
// ...
}
func main() {
<wherever_you_put_it_package>.Start(Handler)
// instead of lambda.Start(Handler)
}