Как удалить сцену из URL-адресов для функций AWS Lambda + безсерверная система?

Я использую Serverless Framework для развертывания функций в AWS Lambda, но я не могу найти, где/как я могу удалить спецификатор этапа из созданных конечных точек URL. Документация, похоже, не охватывает эту часть.

Например, это мой serverless.yml (с несоответствующими частями):

service: cd-mock
provider:
  name: aws
  runtime: python3.6
  region: eu-west-1
package:
  include:
    - handler.py
functions:
  index:
    handler: handler.index
    events:
      - http:
          path: /
          method: get

После serverless deploy возвращается следующая служебная информация:

service: cd-mock
stage: dev
region: eu-west-1
stack: cd-mock-dev
api keys:
  None
endpoints:
  GET - https://ab1cd2ef3g.execute-api.eu-west-1.amazonaws.com/dev/
functions:
  index: cd-mock-dev-index

Обратите внимание на часть /dev в конечной точке URL-адреса, а также в функции. Это значение dev является значением по умолчанию для параметра stage в файле конфигурации.

Задание stage: something в файле serverless.yml будет иметь /something как суффикс в URL-адресе и как часть функции.

Вопрос: как я могу удалить спецификацию этапа из созданных конечных точек URL-адреса или: как я могу предотвратить, чтобы эта спецификация этапа стала частью сгенерированных URL-адресов?

(То, что эта часть является частью функции, в порядке. Это легко будет отделить функции staging и production на панели управления AWS лямбда.)

Ответ 1

Это функция/соглашение API-шлюза NOT от Serverless Framework, поэтому serverless ничего не может с этим поделать.

API Gateway требует вас со сценой и добавляется в конце вашей конечной точки.

Конечные точки API Gateway предназначены для разработчиков, хотя это не означает, что они удобны для пользователя.

Если вы хотите, чтобы он был удобным для пользователя, вы можете добавить для него собственный домен. На разных этапах могут быть разные пользовательские субдомены.

Ответ 2

Одна вещь, которую вы можете сделать, это использовать собственный домен, который вы используете (например, mycompany.com), и сопоставить его с вашим шлюзом API. Таким образом, вместо запроса https://ab1cd2ef3g.execute-api.eu-west-1.amazonaws.com/dev/, вы должны сделать запрос https://api.mycompany.com/.

Там есть плагин под названием serverless-domain-manager, который упрощает настройку этих настраиваемых доменов. Отметьте этот пост в блоге для полного пошагового руководства о том, как его использовать.

Ответ 3

Инициируется ответом @dashnug "API Gateway требует наличия этапа, и он добавляется в конце вашей конечной точки", а также другим ответом, который я читал в другом месте. Я "решил" проблему, сделав спецификацию этапа немного менее выразительной (о которой этап среды был упомянут) с использованием v1 в качестве этапа. Это также предполагает некоторую версию API, что также приемлемо в моем случае.

Итак, мой раздел serverless.yml теперь содержит:

provider:
  name: aws
  runtime: python3.6
  memorySize: 512
  region: ${opt:region, 'eu-west-1'}
  profile: ${opt:profile, 'default'}
  stage: ${opt:stage, 'v1'}  # A trick to don't end up with "production" or "staging" as stage.