首页 > 解决方案 > 如何在我的 Go 函数中获取 AWS Lambda 别名?

问题描述

我想在我的主函数开始执行之前运行一些 Lambda 别名特定的代码。目前看起来像这样

func init() {
 // Trying to get Lambda function alias here
}

func main() {
 adapter = chiproxy.New(r)
 lambda.start(lambdaHandler)
}

func lambdaHandler(ctx context.Context, req events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
 c, err := adapter.ProxyWithContext(ctx, req)
 return c, err
}

reqinlambdaHandler有我需要的信息,但我不知道如何在 init() 中获取它?

标签: goaws-lambda

解决方案


我认为您无法在函数通过请求之前获得别名。lambda 自动提供了许多环境变量,但 alias 不是其中之一。

这可能是因为别名只是指向版本的指针;您可以有许多指向同一版本的别名,但可以为所有别名初始化相同的函数运行时。所以在初始化时提供任何特定的别名是没有意义的。

我想在我的主函数开始执行之前运行一些 Lambda 别名特定的代码

但是函数的运行时并不特定于别名,它特定于版本。事实上,您可以在版本被实例化后创建一个新别名,并且可以使用相同的缓存运行时。

我想我可以理解为什么您可能希望调用者使用不同的别名调用相同的函数,但我不确定这将是实现您想要的别名的低摩擦路径。考虑您是否可能想要创建一堆不同的函数——它们可能具有相同的代码库,并让 init 选择一个合适的处理程序,或者根据函数名称而不是它的别名来执行其他 init 。


推荐阅读