Я использую 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 Lambda.)

28
Jochem Schulenklopper 21 Окт 2017 в 00:05

3 ответа

Лучший ответ

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

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

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

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

18
Noel Llevares 21 Окт 2017 в 23:45

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

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

34
Alex 21 Окт 2017 в 17:23

Инициированный ответом @ dashnug «API-шлюз требует наличия этапа, и он добавляется в конце вашей конечной точки», а также другим ответом, который я читал в другом месте, я «решил» проблему, сделав спецификацию этапа немного менее понятной (о которой среда среды была упомянута) с использованием 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.
2
Jochem Schulenklopper 8 Май 2019 в 13:52