我可以在提供者级别定义`eventBus`吗?

时间:2020-05-26 12:09:34

标签: serverless-framework

我有一个自定义事件总线,对于每个预订的Lambda,我必须定义要使用的总线。

例如:

functions:
    hello:
        handler: src/handlers/hello.main
        events:
            - eventBridge:
                  eventBus: 'arn:aws:events:#{AWS::Region}:#{AWS::AccountId}:event-bus/events-${opt:stage}'
                  pattern:
                      source:
                          - dynamodb-stream
    world:
        handler: src/handlers/world.main
        events:
            - eventBridge:
                  eventBus: 'arn:aws:events:#{AWS::Region}:#{AWS::AccountId}:event-bus/events-${opt:stage}'
                  pattern:
                      source:
                          - dynamodb-stream

是否可以在提供者级别定义它?

例如:

provider:
    eventBridge:
        eventBus: 'arn:aws:events:#{AWS::Region}:#{AWS::AccountId}:event-bus/events-${opt:stage}'

通常存在这种模式,但是在文档中却没有。

1 个答案:

答案 0 :(得分:1)

如果您的yml文件中有重复的属性,那么最好使用anchors

functions:
    hello:
        handler: src/handlers/hello.main
        events: &funcEvents
            - eventBridge:
                  eventBus: 'arn:aws:events:#{AWS::Region}:#{AWS::AccountId}:event-bus/events-${opt:stage}'
                  pattern:
                      source:
                          - dynamodb-stream
    world:
        handler: src/handlers/world.main
        events: *funcEvents

但是,不幸的是,您不能在提供者级别上对其进行定义。

为了保持您的函数声明整洁,请在自定义部分定义ARN,例如:


functions:
    hello:
        handler: src/handlers/hello.main
        events: &funcEvents
            - eventBridge:
                  eventBus: ${self:custom.eventBusArn}
                  pattern:
                      source:
                          - dynamodb-stream
    world:
        handler: src/handlers/world.main
        events: *funcEvents

custom:
  eventBusArn: arn:aws:events:#{AWS::Region}:#{AWS::AccountId}:event-bus/events-${opt:stage}