0

我想根据不同的规则触发单个 lambda。我可以在 lambda 上设置多个事件规则吗?类似于以下内容:

mylambda:
    handler: lambdas/mylambda.handler
    description: Reusable lambda 
    iamRoleStatements:
      - Effect: Allow
        Action:
          - events:PutEvents
        Resource:
          - ${ssm:/foo/bar/myEventBus}
    events:
      - eventBridge:
          eventBus: ${ssm:/foo/bar/myEventBusArn}
          pattern:
            source:
              - foo
            detail:
              myKey:
                - bar
      - eventBridge:
          eventBus: ${ssm:/foo/bar/myEventBusArn}
          pattern:
            source:
              - baz
            detail:
              myKey:
                - oof

我发现这个https://www.serverless.com/framework/docs/providers/aws/events/event-bridge/ 似乎表明它是可能的,但我似乎无法让它工作。

我收到以下错误:

Failed to create resource. The statement id (mylambda-mylambda-rule) provided already exists. Please provide a new statement id, or remove the existing statement.
4

3 回答 3

0

这会在 EventBridge 上的事件总线中创建规则,但不会从 lambda 角度创建 cloud-watch 和 lambda 之间的关联,因此当您将事件放入事件总线时,它永远不会触发 lambda。当您使用默认方式创建 eventbridge 和 lambda 之间的关联时:

 events:
   - eventBridge:
       eventBus: ${env:ORDERS_EVENT_BUS_ARN}
       pattern:
         source:
           - domain.orders

它在 EventBridge 中创建规则并在 lambda 中创建 Cloudwatch 事件关联,您可以在 lambda 配置选项卡中检查它。

于 2021-02-04T20:30:44.480 回答
0

看起来 EventBridge 不支持 lambda 上的多个规则。除非有人知道不同,但到目前为止我还没有发现任何表明这是可能的。

于 2020-10-14T23:34:48.050 回答
0

是的,有一些解决方法是可能的。

创建规则作为资源。将您的 lambda 作为目标添加到创建的规则中。注意:确保您拥有最新版本的无服务器框架

functions:

  mylambda:

    handler: lambdas/mylambda.handler

    description: Reusable lambda 

    iamRoleStatements:

      - Effect: Allow

        Action:

          - events:PutEvents

        Resource:

          - ${ssm:/foo/bar/myEventBus}

resources:

  Resources:

    EventbridgeRule1:

      Type: AWS::Events::Rule

      Properties:

        EventBusName: ${ssm:/foo/bar/myEventBusArn}

        EventPattern:

          source:

            - foo

          detail:

            myKey:

              - bar

        Name: rule-1

        Targets:

          - Arn: !GetAtt 

              - MyLambdaLambdaFunction

              - Arn

            Id: MyLambda

    EventbridgeRule2:

      Type: AWS::Events::Rule

      Properties:

        EventBusName: ${ssm:/foo/bar/myEventBusArn}

        EventPattern:

          source:

              - baz

          detail:

            myKey:

              - oof

        Name: rule-2

        Targets:

          - Arn: !GetAtt 

              - MyLambdaLambdaFunction

              - Arn

            Id: MyLambda
于 2021-01-04T07:09:49.217 回答