使用Handler函数调用AWS Lambda以及在Go中使用Invoke(input * InvokeInput)函数时,有什么区别吗?
我需要以多种方式调用我的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 {
....
}
}
还是我创建像这样的Handler函数:
func main(){
lambda.Start(Handler)
}
func Handler(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error){
....
}
在这两种情况下,当我有时需要异步调用lambda并提供输入有效载荷作为JSON,有时又需要同步调用lambda(REST API)并提供输入作为HTTP请求时,我该如何处理?是否可以在不将events.APIGatewayProxyRequest
作为函数参数传递的情况下将lambda作为REST API调用?