我设置了 Amazon EventBridge 规则来向我的 Amazon Simple Queue Service (Amazon SQS) 发送通知,但我的 SQS 没有收到事件通知。
解决方法
查看 EventBridge 规则的 Amazon CloudWatch 指标以确认调用失败
在 CloudWatch 指标仪表板中选择时间范围,以查看 ** triggeredRules ** 以及 Invocation 和 FailedInvocations CloudWatch 指标。
Invocation 数据表明该规则调用了目标。但是,FailedInvocations 数据显示该目标未被调用。FailedInvocations 表示永久故障,可能是权限错误或目标配置错误所致。有关详细信息,请参阅 EventBridge 指标。
要确认 SQS 队列是否收到通知,请检查 SQS 队列的 NumberOfMessagesSent CloudWatch 指标。
确认您已向 EventBridge 授予向 SQS 队列发送消息所需的权限
Amazon SQS 队列基于资源的策略必须允许 EventBridge 向队列发送消息。例如,必须将 events.amazonaws.com 列为 Service Principal,sqs:SendMessage 必须列为 Action 值。
允许 EventBridge 向 Amazon SQS 队列发送消息的基于资源的 SQS 队列的策略语句示例。
{
"Sid": "AWSEvents_custom-eventbus-ack-sqs-rule_dlq_sqs-rule-target",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sqs:SendMessage",
"Resource": "arn:aws:sqs:region:account-id:queue-name",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "arn:aws:events:region:account-id:rule/bus-name/rule-name"
}
}
}
确认您的加密 SQS 队列具有所需的 AWS Key Management Service 权限
如果您的 SQS 队列已加密,则创建客户自主管理型 AWS KMS 密钥。确保在 KMS 密钥策略中包含 kms:GenerateDataKey 和 kms:Decrypt 权限。这些添加的权限允许 EventBridge 向加密队列发送消息。有关详细信息,请参阅配置 AWS KMS 权限。
使用自定义 AWS 密钥设置所需的 AWS KMS 权限:
- 创建一个由客户自主管理的新 AWS KMS 密钥,该密钥包含 EventBridge 所需的权限 (events.amazonaws.com)。
- 使用自定义 AWS KMS 密钥为您的 SQS 队列配置服务器端加密 (SSE)。
允许 EventBridge 向加密的 SQS 队列发送事件的 KMS 密钥策略示例
{
"Sid": "Allow EventBridge to use the key",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "*"
},/code>
相关信息
Amazon EventBridge 入门