如何将ApiGateway指向特定的Lambda别名

47

我在Amazon的ApiGateway中创建了一个资源,它指向一个Lambda函数。 现在,一个已经上线的本地移动应用程序(Android和iOS)正在访问它。

现在我想修改Lambda函数,但我看不到任何改变我的ApiGateway资源指向lambda别名的方法。这是我第一次使用这些技术,而我在AWS控制台中没有找到简单的机制来管理这个问题。

如何修改我的ApiGateway资源以指向我的lambda别名,以便我可以编辑trunk而不影响现有客户端?


4个回答

58

在“集成类型” ->“Lambda函数”下,您需要添加对阶段变量的引用MyLambdaFuntionName:$ {stageVariables.lambdaAlias} ,然后根据每个阶段相应地在“阶段变量”选项卡中设置lambdaAlias(如lambdaAlias = dev,lambdaAlias = prod等)。

此处有一个带有截图的示例:https://aws.amazon.com/blogs/compute/using-api-gateway-stage-variables-to-manage-lambda-functions/

这个示例有点隐藏在页面底部,从“或者,您可以混合和匹配静态名称”开始。


7
请注意,当将Lambda函数名称指定为阶段变量值时,您必须手动配置Lambda函数的权限。请参见http://docs.aws.amazon.com/apigateway/latest/developerguide/stage-variables.html。 - MikeD at AWS
谢谢Ryan,我会在这个周末看一下它,并在我开始时接受这个答案。 - digitaljoel
1
这对我不起作用,如果我只使用 MyLambdaFunctionName 它可以工作,但是如果我使用 MyLambdaFuntionName:${stageVariables.lambdaAlias} 就会出现 500 错误。 - Ray
5
嗨 @Ray,别忘了给 API 方法授权,只需输入 yourlambda:DEV ... 和其余 envs,逐个应用它们,最后你只需运行yourlambda:${stageVariables.lambdaAlias} - John Jang
如果您有许多Lambda函数,您可以使用“https://stackoverflow.com/a/59426777/4160530”脚本来加速“添加权限”的过程。 - Bilal Ahmad
3
考虑我正在使用 AWS::Serverless::Function 来创建 Lambda,我该如何使用 CloudFormation 实现这一点? - Raghav Maheshwari

8

对于后来的谷歌用户,要小心添加正确别名的权限,例如yourfunc:prod而不仅仅是yourfunc。这意味着,如果您计划使用3个别名来调用Lambda函数,则必须添加其中的3个。


很棒的一点是,该策略将与别名绑定在一起,因此当您将别名指向 Lambda 函数的其他版本时,它将正常工作。 - Tom Saleeba

6
在API Gateway控制台中,使用ARN代替Lambda函数名称。

1
这对我来说是最简单的解决方案... 发布一个名为“prod”的 Lambda 函数版本,然后将其 ARN 复制/粘贴到 API Gateway 的集成值中。完成。 - RumbleFish

2

对于我的情况,我会直接添加Lambda函数的ARN来替换Lambda名称。这样做对我而言可行,无需添加{}符号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接