如何對失敗的 Amazon ECS 部署進行疑難排解?
我想對 Amazon Elastic Container Service (Amazon ECS) 部署失敗的原因進行疑難排解。
簡短描述
當您嘗試部署新的應用程式時,Amazon ECS 可能會遇到部署僵局。舊的任務繼續部署,但的新任務無法達到穩定狀態。您的 Amazon ECS 部署可能會因以下問題而失敗:
- 資源限制
- 容器映像檔問題
- 網路問題
- 任務定義問題
- Amazon CloudWatch Logs
- 運作狀態檢查組態
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
資源限制
當您部署任務的地方沒有足夠的 CPU 或記憶體容量時,您的 Amazon ECS 服務部署可能會失敗。當您的服務事件中出現 RESOURCE:* 錯誤且 Amazon ECS 任務未轉換為執行中狀態時,就會發生資源限制問題。
若要解決此問題,請執行下列動作:
- 使用 Amazon CloudWatch 指標來監控您的 Amazon ECS 叢集資源容量。
- 設定 Container Insights,以取得詳細的任務和容器級資源使用情況指標。
- 確保您的 Auto Scaling 群組設定符合 Amazon Elastic Compute Cloud (Amazon EC2) 啟動類型叢集的工作負載需求。監控執行個體容量並根據 CPU 使用情況、記憶體使用情況或自訂指標設定擴展政策。
- 請檢查您的 Amazon ECS 任務在使用 awsvpc 網路模式時的彈性網路介面容量。如果是密集部署,請使用具有較高彈性網路介面限制的執行個體類型。每個任務都需要自己的彈性網路介面。使用 CIDR 規劃並監控彈性網路介面,以確保啟動 Amazon ECS 任務時有足夠的 IP 位址可用。
若要檢查容器執行個體上的可用資源,請執行 list-container-instances AWS CLI 命令:
aws ecs list-container-instances --cluster your-cluster-name
**注意:**將 your-cluster-name 替換為您叢集的名稱。
然後,執行 describe-container-instances 命令:
aws ecs describe-container-instances --cluster your-cluster-name --container-instances container-instance-id
**注意:**將 your-cluster-name 替換為您的叢集名稱,將 container-instance-id 替換為您容器的執行個體 ID。
容器映像檔問題
當 Amazon ECS 無法從資源儲存庫中擷取影像時,任務將會失敗,並在服務事件中顯示 CannotPullContainerError 錯誤。您可能會在容器執行個體的代理程式日誌中看到相關任務。
若要解決此錯誤,請確認 Amazon ECS 任務的下列任務定義組態,以及服務的網路組態:
-
設定容器映像檔 URI。
如果是 Amazon Elastic Container Registry (Amazon ECR),請確認映像檔是否符合下列檔案命名格式:account-id.dkr.ecr.region.amazonaws.com/repository-name:tag**注意:**將 account-id 替換為您的帳戶 ID,將 region 替換為您的 AWS 區域,將 repository-name 替換為您儲存庫的名稱。
如果是 Docker Hub,請確認映像檔是否符合下列檔案命名格式:
repository/image:tag**注意:**將 repository 替換為您儲存庫的名稱。
-
確認 Amazon ECS 任務執行 IAM 角色是否附加了 AmazonECSTaskExecutionRolePolicy 權限。
-
確認任務定義中沒有缺少或具有不正確的環境預留位置。
-
在私有子網路中部署 Amazon ECS 服務時,請將相同的子網路和安全群組中的 VPC 端點建立關聯。
如果是介面端點:
如果是 Amazon ECS,請使用 com.amazonaws.region.ecs。
如果是 CloudWatch Logs,請使用 com.amazonaws.us-east-1.logs。
如果是 Amazon ECR (Docker),請使用 com.amazonaws.us-east-1.ecr.dkr。
如果是 Amazon ECR API,請使用 com.amazonaws.us-east-1.ecr.api。
如果是閘道端點:
如果是 Amazon S3,請使用 com.amazonaws.us-east-1.s3。
網路問題
當容器無法與外部服務通訊、服務探索失敗或任務無法到達所需的端點時,就會發生網路問題。您可能會在應用程式日誌中收到逾時錯誤、DNS 解析失敗,或容器與其他 AWS 服務之間出現連線問題。若要解決此錯誤,請執行下列操作。
- 請確認 Amazon ECS 服務的傳入規則是否允許流量進入您的容器。
- 確認服務之間的安全群組規則已正確設定。
- 確認公有子網路具有透過網際網路閘道到網際網路的路由。
- 驗證私有子網路的 NAT 閘道組態。
- 檢查 CIDR 範圍在子網路中是否具有足夠的可用 IP 位址。
- 對於已設定的 Application Load Balancer,請確定 Application Load Balancer 安全群組允許安全群組中的傳入規則。
CloudWatch Logs
若要查看 CloudWatch Logs 以對失敗的 Amazon ECS 任務進行疑難排解,請完成以下步驟:
- 開啟 Amazon ECS console (Amazon ECS 主控台)。
- 在導覽窗格中,選取 Clusters (叢集)。
- 選取您的叢集。
- 選擇 Tasks (任務) 索引標籤。
- 選取失敗任務的任務 ID。
- 檢查停止狀態以確定容器失敗的原因。
**注意:**停止任務的日誌僅在 ECS 任務停止後一小時內可用。 - 對容器失敗進行疑難排解。
運作狀態檢查組態
檢查 Application Load Balancer 或 Network Load Balancer 中的下列運作狀態檢查設定:
- 確認 HealthCheckTimeoutSeconds 設定的時間夠長,使您的容器成功通過檢查。如果 ECS 任務在短時間內未能通過負載平衡器運作狀態檢查,請修改此值。
- 確認 HealthCheckGracePeriodSeconds 設定的時間夠長,使您的容器能夠啟動。
- 檢查應用程式容器在負載平衡器中設定的 HealthCheckPath 是否使用狀態代碼 200 回應。如需詳細資訊,請參閱 Application Load Balancer 目標群組運作狀態檢查中的 HealthCheckPath 設定。
若要尋找失敗的運作狀態檢查,請完成下列步驟:
- 開啟 Amazon EC2 console (Amazon EC2 主控台)。
- 在導航窗格中,展開 Load Balancing (負載平衡),然後選擇 Target Groups (目標群組)。
- 選取您的目標群組名稱。
- 查看目標群組的詳細資訊,以了解運作狀態良好或運作狀態不佳的執行個體。
若要對運作狀態不佳的執行個體進行疑難排解,請參閱對 Application Load Balancer 進行疑難排解。
相關資訊
相關內容
- 已提問 3 年前
- 已提問 10 天前
