我在 Amazon 的 ApiGateway 中创建了一个资源。它指向一个 Lambda 函数。这是由已经存在的本机移动应用程序(android 和 ios)造成的。
我现在想要修改 Lambda 函数,但我发现没有办法更改我的 ApiGateway 资源以指向 lambda 的别名。这是我第一次使用这些技术,我发现没有简单的机制可以在 aws 控制台中管理它。
如何修改我的 ApiGateway 资源以指向我的 lambda 别名,以便我可以在不影响现有客户端的情况下编辑主干?
在集成类型 -> Lambda 函数下,您需要添加对阶段变量
MyLambdaFuntionName:${stageVariables.lambdaAlias}
的引用,然后为每个阶段相应地在阶段变量选项卡中设置 lambdaAlias
(lambdaAlias=dev、lambdaAlias=prod 等)
这里有一个带有屏幕截图的示例:https://aws.amazon.com/blogs/compute/using-api-gateway-stage-variables-to-manage-lambda-functions/
它隐藏在页面的最底部,以“或者,您可以混合和匹配静态名称”开头
对于后来的 googler,请小心使用正确的别名添加权限,例如 yourfunc:prod,而不仅仅是 yourfunc。这意味着如果您计划使用 3 个别名来调用 lambda 函数,则必须添加其中 3 个。
在 Api Gateway 控制台上,使用 ARN 而不是 lambda 函数名称。
对于我的情况,我会直接添加 lambda 函数的 arn 来替换 Lambda 名称。这对我有用,无需添加 {} 符号。
发布此内容是为了繁荣。 @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"}