我可以在提供商级别定义“eventBus”吗?

Can I define `eventBus` at a provider level?

我有一个自定义事件总线,对于每个订阅的 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}'

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

如果您的 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}