Skip to content

如何對 Amazon ECS 中排程任務相關的問題進行疑難排解?

3 分的閱讀內容
0

我排程了 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 指標,請完成以下步驟:

  1. 開啟 CloudWatch 主控台
  2. 在導覽窗格中,選擇 Metrics (指標),然後選擇 All metrics (所有指標)。
  3. 選擇 Events (事件)。
  4. 選擇 By Rule Name (依規則名稱)。
  5. 為執行 Amazon ECS 任務的 EventBridge 規則選擇 TriggerRulesInvocationsFailedInvocations
  6. 選擇 Graphed metrics (圖表化指標) 索引標籤。
  7. Statistic (統計資料) 中,為每個指標選擇 SUM

若要檢查 EventBridge Scheduler 的效能,請查看 InvocationAttemptCount、TargetErrorCount 和 InvocationDroppedCount CloudWatch 指標

如果您看到 FailedInvocationsInvocationDroppedCount 資料,請確認 EventBridge AWS Identity and Access Management (IAM) 角色是否有權限呼叫您的任務。

如果您看到 TargetErrorCount 資料,則表示目標調用有問題。請檢查您的任務是否已啟動、已啟動但立即失敗或未完成。

檢查 RunTask 動作是否失敗

請完成下列步驟:

  1. 開啟 AWS CloudTrail 主控台
  2. 在導覽窗格中,選擇 Event history (事件歷史記錄)。
  3. Lookup attributes (尋找屬性) 中,選取 Event name (事件名稱)。
  4. Enter an event name (輸入事件名稱) 中,輸入「run task」(執行任務)。
  5. 在時間範圍篩選器中,選取您預計已排程 Amazon ECS 任務執行的時間。
  6. 在資料表中,選取要查看的事件。
  7. 在 JSON 事件記錄中,檢查 errorMessageresponseElements.failures.reason 以確認 API 未調用排程任務。
    注意: 您可以在 responseElements.tasks.taskARN 欄位中找到失敗任務的任務 ID。
  8. 對 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 位址或主機名稱正確,且您可以存取它們。

若要從容器執行個體測試網路連線,請完成下列步驟:

  1. 使用 SSH 連線到 EC2 執行個體
  2. 若要在容器上遠端執行命令,請執行以下 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 替換為您的容器執行個體名稱。
  3. 若要測試連線,請執行以下其中一個命令:
    curl -v http://example.com
    - 或 -
    nslookup example.com
    - 或 -
    nc -zv example.com 80
    注意:example.com 替換為您的網域。
  4. 檢查 DNS 解析和路由以識別網路問題。

為了簡化連線,請在 Fargate 而不是 Amazon EC2 上執行任務。使用 Fargate,您無需管理底層基礎架構。或者,使用 VPC 端點連線至無需網際網路閘道、NAT 裝置、VPN 連線或 AWS Direct Connect 連線的服務。

AWS 官方已更新 6 個月前