如何解决删除 Amazon ECS 中的容量提供商时出现的错误?

2 分钟阅读
0

当我尝试删除我的 Amazon Elastic Container Service (Amazon ECS) 集群的容量提供商时,出现错误。

简短描述

如果您已使用 AWS 命令行界面 (AWS CLI) delete-capacity-provider 命令或 DeleteCapacityProvider API,则可能会收到以下错误之一:

“updateStatus”: “DELETE_FAILED”

-或-

“updateStatusReason”: “无法删除容量提供商,因为它与集群相关联: 集群名称。从集群中移除容量提供商,然后重试。”

如果您已使用 AWS 管理控制台删除容量提供商,则可能会收到以下错误:

“删除容量提供商容量提供商名称时出错。指定的容量提供商正在使用中,无法删除”

您无法删除与集群关联的容量提供商。要解决删除问题,必须从集群中移除容量提供商或删除集群。然后,删除容量提供商。

**注意:**如果您删除 Amazon EC2 Auto Scaling 组,则相关的容量提供商将进入 INACTIVE(非活动)状态。在 INACTIVE(非活动)状态下使用容量提供商并非最佳做法,因为它们可能随时被自动删除。

解决方法

**注意:**如果您在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。要进行格式化,请通过 jq 网站上的 Download 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。更新服务时,使用 Force new deployment(强制实施新部署)在提供商之间转换使用 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. 选择更新集群
  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 替换为您的集群名称,将 UpdatedCapacityProvider 替换为新的容量提供商,将 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。

在命令的输出中,验证容量提供商的状态是否为 INACTIVE

AWS 官方
AWS 官方已更新 2 个月前