

# Atualizar o agente de contêiner do Amazon ECS
<a name="ecs-agent-update"></a>

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. O processo de atualização do agente varia, dependendo do local em que a instância de contêiner foi iniciada, se na AMI otimizada para Amazon ECS ou em outro sistema operacional.

**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.

## Verificar a versão do agente de contêiner do Amazon ECS
<a name="checking_agent_version"></a>

É possível verificar a versão do agente de contêiner que está sendo executada nas instâncias de contêiner para saber se é preciso atualizá-la. A exibição da instância de contêiner no console do Amazon ECS fornece a versão do agente. Use o procedimento a seguir para verificar a versão do agente.

------
#### [ Amazon ECS console ]

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Na barra de navegação, escolha a região em que sua instância externa está registrada.

1. No painel de navegação, escolha **Clusters** e selecione o cluster que hospeda a instância externa.

1. Na página **Cluster : *name***, escolha a guia **Infrastructure** (Infraestrutura).

1. Em **Container instances** (Instâncias de contêiner), observe a coluna **Agent version** (Versão do agente) para suas instâncias de contêiner. Se a instância de contêiner não contiver a versão mais recente do agente de contêiner, o console o alertará com uma mensagem e sinalizará a versão desatualizada do agente.

   Se a sua versão do agente estiver desatualizada, será possível atualizar seu agente de contêiner com os procedimentos a seguir:
   + Se sua instância de contêiner estiver executando a AMI otimizada para o Amazon ECS, consulte [Atualizar o agente de contêiner do Amazon ECS em uma AMI otimizada para Amazon ECS](agent-update-ecs-ami.md).
   + Se sua instância de contêiner não estiver executando a AMI otimizada para o Amazon ECS, consulte [Atualizar manualmente o agente de contêiner do Amazon ECS (para AMIs não otimizadas para Amazon ECS)](manually_update_agent.md).
**Importante**  
Para atualizar versões do agente do Amazon ECS anteriores à v1.0.0 na AMI otimizada para Amazon ECS, recomendamos que você encerre a instância de contêiner atual e execute uma nova instância com a versão mais recente da AMI. Todas as instâncias de contêiner que usam uma versão de pré-visualização devem ser retiradas e substituídas pela AMI mais recente. Para obter mais informações, consulte [Iniciar uma instância de contêiner do Linux do Amazon ECS](launch_container_instance.md).

------
#### [ Amazon ECS container agent introspection API  ]

Também é possível usar a API de introspecção do agente de contêiner do Amazon ECS para verificar a versão do agente na própria instância de contêiner. Para obter mais informações, consulte [Introspecção de contêiner do Amazon ECS](ecs-agent-introspection.md).

**Para verificar se o agente de contêiner do Amazon ECS está executando a versão mais recente com a API de introspecção**

1. Faça login em sua instância de contêiner via SSH.

1. Consulte a API de introspecção.

   ```
   [ec2-user ~]$ curl -s 127.0.0.1:51678/v1/metadata | python3 -mjson.tool
   ```
**nota**  
A API de introspecção incluiu informações de `Version` na versão v1.0.0 do agente de contêiner do Amazon ECS. Se `Version` não estiver presente ao consultar a API de introspecção ou ela não estiver presente no seu agente, a versão que você está executando é v0.0.3 ou anterior. Você deve atualizar a versão.

------

# Atualizar o agente de contêiner do Amazon ECS em uma AMI otimizada para Amazon ECS
<a name="agent-update-ecs-ami"></a>

