Есть ли разница в использовании функции обработчика и функции вызова при вызове AWS Lambda? - PullRequest
0 голосов
/ 01 июля 2019

Есть ли разница при использовании функции Handler для вызова AWS Lambda и при использовании функции Invoke (input * InvokeInput) в Go?

Мне нужно, чтобы моя Lambda вызывалась несколькими способами.Например, иногда мне нужно, чтобы он вызывался синхронно (как REST API), а иногда мне нужно, чтобы он вызывался асинхронно.Как мне этого добиться?

Могу ли я создать что-то вроде этого:

func main(){

svc := lambda.New(session.New())
input := &lambda.InvokeInput{
    ClientContext:  aws.String("MyApp"),
    FunctionName:   aws.String("MyFunction"),
    InvocationType: aws.String("Event"),
    LogType:        aws.String("Tail"),
    Payload:        []byte("fileb://file-path/input.json"),
    Qualifier:      aws.String("1"),
}

result, err := svc.Invoke(input)
if err != nil {
 ....
}

}

Или мне создать функцию-обработчик, например:

func main(){
     lambda.Start(Handler)
}

func Handler(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error){
   ....
}

Как мнесправиться с обоими случаями, когда иногда мне нужно асинхронно вызывать лямбду и предоставлять входную полезную нагрузку в виде JSON, а иногда мне нужно синхронно вызывать лямбду (REST API) и предоставлять ввод как HTTP-запрос?Есть ли способ вызвать лямбда как REST API без передачи events.APIGatewayProxyRequest в качестве аргумента функции?

...