Quero usar restrições de posicionamento de tarefas para executar tarefas no Amazon Elastic Container Service (Amazon ECS). No entanto, as tarefas ficam presas em um status PENDENTE e não conseguem ser iniciadas.
Breve descrição
Se você configurar restrições de posicionamento de tarefas em sua definição de tarefa, tarefa ou serviço, precisará ter uma instância de contêiner que corresponda a seus atributos. Caso contrário, as tarefas ficam presas no status PENDENTE ou não conseguem ser iniciadas, e você recebe um dos seguintes erros:
- o serviço (nome do serviço) não conseguiu colocar uma tarefa porque nenhuma instância de contêiner atendeu a todos os seus requisitos. A instância de contêiner correspondente mais próxima ( a1b2c3d4-5678-90ab-cdef-11111EXEMPLO ) não tem um atributo obrigatório.
- Falha ao iniciar a tarefa: Restrição de posicionamento ABCDXYZ não satisfeita.
- Falha ao iniciar a tarefa: ATRIBUTO
Resolução
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Para resolver problemas de restrição de posicionamento de tarefas, primeiro verifique os atributos que você especificou na restrição de posicionamento de tarefas. Em seguida, certifique-se de que as instâncias do contêiner tenham os atributos necessários.
Verifique as restrições de posicionamento da tarefa especificadas somente na definição da tarefa
Se você usar restrições de posicionamento de tarefas somente na definição da tarefa, execute o comando a seguir para verificar se faltam atributos nas instâncias do contêiner:
ecs-cli check-attributes --task-def example-task-def --cluster example-cluster --region region-code --container-instances example-container-instance-id
Observação: Substitua example-task-def pela definição da tarefa, example-cluster pelo nome do cluster, region-code pela região da AWS e example-container-instance-id pelo ID da instância de contêiner.
Para obter mais informações, consulte Verificar atributos ausentes e depurar erros de atributos do motivo no site do GitHub.
Verifique as restrições de posicionamento de tarefas especificadas na definição, serviço ou tarefa da tarefa
Para verificar as restrições de posicionamento na definição da tarefa, conclua as seguintes etapas:
- Abra o console do Amazon ECS.
- No painel de navegação, escolha Definições de tarefa.
- Escolha a definição da tarefa e, em seguida, selecione a revisão da definição da tarefa.
- Escolha Posicionamento da tarefa.
Para verificar as restrições de posicionamento especificadas para o serviço, conclua as seguintes etapas:
- Abra o console do Amazon ECS.
- No painel de navegação, escolha Clusters.
- Na página Clusters, escolha seu cluster.
- Em Serviços, escolha seu serviço.
- Selecione Configuração e redes e, em seguida, escolha Estratégia e restrições de posicionamento da tarefa.
Para verificar a restrição de posicionamento especificada em uma tarefa específica, execute o seguinte comando describe-tasks da AWS CLI:
aws ecs describe-tasks --cluster example-cluster --region region-code
--tasks task-id
Observação: Substitua example-cluster pelo nome do cluster, region-code pela região e task-id pelo ID da tarefa. Na saída do comando, verifique o valor placementConstraints.
Certifique-se de que suas instâncias de contêiner tenham os atributos necessários
Use o console do Amazon ECS ou a AWS CLI para verificar os atributos da sua instância de contêiner.
Console do Amazon ECS
Conclua as seguintes etapas:
- Abra o console do Amazon ECS.
- No painel de navegação, escolha Clusters.
- Na página Clusters, escolha seu cluster.
- Escolha a guia Infraestrutura.
- Em Instâncias de contêiner, selecione sua instância de contêiner.
- Escolha Ações e, em seguida, selecione Visualizar/editar atributos.
- Certifique-se de que a instância de contêiner tenha os atributos necessários especificados na restrição de posicionamento.
AWS CLI
Execute o seguinte comando describe-container-instances:
aws ecs describe-container-instances --cluster example-cluster --region region-code
--container-instances example-container-instance-id
Observação: Substitua example-cluster pelo nome do cluster, region-code pela região e example-container-instance-id pelo ID da instância de contêiner.
Para visualizar todas as instâncias de contêiner com um atributo específico, execute o comando list-container-instances:
aws ecs list-container-instances --cluster example-cluster --region region-code --filter "attribute:ecs.instance-type == t2.micro"
Observação: Substitua example-cluster pelo nome do cluster, region-code pela região e attribute:ecs.instance-type == t2.micro pelo seu atributo. O comando anterior lista todas as instâncias de contêiner no cluster que têm um tipo de instância t2.micro.
Para usar a AWS CLI para adicionar ou atualizar um atributo para uma instância de contêiner, execute o seguinte comando put-attributes:
aws ecs put-attributes \
--cluster example-cluster \
--region region-code \
--attributes name=stack,value=production,targetId=example-container-instance-id
Observação: Substitua example-cluster pelo nome do cluster, region-code pela região e example-container-instance-id pelo ID da instância de contêiner. Adicione seus atributos à opção --attributes. O comando de exemplo anterior adiciona o nome da pilha e o valor da produção à instância de contêiner.
(Opcional) Atualizar a restrição de posicionamento da tarefa
Se as restrições de posicionamento da tarefa estiverem incorretas ou muito restritivas, atualize-as na definição da tarefa ou serviço. Ou execute o seguinte register-task-definition para criar uma nova revisão da definição de tarefa:
aws ecs register-task-definition \
--cli-input-json file://jsonfilepath/filename.json
Observação: Substitua jsonfilepath.filename.json pelo arquivo JSON de definição de tarefa.
Para atualizar as restrições de posicionamento em uma tarefa independente, execute o seguinte comando run-task:
aws ecs run-task \
--cluster clustername \
--placement-constraints exampleconstraints
Observação: Substitua clustername pelo nome do seu cluster e exampleconstraints pelas suas restrições de posicionamento.