API обработчика AWS Lambda GoLang

Можно ли реализовать обработчик функции Lambda с помощью специального API?

Для 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 - это KinesisEvent, содержащий MySpecificType в качестве полезной нагрузки. Я ищу способ (возможно, перезаписать lambda.Start()), чтобы иметь возможность создать обработчик типа

func(MySpecificType) error

Цель состоит в том, чтобы избежать извлечения полезной нагрузки из KinesisEvent в каждой лямбда-выражении и сделать источник обработчика независимым.

Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
0
626
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, решение довольно простое. Просто перезапишите метод 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)
}

Другие вопросы по теме