Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何對失敗的 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 進行疑難排解。
相關資訊
相關內容
- 已提問 2 年前
- 已提問 2 年前
