使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

为什么我的 Amazon SQS 队列没有收到 EventBridge 通知?

1 分钟阅读
0

我设置了 Amazon EventBridge 规则来向我的 Amazon Simple Queue Service (Amazon SQS) 发送通知,但我的 SQS 没有收到事件通知。

解决方法

查看 EventBridge 规则的 Amazon CloudWatch 指标以确认调用失败

在 CloudWatch 指标仪表板中选择时间范围,以查看 ** triggeredRules ** 以及 InvocationFailedInvocations CloudWatch 指标。

Invocation 数据表明该规则调用了目标。但是,FailedInvocations 数据显示该目标未被调用。FailedInvocations 表示永久故障,可能是权限错误或目标配置错误所致。有关详细信息,请参阅 EventBridge 指标

要确认 SQS 队列是否收到通知,请检查 SQS 队列的 NumberOfMessagesSent CloudWatch 指标。

确认您已向 EventBridge 授予向 SQS 队列发送消息所需的权限

Amazon SQS 队列基于资源的策略必须允许 EventBridge 向队列发送消息。例如,必须将 events.amazonaws.com 列为 Service Principalsqs: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:GenerateDataKeykms:Decrypt 权限。这些添加的权限允许 EventBridge 向加密队列发送消息。有关详细信息,请参阅配置 AWS KMS 权限

使用自定义 AWS 密钥设置所需的 AWS KMS 权限:

  1. 创建一个由客户自主管理的新 AWS KMS 密钥,该密钥包含 EventBridge 所需的权限 (events.amazonaws.com)
  2. 使用自定义 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 入门

AWS 官方
AWS 官方已更新 7 个月前