本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon EventBridge 排程器故障診斷
您可以使用本節中的主題來疑難排解常見的 Amazon EventBridge 排程器問題。
主題
我的排程失敗,並出現目標錯誤
目標呼叫失敗是 EventBridge 排程器最常見的問題之一。這些失敗可能有多種原因:
常見原因:
遺失或不正確的目標參數。
網路連線問題。
API 限流。
目標組態不正確。
疑難排解步驟
-
設定無效字母佇列 (DLQ)
DLQ 可協助您擷取和分析失敗的調用。
失敗的調用會傳送至 DLQ,其中包含詳細的錯誤訊息。
若要設定 DLQ,請將其新增至您的排程組態:
{ "DeadLetterConfig": { "Arn": "arn:aws:sqs:region:account-id:MyDLQ" } }注意:如果您的 DLQ 使用 KMS 金鑰加密,請確定金鑰政策允許 EventBridge 排程器使用它:
{ "Sid": "Allow EventBridge Scheduler to use the key", "Effect": "Allow", "Principal": { "Service": "scheduler.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" } -
驗證 API 參數
確保目標 API 呼叫的所有必要參數都存在且格式正確。
檢查參數值是否在允許的範圍內。
如果使用 VPC 端點,請確認可從 VPC 存取 API 端點。
-
檢閱網路組態
如果呼叫因暫時性網路問題而失敗,請實作重試邏輯。
重試政策範例:
{ "RetryPolicy": { "MaximumRetryAttempts": 3, "MaximumEventAgeInSeconds": 3600 } } -
檢查目標特定的組態
對於範本目標 (例如 ECS 任務),請確保您透過排程建立 API 的
Target.Input參數提供覆寫。確認您的目標服務受到支援且設定正確。
排程執行角色許可問題
IAM 角色許可問題是排程執行失敗的常見原因。以下是疑難排解和解決這些問題的方法:
常見原因
缺少目標服務所需的許可
排程中的角色組態不正確
缺少與 EventBridge 排程器服務的信任關係
存取加密資源的許可不足
徵狀
在 CloudWatch
TargetErrorCount中增加指標排程無法在排程組態中沒有明顯問題的情況下執行
疑難排解步驟
-
監控 CloudWatch 指標
檢查 CloudWatch 中的
TargetErrorCount指標。
-
使用無效字母佇列 (DLQ) 確認許可問題
為您的排程設定 DLQ。
如果您的目標有許可問題,且 DLQ 已正確設定,則您會在 DLQ 中看到失敗的調用,其中包含許可相關的錯誤訊息。
如果即使 CloudWatch 指標中顯示的執行失敗,DLQ 仍然空白,這可能表示許可問題,導致 EventBridge 排程器無法寫入 DLQ 本身。
注意
確保 DLQ 本身具有正確的許可。如果加密,請確定 EventBridge 排程器具有使用 KMS 金鑰的許可。
-
驗證信任關係
確保您的 IAM 角色與 EventBridge 排程器具有正確的信任關係:
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "scheduler.amazonaws.com" }, "Action": "sts:AssumeRole" }] } -
檢查排程執行角色許可
排程的執行角色需要特定許可,才能叫用不同的目標類型。
包含在排程執行角色政策中的範例許可:
// For Lambda function targets - add to schedule execution role { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:region:account-id:function:function-name" }] } // For SQS queue targets - add to schedule execution role { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "sqs:SendMessage" ], "Resource": "arn:aws:sqs:region:account-id:queue-name" }] } -
檢查加密的資源存取
如果您的目標使用加密的資源 (例如 KMS 加密的 SQS 佇列),請確定您的角色具有使用 KMS 金鑰的許可:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:region:account-id:key/key-id" } ] } -
驗證角色 ARN 組態
確保排程組態中的角色 ARN 正確無誤。
確認角色與您的排程位於相同的 AWS 帳戶 和 區域中。
了解和管理服務配額
如果您在建立排程或查看節制調用時遇到問題,您可能會達到服務配額限制。EventBridge 排程器具有排程數量、排程群組和調用率的配額,可能因區域而異。
識別配額問題
若要判斷您是否達到配額限制:
-
監控 CloudWatch 指標
檢查
InvocationThrottleCount指標。此指標的增加表示您超過調用率限制。檢閱
InvocationAttemptCount指標以了解您目前的用量。
-
注意特定錯誤訊息
建立或修改排程時,
LimitExceededException表示您已達到排程或排程群組的數量上限。API 呼叫傳回調節錯誤,表示您超過 API 請求配額。
解決配額問題
如果您確定要達到配額限制:
檢閱並最佳化您目前的排程。請考慮合併類似的排程或移除未使用的排程。
針對 API 限流,請在 API 呼叫中實作具有退避的重試。
如果您需要更高的配額,請透過 Service Quotas 主控台請求提高配額。選取 EventBridge 排程器,選擇您需要增加的配額,然後提交具有業務理由的請求。
排程模式和觸發計時問題
使用者有時會遇到排程未在預期時間觸發的問題。這最常見的原因是對排程模式、日光節約時間變更或彈性時段的誤解。
常見原因
cron 表達式的錯誤解譯。
在日光節約時間變更期間的非預期行為。
關於彈性時段的混淆。
對速率表達式的誤解。
疑難排解步驟
-
驗證 cron 表達式
確保您的 Cron 表達式格式正確。
請注意,您無法在 Cron 表達式中同時指定day-of-month和day-of-week欄位。
-
時區考量
在建立排程時選取您偏好的時區。
了解日光節約時間如何影響您的排程,因為此調整是以 UTC 為基礎。
日光節約影響的範例:如果您將排程設定為在 GMT 上午 7:00 執行:
冬天:排程在 GMT 上午 7:00 執行 (因為 GMT = UTC)
在夏天:排程仍然在 UTC 上午 7:00 執行,現在是 GMT/BST 上午 6:00
如果您需要在全年的相同當地時間執行排程,請務必在建立排程時選取適當的時區,以及日光節約如何影響該時區。
-
了解彈性時段
彈性時段允許 EventBridge 排程器最佳化調用。
排程可能不會在視窗開始時完全觸發。
監控實際調用時間,以了解行為。
-
檢閱速率和 Cron 表達式
確保速率表達式格式正確 (例如
rate(5 minutes)、rate(1 hour))。對於速率和 Cron 表達式,請注意,排程調用不會緊固到一分鐘的第 0 秒。
排程可能會在指定的分鐘內觸發,但不一定會在分鐘的確切開始時觸發。
例如:
使用 的排程
rate(1 hour)可能會在下午 2:00:45、下午 3:00:32、下午 4:00:18 等時間執行。為 設定的 Cron 排程
0 * * * ? *(每小時) 可能會在下午 2:00:15、下午 3:00:07、下午 4:00:52 等時間執行。
-
監控 CloudWatch 指標
使用
InvocationAttemptCount指標來驗證您的排程是否正在觸發。檢查調用
TargetErrorCount是否失敗。如果您已設定無效字母佇列,請監控
InvocationsSentToDeadLetterCount以追蹤失敗的呼叫。
建立排程模式和 Cron 表達式
使用者經常在建立排程模式時遇到問題,特別是使用 Cron 表達式時。以下是一些常見問題以及如何解決這些問題:
常見問題
不正確的 cron 語法
嘗試使用不支援的 cron 功能
混淆哪些欄位可以一起使用
疑難排解步驟
我的目標是否被觸發?
若要確認您的目標是否正在觸發:
-
檢查 CloudWatch 指標:
InvocationAttemptCount顯示嘗試的調用次數TargetErrorCount指出是否有任何調用失敗TargetErrorThrottledCount顯示您的目標是否正在調節InvocationDroppedCount指出是否已捨棄任何調用
設定無效字母佇列 (DLQ) 以擷取和分析任何失敗的調用。
範本化與通用目標
如果您收到「提供的請求無效:【服務】 不是目標支援的 服務」之類的錯誤,您可能嘗試使用不支援的服務做為範本化目標。
若要解決此問題:
觸發非預期調用的排程更新
當您變更排程時,調用可能不會立即反映更新的排程。允許一小段時間來讓變更生效。例如,如果您更新接近其原始觸發時間的排程,您可能會根據原始排程組態看到 呼叫。
停用或啟用一次性排程
在超過原始排程時間後重新啟用一次性排程時,排程可能會立即叫用其目標。即使排程在原始執行時間之前已停用,也會發生這種情況。
例如:
目前時間:13:15 UTC
為 建立一次性排程:13:30 UTC
在 UTC 13:30 之前停用排程
排程在 UTC 14:00 重新啟用
結果:重新啟用時可立即叫用目標