首页 文章

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

提问于
浏览
6

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

MyFunction:
  Type: AWS::Serverless::Function
  Properties:
    …
    Events:
      MyApi:
        Type: Api
        Properties:
          Path: /
          Method: any

这样可行,但它会创建一个名为"Prod"的API阶段,该阶段必须用作所有URL的前缀 . 我不希望我的网址是“https://something/Prod/foo ", I want them to be " 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:
      ???

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

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

1 回答

  • 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
    

相关问题