我排程了 Amazon Elastic Container Service (Amazon ECS) 任務定期執行。但是,我的 Amazon ECS 任務未啟動,並且我沒有獲得執行日誌或叢集中任務的歷史記錄。
解決方法
注意: 如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,則請參閱對 AWS CLI 進行錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
當您使用已排定的任務時,Amazon EventBridge 會將 RunTask API 呼叫到 Amazon ECS,以代表您執行任務。由於下列原因,您已排定的 Amazon ECS 任務可能無法調用:
- 您的 EventBridge 時間或 cron 表達式設定錯誤。
- EventBridge 規則或排程不調用目標。
- RunTask API 無法執行。
- 容器執行個體因應用程式問題或資源限制而退出。
- 由於容量限制,已排程的任務失敗。
- 由於網路連線問題,已排程的任務失敗。
確認 EventBridge Cron 表達式已正確設定
若要取得 EventBridge cron 表達式,請執行下列其中一個 AWS CLI 命令。
如果您使用 EventBridge 規則,則執行 describe-rule 命令:
aws events describe-rule --name example-rule --region example-region
如果您使用 EventBridge Scheduler,則執行 get-schedule 命令:
aws scheduler get-schedule --name example-schedule --region example-region
注意: 將 example-rule 替換為您的規則名稱,將 example-schedule 替換為您的已排程名稱,並將 example-region 替換為您的 AWS 區域。
在命令的輸出中,檢查 ScheduleExpression 參數中的 EventBridge cron 表達式。確保已將規則排程設定為 UTC+0 時區。
檢查規則或排程是否未調用目標
若要檢查 EventBridge 規則的 **Invocations **和 FailedInvocations Amazon CloudWatch 指標,請完成以下步驟:
- 開啟 CloudWatch 主控台。
- 在導覽窗格中,選擇 Metrics (指標),然後選擇 All metrics (所有指標)。
- 選擇 Events (事件)。
- 選擇 By Rule Name (依規則名稱)。
- 為執行 Amazon ECS 任務的 EventBridge 規則選擇 TriggerRules、Invocations 和 FailedInvocations。
- 選擇 Graphed metrics (圖表化指標) 索引標籤。
- 在 Statistic (統計資料) 中,為每個指標選擇 SUM。
若要檢查 EventBridge Scheduler 的效能,請查看 InvocationAttemptCount、TargetErrorCount 和 InvocationDroppedCount CloudWatch 指標。
如果您看到 FailedInvocations 或 InvocationDroppedCount 資料,請確認 EventBridge AWS Identity and Access Management (IAM) 角色是否有權限呼叫您的任務。
如果您看到 TargetErrorCount 資料,則表示目標調用有問題。請檢查您的任務是否已啟動、已啟動但立即失敗或未完成。
檢查 RunTask 動作是否失敗
請完成下列步驟:
- 開啟 AWS CloudTrail 主控台。
- 在導覽窗格中,選擇 Event history (事件歷史記錄)。
- 在 Lookup attributes (尋找屬性) 中,選取 Event name (事件名稱)。
- 在 Enter an event name (輸入事件名稱) 中,輸入「run task」(執行任務)。
- 在時間範圍篩選器中,選取您預計已排程 Amazon ECS 任務執行的時間。
- 在資料表中,選取要查看的事件。
- 在 JSON 事件記錄中,檢查 errorMessage 或 responseElements.failures.reason 以確認 API 未調用排程任務。
注意: 您可以在 responseElements.tasks.taskARN 欄位中找到失敗任務的任務 ID。
- 對 API 失敗進行疑難排解。
檢查容器在任務執行後是否退出
即使任務成功執行,Amazon ECS 任務也可能因應用程式問題或資源限制而停止。若要解決此問題,請參閱如何對在我的容器結束時停止或無法啟動的 Amazon ECS 任務進行疑難排解?
檢查容量限制問題
當您的叢集沒有足夠的運算資源 (例如 CPU 和記憶) 時,就會出現容量限制問題而導致任務失敗。或者,當在同一叢集上執行的其他工作負載導致高資源使用率時,也會出現問題。限制性的任務放置限制或策略也可能減少您的可用資源。
若要監控您的資源使用情況,請在您的 Amazon ECS 叢集上設定 Container Insights。您也可以設定 CloudWatch 警示,以便在達到資源使用率閾值時通知您。為了確保在需要時資源可用,請為任務設定 CPU 和記憶體預留。您可能需要增加 Amazon ECS 服務所需的數量來橫向擴充叢集,或使用叢集自動擴展。
檢視現有的任務放置限制,並進行調整以減少限制。最佳做法是優先處理關鍵工作負載,重新排程非必要工作負載,並測試不同的放置策略 (例如分散、裝箱或隨機)。
使用 Amazon ECS 容量提供者為重要工作負載預留容量。對於需要隔離硬體的工作負載,最佳做法是使用 Amazon Elastic Compute Cloud (Amazon EC2) 專用執行個體。使用 AWS Fargate 執行需要可用資源的任務。
檢查網路連線問題
若要對已排程任務的網路連線問題進行疑難排解,請執行下列動作:
- 確保安全群組和網路存取控制清單 (網路 ACL) 規則允許您任務所需的傳入和傳出流量。
- 檢查您是否正確設定了虛擬私有雲端 (VPC) 的網際網路閘道或 NAT 閘道。
- 檢查您的閘道路由表。
- 檢查具有硬編碼 IP 位址或主機名稱的環境變數的任務定義。確保現有的 IP 位址或主機名稱正確,且您可以存取它們。
若要從容器執行個體測試網路連線,請完成下列步驟:
- 使用 SSH 連線到 EC2 執行個體。
- 若要在容器上遠端執行命令,請執行以下 execute-command 命令:
aws ecs execute-command --cluster cluster-name --task task-id --container container-name --command "/bin/bash" --interactive
注意: 將 cluster-name 替換為您的叢集名稱,將 task-id 替換為您的任務 ID,將 container-name 替換為您的容器執行個體名稱。
- 若要測試連線,請執行以下其中一個命令:
curl -v http://example.com
- 或 -
nslookup example.com
- 或 -
nc -zv example.com 80
注意: 將 example.com 替換為您的網域。
- 檢查 DNS 解析和路由以識別網路問題。
為了簡化連線,請在 Fargate 而不是 Amazon EC2 上執行任務。使用 Fargate,您無需管理底層基礎架構。或者,使用 VPC 端點連線至無需網際網路閘道、NAT 裝置、VPN 連線或 AWS Direct Connect 連線的服務。