跳至內容

如何對失敗的 Amazon ECS 部署進行疑難排解?

2 分的閱讀內容
0

我想對 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 任務進行疑難排解,請完成以下步驟:

  1. 開啟 Amazon ECS console (Amazon ECS 主控台)。
  2. 在導覽窗格中,選取 Clusters (叢集)。
  3. 選取您的叢集。
  4. 選擇 Tasks (任務) 索引標籤。
  5. 選取失敗任務的任務 ID
  6. 檢查停止狀態以確定容器失敗的原因。
    **注意:**停止任務的日誌僅在 ECS 任務停止後一小時內可用。
  7. 對容器失敗進行疑難排解

運作狀態檢查組態

檢查 Application Load Balancer 或 Network Load Balancer 中的下列運作狀態檢查設定:

  • 確認 HealthCheckTimeoutSeconds 設定的時間夠長,使您的容器成功通過檢查。如果 ECS 任務在短時間內未能通過負載平衡器運作狀態檢查,請修改此值。
  • 確認 HealthCheckGracePeriodSeconds 設定的時間夠長,使您的容器能夠啟動。
  • 檢查應用程式容器在負載平衡器中設定的 HealthCheckPath 是否使用狀態代碼 200 回應。如需詳細資訊,請參閱 Application Load Balancer 目標群組運作狀態檢查中的 HealthCheckPath 設定。

若要尋找失敗的運作狀態檢查,請完成下列步驟:

  1. 開啟 Amazon EC2 console (Amazon EC2 主控台)。
  2. 在導航窗格中,展開 Load Balancing (負載平衡),然後選擇 Target Groups (目標群組)。
  3. 選取您的目標群組名稱
  4. 查看目標群組的詳細資訊,以了解運作狀態良好或運作狀態不佳的執行個體。

若要對運作狀態不佳的執行個體進行疑難排解,請參閱對 Application Load Balancer 進行疑難排解

相關資訊

AWS::ECS::Service

AWS 官方已更新 10 個月前