Como resolvo o erro DELETE_FAILED ao excluir o provedor de capacidade no Amazon ECS?

5 minuto de leitura
0

Recebo um erro quando uso a AWS Command Line Interface (AWS CLI) ou uma API para excluir um provedor de capacidade para meu cluster do Amazon Elastic Container Service (Amazon ECS).

Breve descrição

Se você tentar excluir um provedor de capacidade do seu cluster usando a AWS CLI ou uma API, poderá receber um dos seguintes erros:

  • "updateStatus": "DELETE_FAILED"
  • "updateStatusReason": "O provedor de capacidade não pode ser excluído porque está associado ao cluster: your-cluster-name. Remova o provedor de capacidade do cluster e tente novamente."

Você pode receber esses erros pelos seguintes motivos:

  • O provedor de capacidade que está tentando excluir está sendo usado por um serviço do Amazon ECS na estratégia do provedor de capacidade. O Console de Gerenciamento da AWS não permite excluir um provedor de capacidade que está sendo usado por um serviço do Amazon ECS. Nesse cenário, você recebe esta mensagem de erro: "O provedor de capacidade especificado está em uso e não pode ser removido" no console. Você somente pode desassociar um provedor de capacidade existente de um cluster se ele não está em uso por nenhuma tarefa existente. Se executar o comando DeleteCapacityProvider da AWS CLI, o provedor de capacidade passará para o status DELETE_FAILED. Para resolver esse problema, conclua as etapas na seção Verificar se seu provedor de capacidade está sendo usado por um serviço do Amazon ECS na estratégia do provedor de capacidade.
  • Seu provedor de capacidade é usado pela estratégia padrão. Se você não escolher uma estratégia de provedor de capacidade ou um tipo de inicialização ao executar uma tarefa ou criar um serviço, uma estratégia de provedor de capacidade será associada ao seu cluster por padrão. No entanto, a associação ocorre somente se o provedor de capacidade está definido como a estratégia padrão do provedor de capacidade para o cluster. Você pode excluir somente os provedores de capacidade que não estão associados a um cluster. Para resolver esse problema, conclua as etapas na seção Verificar se seu provedor de capacidade está definido na estratégia padrão do provedor de capacidade para o cluster.

Observação: Se você receber erros ao executar comandos da AWS CLI, verifique se está utilizando a versão mais recente da AWS CLI.

Resolução

Verifique se o seu provedor de capacidade está sendo usado por um serviço do Amazon ECS na estratégia do provedor de capacidade

1.    Se você tiver vários serviços em um cluster, use o script a seguir para verificar os serviços que estão usando o provedor de capacidade.

Antes de executar o script, faça o seguinte:

Defina os parâmetros do cluster e do provedor de capacidade de acordo com seus valores. Defina suas credenciais da AWS CLI para sua região da AWS. Instale jq do site do jq.

#! /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'

Observação: Se o script retornar uma saída em branco, nenhum dos serviços no cluster está usando o provedor de capacidade. Vá direto para a seção Verificar se seu provedor de capacidade está definido na estratégia padrão do provedor de capacidade para o cluster.

2.    Atualize os serviços retornados na saída do script com um novo provedor de capacidade.

3.    Exclua o antigo provedor de capacidade.

Importante: Você não pode atualizar um serviço usando uma estratégia de provedor de capacidade ou um tipo de inicialização. Você deve atualizar o serviço com outro provedor de capacidade.

Verifique se seu provedor de capacidade está definido na estratégia padrão de provedor de capacidade para o cluster

1.    Para encontrar o provedor de capacidade padrão para seu cluster, execute o seguinte comando:

$ aws ecs describe-clusters --cluster mycluster | jq '.clusters[].defaultCapacityProviderStrategy'
[
  {
    "capacityProvider": "oldCP",
    "weight": 0,
    "base": 0
  }
]

2.    Para excluir o provedor de capacidade, você deve modificar a estratégia padrão do provedor de capacidade para seu cluster usando o console do Amazon ECS ou a AWS CLI.

Usando o console do Amazon ECS:

1.    Abra o console do Amazon ECS.

2.    No painel de navegação, escolha Clusters e, em seguida, escolha seu cluster.

3.    Escolha Atualizar cluster.

Usando a AWS CLI:

$ aws ecs put-cluster-capacity-providers \
     --cluster mycluster \
     --capacity-providers newCP \
     --default-capacity-provider-strategy capacityProvider=newCP \
     --region us-east-1

$ aws ecs delete-capacity-provider --capacity-provider oldCP

$ aws ecs describe-capacity-providers --capacity-provider oldCP

Observação: No exemplo de código anterior, substitua mycluster pelo seu cluster. Substitua newCP pelo novo provedor de capacidade que deseja adicionar. Substitua oldCP pelo provedor de capacidade que deseja excluir.

4.    Exclua o antigo provedor de capacidade.

Todos os provedores de capacidade existentes associados a um cluster que são omitidos da chamada da API PutClusterCapacityProviders são desassociados do cluster. As mesmas regras se aplicam à estratégia padrão do provedor de capacidade do cluster.


AWS OFICIAL
AWS OFICIALAtualizada há 2 anos