Serverless框架下SQS无法向EventBridge发送消息排查
问题分析与解决方案
你遗漏了SQS队列的EventBridge事件通知启用配置——默认情况下SQS不会自动将消息事件转发到EventBridge,必须显式开启该功能。
1. 开启SQS的EventBridge事件支持
在resources下的MySQSMessageQueue配置中,添加EventBridgeEnabled: true属性,这是核心缺失项:
resources: Resources: #SQS Queue MySQSMessageQueue: Type: AWS::SQS::Queue Properties: QueueName: my-sqs-message-dev EventBridgeEnabled: true # 新增该行,开启SQS到EventBridge的事件转发
2. 优化EventBridge事件模式(可选)
你的sendEmail函数事件模式已基本正确,可补充detail-type字段来精准匹配SQS消息事件:
functions: sendEmail: handler: ./src/index.sendEmail events: - eventBridge: pattern: source: - 'aws.sqs' detail-type: - 'SQS Message Sent' # 新增该行,明确匹配SQS消息发送事件 resources: - !GetAtt MySQSMessageQueue.Arn
3. 验证IAM权限(按需补充)
开启EventBridgeEnabled后AWS会自动配置基础权限,若后续遇到权限报错,可在provider的iamRoleStatements中补充EventBridge相关权限:
provider: # ... 其他原有配置 iamRoleStatements: - Action: - sqs:SendMessage Resource: !GetAtt MySQSMessageQueue.Arn - Action: - events:PutEvents Resource: "*" # 允许SQS向EventBridge推送事件
完成配置后重新部署服务,SQS收到消息时就会自动将事件转发到EventBridge,进而触发sendEmail Lambda函数。
内容的提问来源于stack exchange,提问作者Ninja-aman
相关产品推荐
相关产品推荐

