触发 SQS 的 EventBridge 的 SAM 模板

问题描述

我有一个 EventBridge,它接收事件并希望将其发布到使用 sam 模板触发 Lambdafunction 的 SQS

在 EventBridge 上放置事件是可以的,但是 SQS 没有被 EventBridge 触发

我在以下 yaml

中有什么错误吗?
eventSqsQueue:
    Type: AWS::SQS::Queue

  eventSynchronizer:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: build/eventSynchronizer
      Handler: eventSynchronizer.Handler      
      Events:
        MySQSEvent:
          Type: SQS
          Properties:
            Queue: !GetAtt eventSqsQueue.Arn
            BatchSize: 10

  eventEventRule: 
    Type: AWS::Events::Rule
    Properties:      
      EventPattern: 
        account: 
          - !Sub '${AWS::AccountId}'
        source:
          - "microserviceName"
        DetailType:
          - "event Created"
          - "event Updated"
          - "event Deleted"
      Targets: 
        - Arn: !GetAtt eventSqsQueue.Arn
          Id: "SQSqueue"

  EventBridgetoToSqsPolicy:
    Type: AWS::SQS::QueuePolicy
    Properties:
      PolicyDocument:
        Statement:
        - Effect: Allow
          Principal:
            Service: events.amazonaws.com
          Action: SQS:SendMessage
          Resource:  !GetAtt eventSqsQueue.Arn          
      Queues:
        - Ref: eventSqsQueue

解决方法

DetailType 应该是 detail-type 并删除一些额外的书面代码

这是最终的解决方案

eventSqsQueue:
    Type: AWS::SQS::Queue

  eventSynchronizer:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: build/eventSynchronizer
      Handler: eventSynchronizer.Handler
      # ReservedConcurrentExecutions: 1      
      Events:
        MySQSEvent:
          Type: SQS
          Properties:
            Queue: !GetAtt eventSqsQueue.Arn
            BatchSize: 10

  eventEventRule: 
    Type: AWS::Events::Rule
    Properties:
      Description: "eventEventRule"
      EventPattern:       
        source:
          - "microserviceName"
        detail-type:
          - "event Created"
          - "event Updated"
          - "event Deleted"
      Targets: 
        - Arn: !GetAtt eventSqsQueue.Arn
          Id: "SQSqueue"

  EventBridgeToToSqsPolicy:
    Type: AWS::SQS::QueuePolicy
    Properties:
      PolicyDocument:
        Statement:
        - Effect: Allow
          Principal:
            Service: events.amazonaws.com
          Action: SQS:SendMessage
          Resource:  !GetAtt eventSqsQueue.Arn          
      Queues:
        - Ref: eventSqsQueue
```
,

如果您想检查模板是否有错误,请使用

$ sam validate

更多信息在这里: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-validate.html