我使用SAM来部署Lambda函数并使用大约使用此模板snipplet通过API网关使其可通过HTTP进行调用:
Cannot use mutating member on immutable value: function call returns immutable value
这样可行,但它创建了一个名为" Prod"的API阶段,必须将其用作所有URL的前缀。我不希望我的网址是" https://something/Prod/foo",我希望它们是" https://something/v1/foo",即我选择的内容。
如何更改舞台名称?
我尝试将API声明为单独的资源,并使用MyFunction:
Type: AWS::Serverless::Function
Properties:
…
Events:
MyApi:
Type: Api
Properties:
Path: /
Method: any
属性设置舞台的名称,但是,这需要我设置StageName
,这似乎是一个深深的兔子洞。
DefinitionBody
我知道上面例子中的MyFunction:
Type: AWS::Serverless::Function
Properties:
…
Events:
MyApi:
Type: Api
Properties:
Path: /
Method: any
RestApiId: !Ref MyApi
MyApi:
Type: AWS::Serverless::Api
Properties:
StageName: v1
DefinitionBody:
???
应该是Swagger,但是我宁愿不必在那里写任何东西,模板也足够详细了。因为我不能写这个部分,如果我可以忍受舞台名称" Prod"在我看来,必须有一种方法可以避免在那里写任何东西,只需设置阶段名称。
如何在不必编写大量模板代码和/或Swagger的情况下更改舞台名称?
答案 0 :(得分:0)
SAM版本1.7.0不再需要指定DefinitionBody或DefinitionUri,因此您现在应该能够完全执行第二个示例中提到的内容,而不必包含DefinitionBody:
MyFunction:
Type: AWS::Serverless::Function
Properties:
…
Events:
MyApi:
Type: Api
Properties:
Path: /
Method: any
RestApiId: !Ref MyApi
MyApi:
Type: AWS::Serverless::Api
Properties:
StageName: v1