Se você estiver usando a AMI otimizada para Amazon ECS, terá várias opções para obter a versão mais recente do agente de contêiner do Amazon ECS (mostrado por ordem de recomendação):
+ Encerre as instâncias de contêiner e inicie a versão mais recente da AMI do Amazon Linux 2 otimizada para Amazon ECS (manualmente ou atualizando a configuração de execução do Auto Scaling com a AMI mais recente). O resultado será uma instância de contêiner atualizada com as versões testadas e validadas mais recentes do Amazon Linux, do Docker, do `ecs-init` e do agente de contêiner do Amazon ECS. Para obter mais informações, consulte [AMIs do Linux otimizadas para o Amazon ECS](ecs-optimized_AMI.md).
+ Conecte-se à instância com o SSH e atualize o pacote do `ecs-init` (e suas dependências) para a versão mais recente. Essa operação fornecerá as versões testadas e validadas mais recentes do Docker e do `ecs-init` que estão disponíveis nos repositórios do Amazon Linux e na versão mais recente do agente de contêiner do Amazon ECS. Para obter mais informações, consulte [Para atualizar o pacote `ecs-init` em uma AMI otimizada para o Amazon ECS](#procedure_update_ecs-init).
+ Atualize o agente de contêiner com a operação de API do `UpdateContainerAgent`, através do console ou com a AWS CLI ou os SDKs da AWS. Para obter mais informações, consulte [Atualizar o agente de contêiner do Amazon ECS com a operação de API do `UpdateContainerAgent`](#agent-update-api).

**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.<a name="procedure_update_ecs-init"></a>

**Para atualizar o pacote `ecs-init` em uma AMI otimizada para o Amazon ECS**

1. Faça login em sua instância de contêiner via SSH.

1. Atualize o pacote `ecs-init` com o comando a seguir.

   ```
   sudo yum update -y ecs-init
   ```
**nota**  
O pacote `ecs-init` e o agente de contêiner do Amazon ECS são atualizados imediatamente. No entanto, as versões mais recentes do Docker não serão carregadas até que o daemon do Docker seja reiniciado. Inicie novamente reinicializando a instância ou executando os seguintes comandos em sua instância:  
AMI do Amazon Linux 2 otimizada para Amazon ECS:  

     ```
     sudo systemctl restart docker
     ```
AMI do Amazon Linux otimizada para Amazon ECS:  

     ```
     sudo service docker restart && sudo start ecs
     ```

## Atualizar o agente de contêiner do Amazon ECS com a operação de API do `UpdateContainerAgent`
<a name="agent-update-api"></a>

**Importante**  
A API do `UpdateContainerAgent` só é compatível com variantes Linux da AMI otimizada para o Amazon ECS, com exceção da AMI do Amazon Linux 2 (arm64) otimizada para Amazon ECS. Para instâncias de contêiner que usam a AMI do Amazon Linux 2 (arm64) otimizada para Amazon ECS, atualize o pacote `ecs-init` para atualizar o agente. Para instâncias de contêiner que estão executando outros sistemas operacionais, consulte [Atualizar manualmente o agente de contêiner do Amazon ECS (para AMIs não otimizadas para Amazon ECS)](manually_update_agent.md). Se você está usando instâncias de container do Windows. recomendamos que você inicie novas instâncias de contêiner para atualizar a versão do agente nos clusters do Windows.

O processo da API do `UpdateContainerAgent` começa quando você solicita uma atualização do agente, por meio do console ou com a AWS CLI ou AWS SDKs. O Amazon ECS compara a versão atual do agente com a versão mais recente disponível e verifica se é possível realizar uma atualização. Se uma atualização não estiver disponível, por exemplo, se o agente já estiver executando a versão mais recente, um `NoUpdateAvailableException` será retornado.

Os estágios do processo de atualização mostrados acima são os seguintes:

`PENDING`  
Uma atualização de agente está disponível, e o processo de atualização iniciou.

`STAGING`  
O agente começou a baixar a atualização do agente. Se o agente não conseguir baixar a atualização ou se o conteúdo da atualização estiver incorreto ou corrompido, o agente enviará uma notificação da falha, e a atualização passará para o estado `FAILED`.

`STAGED`  
O download do agente foi concluído e o conteúdo do agente foi verificado.

`UPDATING`  
O serviço `ecs-init` é reiniciado e obtém a nova versão do agente. Se, por algum motivo, não for possível reiniciar o agente, a atualização passará para o estado `FAILED`; do contrário, o agente informará ao Amazon ECS que a atualização foi concluída.

**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.

**Para atualizar o agente de contêiner do Amazon ECS em uma AMI otimizada para Amazon ECS no console**

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Na barra de navegação, escolha a região em que sua instância externa está registrada.

1. No painel de navegação, escolha **Clusters** e selecione o cluster.

1. Na página **Cluster : *name***, escolha a guia **Infrastructure** (Infraestrutura).

1. Em **Instâncias de contêiner**, selecione as instâncias a serem atualizadas e escolha **Ações**, **Agente de atualização**.

# Atualizar manualmente o agente de contêiner do Amazon ECS (para AMIs não otimizadas para Amazon ECS)
<a name="manually_update_agent"></a>

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.

1. Faça login em sua instância de contêiner via SSH.

1. 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
   ```

   Resultado:

   ```
   "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 ambiente `ECS_DATADIR` salvam seu estado, e você pode atualizá-los enquanto as tarefas são executadas sem problemas.

1. Interrompa o agente de contêiner do Amazon ECS.

   ```
   ubuntu:~$ docker stop ecs-agent
   ```

1. Exclua o contêiner de agente.

   ```
   ubuntu:~$ docker rm ecs-agent
   ```

1. 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
   ```

1. 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 para `ECS_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](ecs-agent-config.md).
**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 obter mais informações, consulte [Armazenamento da configuração da instância de contêiner do Amazon ECS no Amazon S3](ecs-config-s3.md) e [Uso de imagens de contêiner que não são da AWS no Amazon ECS](private-auth.md).

1. 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
   ```

   Resultado:

   ```
   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
   ```

1. 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 RPM](https://github.com/aws/amazon-ecs-init) no 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](ecs-agent-config.md).
**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 erro `no 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. 