

# Actualización manual del agente de contenedor de Amazon ECS (para AMI no optimizadas para Amazon ECS)
<a name="manually_update_agent"></a>

Ocasionalmente, es posible que tenga que actualizar el agente de contenedor de Amazon ECS para obtener correcciones de errores y nuevas características. La actualización del agente de contenedor de Amazon ECS no interrumpe las tareas ni los servicios en marcha en la instancia de contenedor.
**nota**  
Las actualizaciones del agente no se aplican a instancias de contenedor de Windows. Le recomendamos que lance nuevas instancias de contenedor para actualizar la versión del agente en sus clústeres Windows.

1. Inicie sesión en su instancia de contenedor mediante SSH.

1. Compruebe si su agente utiliza la variable de entorno `ECS_DATADIR` para guardar su estado.

   ```
   ubuntu:~$ docker inspect ecs-agent | grep ECS_DATADIR
   ```

   Salida:

   ```
   "ECS_DATADIR=/data",
   ```
**importante**  
Si el comando anterior no devuelve la variable de entorno `ECS_DATADIR`, debe detener las tareas en ejecución en esta instancia de contenedor antes de actualizar el agente. Los agentes más recientes con la variable de entorno `ECS_DATADIR` guardan su estado y usted puede actualizarlos mientras que las tareas se ejecuten sin problemas.

1. Detenga el agente de contenedor de Amazon ECS.

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

1. Elimine el contenedor de agente.

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

1. Asegúrese de que el directorio `/etc/ecs` y el archivo de configuración del agente de contenedor de Amazon ECS existan en `/etc/ecs/ecs.config`.

   ```
   ubuntu:~$ sudo mkdir -p /etc/ecs && sudo touch /etc/ecs/ecs.config
   ```

1. Edite el archivo `/etc/ecs/ecs.config` y asegúrese de que contenga al menos las siguientes declaraciones de variables. Si no desea que su instancias de contenedor se registre en el clúster predeterminado, especifique el nombre del clúster como el 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 obtener más información acerca de estas y otras opciones de tiempo de ejecución de agente, consulte [Configuración del agente de contenedor de Amazon ECS](ecs-agent-config.md).
**nota**  
Si lo desea, puede almacenar las variables de entorno del agente en Amazon S3 (se pueden descargar en las instancias de contenedor en el momento del lanzamiento utilizando datos de usuario de Amazon EC2). Se recomienda su uso para información confidencial como las credenciales de autenticación para repositorios privados. Para obtener más información, consulte [Almacenamiento de la configuración de instancia de contenedor de Amazon ECS en Amazon S3](ecs-config-s3.md) y [Uso de imágenes de contenedor que no sean de AWS en Amazon ECS](private-auth.md).

1. Extraiga la imagen más reciente del agente de contenedor de Amazon ECS de Amazon Elastic Container Registry Public.

   ```
   ubuntu:~$ docker pull public.ecr.aws/ecs/amazon-ecs-agent:latest
   ```

   Salida:

   ```
   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. Ejecute el agente de contenedor de Amazon ECS más reciente en la instancia de contenedor.
**nota**  
Utilice las políticas de reinicio de Docker o un administrador de procesos (como **upstart** o **systemd**) para tratar al agente de contenedor como un servicio o un daemon y asegurarse de que se reinicie después de finalizar su ejecución. Para eso, la AMI optimizada para Amazon ECS utiliza el RPM `ecs-init`, y puede consultar el [código fuente para este RPM](https://github.com/aws/amazon-ecs-init) en GitHub. 

   En el siguiente ejemplo, el comando de ejecución del agente está dividido en líneas separadas para mostrar cada opción. Para obtener más información acerca de estas y otras opciones de tiempo de ejecución de agente, consulte [Configuración del agente de contenedor de Amazon ECS](ecs-agent-config.md).
**importante**  
Los sistemas operativos con SELinux habilitado requieren la opción `--privileged` en el comando **docker run**. Además, para las instancias de contenedor con SELinux habilitado, recomendamos añadir la opción `:Z` a los montajes de volúmenes `/log` y `/data`. No obstante, los montajes de hosts para estos volúmenes deben existir antes de que ejecute el comando; de lo contrario, recibirá un error `no such file or directory`. Realice la siguiente acción si tiene dificultades para ejecutar el agente de Amazon ECS en una instancia de contenedor con SELinux habilitado:  
Cree los puntos de montaje de volumen del host en su instancia de contenedor.  

     ```
     ubuntu:~$ sudo mkdir -p /var/log/ecs /var/lib/ecs/data
     ```
Añada la opción `--privileged` al siguiente comando **docker run**.
Añada la opción `:Z` a los montajes del volumen de contenedor `/log` y `/data` (por ejemplo, `--volume=/var/log/ecs/:/log:Z`) para el siguiente comando **docker run**.

   ```
   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**  
Si recibe el mensaje `Error response from daemon: Cannot start container`, puede eliminar el contenedor con errores con el comando **sudo docker rm ecs-agent** e intentar volver a ejecutar el agente. 