Как я могу изменить название этапа API в шаблоне SAM?

Я использую SAM, чтобы развернуть функцию Lambda и сделать ее вызываемой через HTTP с помощью шлюза API, используя примерно этот фрагмент шаблона:

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

Это работает, но создает этап API под названием «Prod», который необходимо использовать в качестве префикса для всех URL-адресов. Я не хочу, чтобы мои 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:
      ???

Я знаю, что ??? в приведенном выше примере должен быть Swagger, но я бы предпочел не писать там ничего, шаблон становится достаточно подробным. Поскольку мне не нужно писать эту часть, если я могу просто жить со сценическим псевдонимом «Prod», мне кажется, что должен быть способ избежать необходимости писать что-либо там и просто установить сценическое имя.

Как я могу изменить название сцены без написания большого количества кода шаблона и / или Swagger?


person Theo    schedule 10.01.2018    source источник


Ответы (1)


В 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
person brunocostalopes    schedule 20.11.2018