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

Is it Possible to have Multiple lambda functions in single Go binary?

我正在 AWS lambda 上试验 Go,我发现每个函数都需要上传一个二进制文件才能执行。

我的问题是,是否有可能有一个二进制文件可以有两个不同的 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)
}

并在 main 中以注册 EndPoints 的方式调用 EndPoints 并且相同的二进制文件将上传到函数 MyFunction1MyFunction2.

我知道有两个不同的二进制文件很好,因为它减少了每个函数的 load/size。

但这只是一个实验。

提前致谢:)

我认为这是不可能的,因为 Lambda 控制台说处理程序是可执行文件的名称:

Handler: The executable file name value. For example, "myHandler" would call the main function in the package “main” of the myHandler executable program.

所以一个可执行文件无法承载两个不同的处理程序。

您可以使用变通方法将相同的可执行文件上传到两个不同的 lambda,如下所示

func main() {
switch cfg.LambdaCommand {
case "select_lambda_1":
    lambda1handler()
case "select_lambda_2":
    lambda2handler()

我成功地向 template.yaml 中的函数添加了一个环境变量,并使 main() 检查该变量并调用适当的处理程序。