gpt4 book ai didi

amazon-web-services - 具有 SAM 的 API 网关未正确更新

转载 作者:行者123 更新时间:2023-12-04 12:45:27 25 4
gpt4 key购买 nike

我们使用 Cloud Formation 定义一堆 Lambda 函数:

AWSTemplateFormatVersion: '2010-09-09'
Transform:
- 'AWS::Serverless-2016-10-31'

Resources:
MyLambda:
Type: 'AWS::Serverless::Function'
Properties:
Handler: com.handler::MyLambda
Runtime: java8
CodeUri: .
Description: Some desc
MemorySize: 512
Timeout: 15
Role: !Ref LambdaRole
FunctionName: MyLambda
Events:
MyLambdaEvt:
Type: Api
Properties:
RestApiId: !Ref MyApiDef
Path: /lambda/my
Method: get

MyApiDef:
Type: AWS::Serverless::Api
Properties:
DefinitionUri: s3://a-bucket/api-gateway.yml
StageName: prod

Outputs:
ApiUrl:
Description: URL of your API endpoint
Value: !Join
- ''
- - https://
- !Ref MyApiDef
- '.execute-api.'
- !Ref 'AWS::Region'
- '.amazonaws.com/prod'

CodePipeline 生成变更集并执行它。

通过这种方式,所有 Lambda 函数都已正确更新,但 API Gateway 端点未正确更新,我们需要在 s3://a-bucket/api-gateway.yml 中导入和部署 YML手动。

最佳答案

为什么 API 不更新(有根据的猜测)

为了将更改添加到 change set ,CloudFormation 必须检测更改。如果部署之间唯一发生变化(对于 MyApiDef)的是 S3 上输出的 .yaml 文件的内容,则 CloudFormation 将不会检测到需要添加到更改集的更改。

如果此 API 定义存在于 CF 模板中,而不是 S3 上的文件中,CF 显然会检测到每个更改并为您更新 API。

由于定义位于 S3 中,并且文件名未更改,因此未检测到任何更改,因此不会更新任何内容。

可能的解决方法

您必须让 CloudFormation 相信您的 API 定义发生了一些变化。这两件事对我有用:

  • 每次运行都会更新 MyApiDef key 本身。 (MyApiDefv2,MyApiDefv3 等)
  • 更新 DefinitionUri 有效。 (即版本S3 中的文件名)。

这两个选项都不是很好,但在 S3 中的文件名中附加版本似乎比其他选项更合理。

可能还有其他方法可以说服 CloudFormation 已发生更改。值得注意的是,我无法得到 Variables为此目的而努力。

关于amazon-web-services - 具有 SAM 的 API 网关未正确更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47891689/

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