AWS Lambda GoLang处理程序API

时间:2018-05-23 21:25:46

标签: go aws-lambda amazon-kinesis

是否可以使用自定义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中提取有效负载并使处理程序源独立

1 个答案:

答案 0 :(得分:0)

似乎解决方案非常简单。只需覆盖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)
}