跳至內容

如何對 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 規則選擇 TriggerRules、Invocations 和 FailedInvocations。
  6. 選擇 Graphed metrics (圖表化指標) 索引標籤。
  7. 在 Statistic (統計資料) 中,為每個指標選擇 SUM。

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

如果您看到 FailedInvocations 或 InvocationDroppedCount 資料,請確認 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 事件記錄中,檢查 errorMessage 或 responseElements.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 官方已更新 2 年前