是否可以在单个Go二进制文件中使用多个lambda函数?

时间:2018-03-22 05:07:11

标签: go aws-lambda serverless

我正在尝试使用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}}。

我知道有两个不同的二进制文件是好的,因为它减少了每个函数的负载/大小。

但这只是一次实验。

提前致谢:)

3 个答案:

答案 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()检查变量并调用适当的处理程序,我获得了成功。