无服务器框架功能HTTP触发事件配置

时间:2018-06-05 16:08:03

标签: refactoring yaml serverless-framework

假设我有一个无服务器的应用程序,它使用由HTTP事件触发的多个Lambda函数,它们都遵循类似的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事件声明以减少冗余的好方法是什么?

我知道serverless variables语法,但不确定如何创建更像某个函数的东西,它接受不同路径参数作为参数,并返回相应的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 :(得分:0)

就我个人而言,我并不担心。由于可以配置的元素数量众多,因此需要一定程度的冗长,但冗余绝不会对应用程序的性能产生负面影响。虽然它看似多余,但您真正拥有的是在功能上非常独特地影响变化的粒度,以及清晰度以了解它们之间的差异。

如果你想清理serverless.yml整体看看可能是针对所有函数定义或可能是每个事件的单独文件https://serverless.com/framework/docs/providers/aws/guide/variables/#reference-variables-in-other-files

通过将相关实体保持在一起但隔离,可以更好地为您提供服务,这样在查看基本的serverless.yml文件时,其认知负荷就会降低。