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

问题描述 投票:0回答:5

我在 Amazon 的 ApiGateway 中创建了一个资源。它指向一个 Lambda 函数。这是由已经存在的本机移动应用程序(android 和 ios)造成的。

我现在想要修改 Lambda 函数,但我发现没有办法更改我的 ApiGateway 资源以指向 lambda 的别名。这是我第一次使用这些技术,我发现没有简单的机制可以在 aws 控制台中管理它。

如何修改我的 ApiGateway 资源以指向我的 lambda 别名,以便我可以在不影响现有客户端的情况下编辑主干?

amazon-web-services aws-lambda aws-api-gateway
5个回答
59
投票

在集成类型 -> Lambda 函数下,您需要添加对阶段变量

MyLambdaFuntionName:${stageVariables.lambdaAlias}
的引用,然后为每个阶段相应地在阶段变量选项卡中设置
lambdaAlias
(lambdaAlias=dev、lambdaAlias=prod 等)

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

它隐藏在页面的最底部,以“或者,您可以混合和匹配静态名称”开头


8
投票

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


7
投票

在 Api Gateway 控制台上,使用 ARN 而不是 lambda 函数名称。


2
投票

对于我的情况,我会直接添加 lambda 函数的 arn 来替换 Lambda 名称。这对我有用,无需添加 {} 符号。


0
投票

发布此内容是为了繁荣。 @Raghav - 如果您使用 SAM 或 CloudFormation。使用别名设置函数:

    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      MemorySize: 256
      AutoPublishAlias: live

然后在路由期间的 API 网关配置中,将 uri 更改为:

"Fn::Sub": "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${YourFunction.Arn}/invocations"

并在 Arn: 后面添加 :live

"Fn::Sub": "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${YourFunction.Arn}:live/invocations"

如果您不添加 lambda 别名,一切看起来仍然没问题(在 CloudFormation UI 和网关中),但调用给了我:

x-amzn-errortype: InternalServerErrorException
{"message": "Internal server error"}
© www.soinside.com 2019 - 2024. All rights reserved.