gpt4 book ai didi

amazon-web-services - 是否可以使用 AWS SAM 配置具有不同 lambda 版本的不同 API Gateway 阶段

转载 作者:行者123 更新时间:2023-12-03 17:29:26 25 4
gpt4 key购买 nike

我有一个适用于我的应用程序的 SAM 模板。每次我使用新的 API 网关阶段名称部署 SAM 模板时,它都会替换之前创建的阶段。

所以,发现这篇文章可以帮助我发布指向不同 lambda 版本的不同版本。 https://aws.amazon.com/blogs/compute/using-api-gateway-stage-variables-to-manage-lambda-functions/

但是,为此,我必须在部署后手动更改 API Gateway。那么,有什么方法可以使用 AWS SAM 做到这一点吗?

例如,考虑以下 CloudFormation 模板摘录:

  ProxyMethod:
Type: AWS::ApiGateway::Method
Properties:
HttpMethod: ANY
RestApiId: !Ref Api # AWS::ApiGateway::RestApi defined elsewhere
ResourceId: !Ref ProxyResource # AWS::ApiGateway::Resource defined elsewhere
AuthorizationType: NONE #auth is done at the public API layer
Integration:
# client request passed through as-is. "Lambda proxy integration"
Type: AWS_PROXY
Uri: !Join
- ''
- - 'arn:aws:apigateway:'
- !Sub ${AWS::Region}
- ':lambda:path/2015-03-31/functions/${!stageVariables.FunctionArn}/invocations'
IntegrationHttpMethod: ANY
PassthroughBehavior: WHEN_NO_MATCH

这应该允许我使用运行时确定的 Lambda 函数创建一个方法,就像 example 中一样。 。但是,当我这样做时,部署模板时出现以下错误:

ProxyMethod CREATE_FAILED   Invalid lambda function (Service: AmazonApiGateway; Status Code: 400; Error Code: BadRequestException; ....

如何通过 CloudFormation 定义 API 网关方法,其目标 Lambda 函数由阶段变量确定?

最佳答案

这里的问题可以通过包含大部分完整的 lambda ARN 并仅对名称进行标记来解决。 CloudFormation 可能通过正则表达式运行整个字符串,当它看到 ${!stageVariables.FunctionArn} 时而不是arn:aws:lambda:blablabla然后就失败了。

关于amazon-web-services - 是否可以使用 AWS SAM 配置具有不同 lambda 版本的不同 API Gateway 阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57306067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com