我設定了 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 來建立規則,則必須手動新增角色權限。
若要檢查執行角色權限,請完成下列步驟:
- 開啟 EventBridge 主控台。
- 選擇 Rules (規則),然後選擇 EventBridge 規則。
- 選擇 Target (目標) 索引標籤,然後選擇規則的 IAM 角色。
- 在 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)。