go - AWS Lambda GoLang 处理程序 API

标签 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 中提取有效负载并使处理程序源独立

最佳答案

看起来解决方案很简单。只需覆盖 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)
}

关于go - AWS Lambda GoLang 处理程序 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50497712/

相关文章:

javascript - XMLHttpRequest 无法加载 localhost 资源,安全检查是 Chrome

database - Golang worker 池导致数据库损坏

amazon-web-services - 由于配置错误 : Authorizer error,AWS 执行失败

amazon-web-services - 由SQS触发的AWS Lambda会增加SQS请求数量

json - 如何解码 Json 中的多值/单值

json - 解析带有尾随逗号的 JSON 数组和 map 元素时出现运行时错误

java - SQS Java lambda 获取空对象

java - 使用 Kinesis Client Library (KCL 2.x) 的 Kinesis Stream 的多个使用者

python - 使用 Python 解析和渲染 Kinesis Video Streams 并获取输入帧的图像表示

aws-sdk - 如何从 NodeJS 应用程序 (lambda) 将记录放入 Kinesis 流