如何解決 Amazon ECS 中刪除容量提供者時出現的錯誤?

2 分的閱讀內容
0

當我嘗試刪除 Amazon Elastic Container Service (Amazon ECS) 叢集的容量提供者時收到錯誤訊息。

簡短說明

如果您使用了 AWS Command Line Interface (AWS CLI) delete-capacity-provider 命令或 DeleteCapacityProvider API,則可能會收到下列其中一個錯誤:

「updateStatus」: 「DELETE_FAILED」

- 或 -

「updateStatusReason」: 「無法刪除容量提供者,因為它與叢集相關聯: 叢集名稱。從叢集移除容量提供者,然後再試一次。」

如果您使用 AWS 管理主控台刪除容量提供者,則可能會收到下列錯誤:

「刪除容量提供者容量提供者名稱時發生錯誤。指定的容量提供者正在使用中,無法移除」

您無法刪除與叢集關聯的容量提供者。若要解決刪除問題,您必須從叢集中刪除容量提供者或刪除叢集。然後,刪除容量提供者。

注意: 如果您刪除 Amazon EC2 Auto Scaling 群組,則相關容量提供者將進入非作用中狀態。使用處於非作用中狀態的容量提供者並不是最佳做法,因為它們可能隨時會自動移除。

解決方法

注意: 如果您在執行 AWS CLI 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。若要進行格式化,請從 jq 網站上的 下載 jq 安裝 jq。

確定與叢集關聯的容量提供者

若要確定與 Amazon ECS 叢集關聯的所有容量提供者,請使用 Amazon ECS 主控台或 AWS CLI。

Amazon ECS 主控台

請完成下列步驟:

  1. 開啟 Amazon ECS 主控台
  2. 在導覽窗格中,選取 Clusters(叢集)。
  3. 選取您的叢集。
  4. 選擇 Infrastructure (基礎架構) 標籤。
  5. 選擇 Capacity providers (容量提供者)。

AWS CLI

執行下列 describe-clusters 命令:

aws ecs describe-clusters --cluster your-cluster-name | jq '.clusters[].capacityProviders'

注意:your-cluster-name 替換為您的叢集名稱。

確定 Amazon ECS 未使用容量提供者策略中的容量提供者

若要查看使用容量提供者的服務,請執行以下指令碼:

#!/bin/bash
cluster=ClusterName
capacityprovider=CapacityProviderName
services=$(aws ecs list-services --cluster ${cluster} | jq --raw-output '.serviceArns[]')
aws ecs describe-services \
    --cluster ${cluster} \
    --services ${services} \
    | jq -r --arg capacityprovider "${capacityprovider}" \
    '.services[] | select(.capacityProviderStrategy[]?.capacityProvider == $capacityprovider) | .serviceName'

注意:ClusterName 替換為您的叢集名稱,將 CapacityProviderName 替換為您的容量提供者名稱。如果指令碼傳回空白輸出,則叢集中沒有任何服務正在使用容量提供者。在這種情況下,請繼續檢查叢集的預設容量提供者策略裡是否設定容量提供者一節。

您必須先更新 Amazon ECS 以使用新的容量提供者,然後才能刪除正在使用的現有容量提供者。使用 Amazon ECS 主控台或 AWS CLI。更新服務時,使用強制執行新部署,以在提供者之間轉換使用 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體容量的任務。

若要使用 AWS CLI 更新容量提供者,請完成下列步驟:

  1. 執行以下 describe-services 命令以查看該服務的現有容量提供者策略:

    aws ecs describe-services --cluster my-cluster --services my-service

    注意:my-cluster 替換為您的叢集名稱,將 my-service 替換為您的服務名稱。

  2. 建立一個新的容量提供者策略,並排除您要刪除的容量提供者。確定剩餘容量提供者的總權重為 100。

  3. 執行以下 update-service 命令來更新服務:

    aws ecs update-service \
      --cluster your-cluster-name \
      --service your-service-name \
      --capacity-provider-strategy capacityProvider=remaining-provider,weight=100 \
      --force-new-deployment

    注意:your-cluster-name 替換為您的叢集名稱,將 your-service-name 替換為您的服務名稱。另外,將 remaining-provider 替換為新容量提供者的名稱。

檢查叢集預設策略中是否設定了容量提供者

若要尋找叢集的預設容量提供者策略,請執行以下 describe-clusters 命令:

aws ecs describe-clusters --cluster mycluster | jq '.clusters[].defaultCapacityProviderStrategy'

如果要刪除的容量提供者在命令的輸出中,則必須修改預設容量提供者策略。您可以使用 Amazon ECS 主控台或 AWS CLI。

Amazon ECS 主控台

請完成下列步驟:

  1. 開啟 Amazon ECS 主控台
  2. 在導覽窗格中,選取 Clusters(叢集)。
  3. 選取您的叢集。
  4. 選擇 Update cluster (更新叢集)。
  5. Cluster configuration (叢集組態) 下,在 Default capacity provider strategy (預設容量提供者策略) 中,選擇 Remove (移除) 容量提供者。
  6. 選擇 Update (更新)。

AWS CLI

執行以下 put-cluster-capacity-providers 命令:

aws ecs put-cluster-capacity-providers --cluster ClusterName --capacity-providers [] --default-capacity-provider-strategy []

注意:ClusterName 替換為您的叢集名稱。

在刪除先前的容量提供者之前,請將其替換為新的容量提供者。若要取代容量提供者,請執行以下 put-cluster-capacity-provider 命令:

aws ecs put-cluster-capacity-providers --cluster ClusterName --capacity-providers UpdatedCapacityProvider --default-capacity-provider-strategy capacityProvider=UpdatedCapacityProvider --region RegionName

注意:ClusterName 替換為您的叢集名稱,將 UpdateCapacityProvider 替換為新的容量提供者,並將 RegionName 替換為您的 AWS 區域。

執行 put-cluster-capacity-providers 命令時,您必須包含想要保留在叢集中的所有容量提供者。如果您不包含容量提供者,則 Amazon ECS 會將容量提供者與叢集分開。

刪除容量提供者

若要刪除容量提供者,請執行以下 delete-capacity-provider 命令:

aws ecs delete-capacity-provider --capacity-provider PreviousCapacityProvider

注意:PreviousCapacityProvider 替換為您要刪除之容量提供者的 ARN。

若要確認容量提供者是否已刪除,請執行下列 describe-capacity-providers 命令:

aws ecs describe-capacity-providers --capacity-provider PreviousCapacityProvider

注意:PreviousCapacityProvider 替換為您已刪除之容量提供者的 ARN。

在命令的輸出中,確認容量提供者的狀態是否為非作用中

AWS 官方
AWS 官方已更新 4 個月前