如何更改SAM模板中API阶段的名称?

时间:2018-01-10 21:48:12

标签: aws-lambda aws-api-gateway aws-sam-cli

我使用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的情况下更改舞台名称?

1 个答案:

答案 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