Atualizar manualmente o agente de contêiner do Amazon ECS (para AMIs não otimizadas para Amazon ECS)
Ocasionalmente, pode ser necessário atualizar o agente de contêiner do Amazon ECS para obter correções de erros e novos recursos. A atualização do agente de contêiner do Amazon ECS não interrompe a execução das tarefas ou dos serviços na instância de contêiner.
nota
As atualizações de agente não se aplicam a instâncias de contêiner do Windows. É recomendável executar novas instâncias de contêiner para atualizar a versão do agente nos clusters do Windows.
-
Faça login em sua instância de contêiner via SSH.
-
Verifique se o seu agente usa a variável de ambiente
ECS_DATADIR
para salvar seu estado.ubuntu:~$
docker inspect ecs-agent | grep ECS_DATADIR
Saída:
"ECS_DATADIR=/data",
Importante
Se o comando anterior não retornar a variável de ambiente
ECS_DATADIR
, você deverá interromper todas as tarefas em execução nessa instância de contêiner antes de atualizar seu agente. Agentes mais novos com a variável de ambienteECS_DATADIR
salvam seu estado, e você pode atualizá-los enquanto as tarefas são executadas sem problemas. -
Interrompa o agente de contêiner do Amazon ECS.
ubuntu:~$
docker stop ecs-agent
-
Exclua o contêiner de agente.
ubuntu:~$
docker rm ecs-agent
-
Verifique se o diretório
/etc/ecs
e o arquivo de configuração do agente de contêiner do Amazon ECS existem em/etc/ecs/ecs.config
.ubuntu:~$
sudo mkdir -p /etc/ecs && sudo touch /etc/ecs/ecs.config
-
Edite o arquivo
/etc/ecs/ecs.config
e verifique se ele contém pelo menos as seguintes instruções de variável. Se você não quiser que sua instância de contêiner seja registrada no cluster padrão, especifique seu nome de cluster como o valor paraECS_CLUSTER
.ECS_DATADIR=/data ECS_ENABLE_TASK_IAM_ROLE=true ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true ECS_LOGFILE=/log/ecs-agent.log ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"] ECS_LOGLEVEL=info ECS_CLUSTER=
default
Para obter mais informações sobre essas e outras opções de runtime de agente, consulte Configuração do agente de contêiner do Amazon ECS.
nota
É possível, opcionalmente, armazenar suas variáveis de ambiente do agente no Amazon S3 (que podem ser baixadas para as instâncias de contêiner no momento da inicialização usando os dados de usuário do Amazon EC2). Isso é recomendado para informações confidenciais, como credenciais de autenticação para repositórios privados. Para ter mais informações, consulte Armazenamento da configuração da instância de contêiner do Amazon ECS no Amazon S3 e Uso de imagens de contêiner que não são da AWS no Amazon ECS.
-
Extraia a imagem de agente de contêiner do Amazon ECS mais recente do Amazon Elastic Container Registry Public.
ubuntu:~$
docker pull public.ecr.aws/ecs/amazon-ecs-agent:latest
Saída:
Pulling repository amazon/amazon-ecs-agent a5a56a5e13dc: Download complete 511136ea3c5a: Download complete 9950b5d678a1: Download complete c48ddcf21b63: Download complete Status: Image is up to date for amazon/amazon-ecs-agent:latest
-
Execute o agente de contêiner do Amazon ECS mais recente na instância de contêiner.
nota
Use políticas de reinicialização do Docker ou um gerenciador de processos (como upstart ou systemd) para tratar o agente de contêiner como um serviço ou um daemon e garantir que ele seja reiniciado após sair. A AMI otimizada para Amazon ECS usa o RPM
ecs-init
para essa finalidade, e você pode visualizar o código-fonte para esse RPMno GitHub. O comando de execução de agente do exemplo a seguir é dividido em linhas separadas para mostrar cada opção. Para obter mais informações sobre essas e outras opções de runtime de agente, consulte Configuração do agente de contêiner do Amazon ECS.
Importante
Os sistemas operacionais com o SELinux habilitado requerem a opção
--privileged
em seu comando docker run. Além disso, para instâncias de contêiner habilitadas para SELinux, recomendamos que você adicione a opção:Z
às montagens de volume/log
e/data
. No entanto, as montagens de host para esses volumes devem existir para que você execute o comando; caso contrário, você receberá um errono such file or directory
. Execute a seguinte ação se você tiver dificuldades para executar o agente do Amazon ECS em uma instância de contêiner habilitada para o SELinux:-
Crie os pontos de montagem de volume de host na instância de contêiner.
ubuntu:~$
sudo mkdir -p /var/log/ecs /var/lib/ecs/data
-
Adicione a opção
--privileged
ao comando docker run abaixo. -
Anexe a opção
:Z
às montagens de volume de contêiner/log
e/data
(por exemplo,--volume=/var/log/ecs/:/log:Z
) ao comando docker run abaixo.
ubuntu:~$
sudo docker run --name ecs-agent \ --detach=true \ --restart=on-failure:10 \ --volume=/var/run:/var/run \ --volume=/var/log/ecs/:/log \ --volume=/var/lib/ecs/data:/data \ --volume=/etc/ecs:/etc/ecs \ --volume=/etc/ecs:/etc/ecs/pki \ --net=host \ --env-file=/etc/ecs/ecs.config \ amazon/amazon-ecs-agent:latest
nota
Se você receber uma mensagem
Error response from daemon: Cannot start container
, poderá excluir o contêiner com falha com o comando sudo docker rm ecs-agent e tentar executar o comando novamente. -