我正在尝试使用Go on AWS lambda,我发现每个函数都需要上传二进制文件才能执行。
我的问题是,是否有可能有一个二进制文件可以有两个不同的Handler
函数,可以通过两个不同的lambda函数加载。
例如
func Handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
fmt.Println("Received body in Handler 1: ", request.Body)
return events.APIGatewayProxyResponse{Body: request.Body, StatusCode: 200}, nil
}
func Handler1(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
fmt.Println("Received body in Handler 2: ", request.Body)
return events.APIGatewayProxyResponse{Body: request.Body, StatusCode: 200}, nil
}
func EndPoint1() {
lambda.Start(Handler)
}
func EndPoint2() {
lambda.Start(Handler1)
}
并以EndPoints
方式调用main
,以便注册EndPoints
和相同的二进制文件,并将其上传到函数MyFunction1
和{{ 1}}。
我知道有两个不同的二进制文件是好的,因为它减少了每个函数的负载/大小。
但这只是一次实验。
提前致谢:)
答案 0 :(得分:2)
我认为这是不可能的,因为Lambda控制台说处理程序是可执行文件的名称:
处理程序:可执行文件名值。例如," myHandler"将调用myHandler可执行程序的“main”包中的main函数。
因此,单个可执行文件无法承载两个不同的处理程序。
答案 1 :(得分:0)
您可以执行变通办法以使相同的可执行文件可以上传到两个不同的lambda中,如下所示:
func main() {
switch cfg.LambdaCommand {
case "select_lambda_1":
lambda1handler()
case "select_lambda_2":
lambda2handler()
答案 2 :(得分:0)
通过向template.yaml中的函数添加环境变量,并使main()检查变量并调用适当的处理程序,我获得了成功。