如何對 Fargate 上 Amazon ECS 任務的運作狀態檢查失敗進行疑難排解?
我在 AWS Fargate 上的 Amazon Elastic Container Service (Amazon ECS) 任務運作狀態檢查失敗。
簡短說明
Fargate 上 Amazon ECS 任務的運作狀態檢查失敗可能由以下原因引起:
- 容器運作狀態檢查錯誤
- 目標位於負載平衡器已停用的可用區域
- CPU 或記憶體的資源限制
- 運作狀態檢查設定錯誤
- 網路連線問題
當任務的負載平衡器運作狀態檢查失敗時,您會在 Amazon ECS 服務事件訊息中收到下列其中一個錯誤:
- 「(服務 AWS-service) (連接埠 8080) 在 (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) 中的運作狀態不良,(原因在於這些程式碼的運作狀態檢查失敗:[5xx]/[4xx]/[3xx]) 或 (請求逾時)。」
- 「(服務 AWS-Service) (任務 eaa3ec9e9f104070b461490987654321) 容器運作狀態檢查失敗。」
- 「(服務 AWS-Service) (執行個體 10.122.144.145) (連接埠 8080) 在 (target-group arn:aws:elasticloadbalancing:ap-south-1:120987654321:targetgroup/AWS-Service-TG/159c835dc9d8cf84) 的運作狀態不良,(原因在於目標位於未啟用負載平衡器的可用區域)。」
在 Amazon ECS 任務主控台上,您也可能收到錯誤「任務在 (target-group arn:aws:elasticloadbalancing:ap-south-1:111111111111:targetgroup/aws-targetgroup/123456789) 中 ELB 運作狀態檢查失敗」。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱 AWS CLI 錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
對 HTTP [5xx]/[4xx]/[3xx] 或 (請求逾時) 錯誤進行疑難排解
檢查負載平衡器的運作狀態檢查組態
當 Elastic Load Balancing (ELB) 負載平衡器應該收到 200 HTTP 代碼,但實際收到 3xx、4xx 或 5xx 錯誤代碼時,您就會收到這些錯誤。因此,負載平衡器會停止該任務,並將其標記為運作狀態不良。若要解決此問題,請設定正確的運作狀態檢查路徑,或修改運作狀態檢查設定。
有關 Application Load Balancer 中 HTTP 錯誤的資訊,請參閱負載平衡器產生 HTTP 錯誤。
如果 Amazon ECS 任務在逾時期限內未回應負載平衡器運作狀態檢查,您將收到 Request timed out (請求逾時) 錯誤。
確認負載平衡器是否可以執行運作狀態檢查
確認以下組態:
- 與負載平衡器關聯的安全群組允許將流量輸出至已註冊容器連接埠上的 Amazon ECS 任務彈性網路介面。
- Amazon ECS 安全群組允許已註冊容器連接埠上,來自與負載平衡器關聯的安全群組的所有輸入流量。
設定逾時參數
如果您的 Amazon ECS 任務對運作狀態檢查的回應較慢,則最佳做法是增加 HealthCheckGracePeriod 參數的值。
如果您的應用程式通常需要較長時間才能回應運作狀態檢查,則您也可以增加目標群組的運作狀態檢查逾時值。此參數定義 Amazon ECS 任務必須在多長時間內回應運作狀態檢查。
檢查您的資源使用情況
如果您的應用程式需要與資料庫進行後端連線,請檢查資料庫層級的高資源使用情況。高資源使用情況可能會在應用程式初始化過程中引發問題,並在負載平衡器運作狀態檢查過程中導致錯誤。
針對回應較慢進行疑難排解
使用 ECS Exec 檢查應用程式在運作狀態檢查路徑和連接埠上的回應情況。為了確認後端是否能夠在沒有延遲的情況下成功回應,請執行以下命令:
curl -iv localhost:container-port/path
**注意:**將 container-port 取代為容器使用的連接埠,並將 path 取代為運作狀態檢查路徑。
檢查您的運作狀態檢查組態
首先,請確認該檔案位於您在目標群組運作狀態檢查中設定的路徑中。
如果您的檔案位於正確的位置,但運作狀態檢查仍然失敗,請完成以下步驟:
- 開啟 Amazon Elastic Compute Cloud (Amazon EC2) 主控台。
- 在導覽窗格的 Load balancing (負載平衡) 下,選擇 Target groups (目標群組)。
- 選取目標群組。
- 選擇 Health checks (運作狀態檢查) 標籤,然後選擇 Edit (編輯)。
- 在 Edit target group (編輯目標群組) 頁面上,在 Success code (成功代碼) 中輸入來自錯誤訊息的 HTTP 代碼。例如,輸入 404。
- 選擇 Save (儲存)。
重要: 確認目標群組協定設定為您應用程式支援的 HTTP 協定。
檢查 Amazon ECS 中的資源限制
檢查 Amazon ECS 服務指標,以了解 CPU 和記憶體使用情況。如果 CpuUtilization 或 MemoryUtilization 持續處於高位,則您可能會遇到效能問題,這些問題可能導致運作狀態檢查失敗。
若要減少資源使用量,請執行下列動作:
- 在任務定義中分配更多的 CPU 和記憶體資源。
- 若要水平擴展您的組態,請增加執行任務的數量,以便將工作負載均勻分配到多個執行個體,並在突發流量增長期間提供更好的效能。
- 定期評估系統在各種負載條件下的效能,以識別潛在的瓶頸並更好地分配資源。
- 監控您應用程式的網路使用情況、連線模式和回應時間,以識別潛在的瓶頸並最佳化低效率的網路使用模式。
最佳做法是經常監控系統的行為,並根據需要調整組態。
對容器運作狀態檢查失敗錯誤進行疑難排解
如果任務中的 ECS 容器執行個體使用服務無法通過的運作狀態檢查,則您會收到 failed container health checks (容器運作狀態檢查失敗) 錯誤。若要對此問題進行疑難排解,請參閱如何對 Amazon ECS 任務的容器運作狀態檢查失敗進行疑難排解?
對目標 Amazon ECS 任務的可用區域問題進行疑難排解
如果您在未啟用的可用區域中註冊目標,則註冊的目標將無法接收流量。如需詳細資訊,請參閱可用區域和負載平衡器節點。
例如,您的 Amazon ECS 子網路屬於 us-east-1x 和 us-east-1y 可用區域。如果負載平衡器啟用了** us-east-1p** 和 us-east-1q 可用區域,則您將收到錯誤訊息。
若要更新 Amazon ECS 以使用負載平衡器可用區域的子網路,請執行 update-service AWS CLI 命令:
aws ecs update-service --cluster cluster-name --service service-name --region region-code --network-configuration '{"awsvpcConfiguration": {"subnets": ["subnet-1","subnet-2"],"securityGroups": ["sg-abcdxyz"]}}'
注意: 將 cluster-name 取代為您的叢集名稱,將 service-name 取代為您的服務名稱,並將 region-code 取代為您的 AWS 區域。此外,將 subnet-1 和 subnet-2 取代為您的子網路,並將 sg-abcdxyz 取代為您的安全群組。
相關資訊
相關內容
- 已提問 3 個月前lg...
- 已提問 1 年前lg...
- 已提問 5 個月前lg...
- AWS 官方已更新 4 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 4 年前