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

The*_*heo 6 aws-lambda aws-api-gateway aws-sam-cli

我正在使用SAM来部署Lambda函数,并通过使用大约此模板snipplet的via API Gateway使其可通过HTTP进行调用:

MyFunction:
  Type: AWS::Serverless::Function
  Properties:
    …
    Events:
      MyApi:
        Type: Api
        Properties:
          Path: /
          Method: any
Run Code Online (Sandbox Code Playgroud)

这样可行,但它会创建一个名为"Prod"的API阶段,该阶段必须用作所有URL的前缀.我不希望我的网址是" https:// something/Prod/foo ",我希望它们是" https:// something/v1/foo ",即我选择的东西.

如何更改舞台名称?

我已经尝试将API声明为一个单独的资源,并使用该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:
      ???
Run Code Online (Sandbox Code Playgroud)

我知道???在上面的例子中应该是Swagger,但我更愿意不必在那里写任何东西,模板就足够了.因为如果我可以使用舞台名称"Prod",我不必写这部分,在我看来,必须有一种方法可以避免在那里写任何东西并设置舞台名称.

如何在不必编写大量模板代码和/或Swagger的情况下更改舞台名称?

bcl*_*bcl 3

SAM 版本 1.7.0 不再需要指定 DefinitionBody 或 DefinitionUri,因此您现在应该能够准确执行第二个示例中提到的操作,而无需包含 DefinitionBody:

\n\n
MyFunction:\n  Type: AWS::Serverless::Function\n  Properties:\n    \xe2\x80\xa6\n    Events:\n      MyApi:\n        Type: Api\n        Properties:\n          Path: /\n          Method: any\n          RestApiId: !Ref MyApi\n\nMyApi:\n  Type: AWS::Serverless::Api\n  Properties:\n    StageName: v1\n
Run Code Online (Sandbox Code Playgroud)\n