问题描述
我有一个 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