Функция Serverless Framework Конфигурирование события триггера HTTP - PullRequest
0 голосов
/ 05 июня 2018

Скажем, у меня есть серверное приложение, которое использует несколько функций Lambda, запускаемых по событию HTTP, где все они следуют одинаковому формату URL (один и тот же параметр пути) - например: Путь к функции 1: events/{id} Путь к функции 2: events/{id}/attendees Путь к функции 3: events/{id}/join

Мой serverless.yml начинает выглядеть следующим образом:

...
functions:
  get_event:
    handler: handler.getEvent
    events:
      - http:
        path: events/{id}
        method: get
        cors: true
        request:
          parameters:
            paths:
              id: true
  get_event_attendees:
    handler: handler.getEventAttendees
    events:
      - http:
        path: events/{id}/attendees
        method: get
        cors: true
        request:
          parameters:
            paths:
              id: true
  join_event:
    handler: handler.joinEvent
    events:
      - http:
        path: events/{id}/join
        method: post
        cors: true
        request:
          parameters:
            paths:
              id: true

Как можно реорганизовать эти объявления событий http, чтобы уменьшить избыточность?

Мне известен синтаксис безсерверных переменных , но я не уверен, как сделать что-то более похожее на функцию, которая принимает в качестве аргументов различные параметры пути и возвращает соответствующий YML.

Я считаю, что делать что-то вроде:

custom:
  httpRequest:
    parameters:
      paths:
        id: true

...

functions:
  get_event:
    handler: handler.getEvent
    events:
      - http:
        path: events/{id}
        method: get
        request: ${self:custom:httpRequest}
  get_event_attendees:
    handler: handler.getEventAttendees
    events:
      - http:
        path: events/{id}/attendees
        method: get
        request: ${self:custom:httpRequest}
  ...

работает только в том случае, если все HTTP-функции, которые я когда-либо пишу, имеют только один параметр пути id.

1 Ответ

0 голосов
/ 19 июня 2018

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

Если вы хотите очистить сервер.yml общий взгляд на разбивку на отдельные файлы, возможно, для всех определений функций или, возможно, для каждого события https://serverless.com/framework/docs/providers/aws/guide/variables/#reference-variables-in-other-files

Это, вероятно, будет лучше обслуживать вас, объединяя связанные сущности, но разделяя их, так что при просмотре будет меньше когнитивной нагрузки.базовый файл serverless.yml.

...