跳至內容

為什麼我的 Amazon SQS 佇列收不到 EventBridge 通知?

2 分的閱讀內容
0

我設定了 Amazon EventBridge 規則,將通知傳送到我的 Amazon Simple Queue Service (Amazon SQS) 佇列,但是我的 SQS 佇列沒有收到事件通知。

解決方法

檢查 EventBridge 規則指標以了解調用失敗原因

查看 Amazon CloudWatch 主控台,以取得 TriggeredRules、Invocations 和 FailedInvocations 的 EventBridge 指標。

如果沒有 TriggeredRules 的資料,表示 EventBridge 規則未執行。若要解決此問題,請檢查您的來源組態,確認已設為傳送事件。此外,請確保您的來源組態與規則的事件模式相符。如需更多資訊,請參閱如何對 EventBridge 規則的問題進行疑難排解?

如果您同時看到 Invocations 和 FailedInvocations 的資料,則表示調用失敗。這通常是因為缺少 AWS Identity and Access Management (IAM) 權限所致。若要對此問題進行疑難排解,請前往下一節。

**注意:**若要檢查您的佇列是否收到通知,請查看 NumberOfMessagesSent 指標。

確認 EventBridge 具有將訊息傳送到佇列的必要權限

佇列的資源型政策必須允許 EventBridge 將訊息傳送到佇列。請務必輸入 events.amazonaws.com 作為 Service (服務),並輸入 sqs:SendMessage 作為 Action (動作)。

確認您的執行角色具有必要權限

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱 Troubleshooting errors for the AWS CLI (對 AWS CLI 錯誤進行疑難排解)。此外,請務必使用最新版 AWS CLI。

如果您使用執行角色,請確保該角色具有調用佇列的權限。如果您使用 EventBridge 主控台來建立角色,則主控台會自動將必要權限新增至規則的附加 IAM 角色。如果您使用 AWS CLI、AWS SDK 或 AWS CloudFormation 來建立規則,則必須手動新增角色權限。

若要檢查執行角色權限,請完成下列步驟:

  1. 開啟 EventBridge 主控台。
  2. 選擇 Rules (規則),然後選擇 EventBridge 規則。
  3. 選擇 Target (目標) 索引標籤,然後選擇規則的 IAM 角色。
  4. 在 Permissions (權限) 下,檢閱政策與信任關係。
    允許角色調用佇列的政策範例:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "sqs:SendMessage"
                ],
                "Resource": [
                    "arn:aws:sqs:region:account-id:queue-name"
                ]
            }
        ]
    }
    允許角色調用佇列的信任關係範例:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "TrustEventBridgeService",
                "Effect": "Allow",
                "Principal": {
                    "Service": "events.amazonaws.com"
                },
                "Action": "sts:AssumeRole",
                "Condition": {
                    "StringEquals": {
                        "aws:SourceAccount": "account-id",
                        "aws:SourceArn": "arn:aws:events:region:account-id:rule/bus-name/rule-name"
                    }
                }
            }
        ]
    }
    **注意:**請將 arn:aws:sqs:region:account-id:queue-name 替換為您的佇列 Amazon Resource Name (ARN)、將 account-id 替換為您的 AWS 帳戶 ID,並將 arn:aws:events:region:account-id:rule/bus-name/rule-name 替換為規則 ARN。

您也可以使用 GetRole API 來檢查 IAM 政策。或者,執行下列 get-role AWS CLI 命令:

aws iam get-role \
          --role-name Test-SQS-Role

**注意:**請將 Test-SQS-Role 替換為您的角色名稱。

如果 IAM 角色缺少權限,請更新該角色的信任政策或權限政策。

確認加密佇列具有必要的 AWS KMS 權限

如果您的佇列已加密,則您必須建立客戶受管 AWS Key Management Service (KMS) 金鑰,然後使用該自訂金鑰來設定伺服器端加密 (SSE)。

AWS 官方已更新 9 個月前