Есть ли разница при использовании функции 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
в качестве аргумента функции?