

# Definiciones de tareas de daemon
<a name="managed-daemons-task-definitions"></a>

La definición de una tarea de daemon es el esquema de su daemon. Los daemons administrados de Amazon ECS utilizan un recurso de definición de tareas de daemon especificado, distinto de las definiciones de tareas estándar de Amazon ECS. Registra una definición de tarea de daemon para especificar la imagen del contenedor, los requisitos de recursos y la configuración del daemon.

## Creación de una definición de tarea de daemon
<a name="managed-daemons-create-taskdef"></a>

Puede crear una definición de tarea de daemon mediante la Consola de administración de AWS o la AWS CLI.

### Uso de Consola de administración de AWS
<a name="managed-daemons-create-taskdef-console"></a>

1. Abra la consola de Amazon ECS. En el panel de navegación izquierdo, elija **Definiciones de tareas de daemon**.

1. Elija **Crear nueva definición de tarea de daemon**.

1. En **Familia de definiciones de tareas de daemon**, introduzca un nombre único. El nombre puede contener hasta 255 caracteres alfanuméricos, guiones y guiones bajos.

1. (Opcional) En **Rol de tarea**, agregue un rol de IAM que conceda permisos a las aplicaciones que se ponen en marcha en los contenedores. Deje este campo en blanco si los contenedores no llaman a las API de AWS.

1. (Opcional) En **Rol de ejecución de tareas**, seleccione `ecsTaskExecutionRole`. Amazon ECS necesita este rol para extraer imágenes de contenedores y publicar registros.

1. (Opcional) En **Tamaño de la tarea**, especifique la CPU y memoria que se debe reservar para el daemon. Por ejemplo, `0.25 vCPU` y `512 MB` de memoria.

1. Configure los detalles del contenedor:
   + **Nombre del contenedor**: ingrese un nombre para el contenedor. El nombre puede contener hasta 255 caracteres alfanuméricos, guiones y guiones bajos.
   + **Contenedor esencial**: seleccione **Sí**. Cada definición de tareas de daemon debe contener al menos un contenedor esencial. Si se produce un error en un contenedor esencial, Amazon ECS detiene toda la tarea.
   + **URI de la imagen**: introduzca el URI de la imagen de Docker. Puede buscar imágenes de Amazon ECR o utilizar imágenes públicas de Docker Hub u otros registros.

1. (Opcional) Configure la asignación de recursos, la comprobación de estado, las variables de entorno, la recopilación de registros y las etiquetas según sea necesario.

1. Revise la configuración y elija **Crear**.

### Uso de AWS CLI
<a name="managed-daemons-create-taskdef-cli"></a>

Para registrar una definición de tarea de daemon, cree un archivo JSON y utilice el comando `register-daemon-task-definition`.

A continuación se muestra un ejemplo de un archivo JSON:

```
{
    "family": "my-daemon-task",
    "containerDefinitions": [
        {
            "name": "daemon-container",
            "image": "public.ecr.aws/docker/library/busybox:latest",
            "essential": true,
            "command": ["sh", "-c", "while true; do echo 'Daemon running'; sleep 30; done"],
            "memoryReservation": 512
        }
    ]
}
```

Ejecute el siguiente comando para registrar la definición de tarea de daemon:

```
aws ecs register-daemon-task-definition --cli-input-json file://daemon-taskdef.json
```

## Parámetros de definición de tarea de daemon
<a name="managed-daemons-taskdef-parameters"></a>

Puede utilizar los siguientes parámetros al registrar una definición de tarea de daemon.

**Parámetros requeridos**
+ `family`: el apellido de la definición de la tarea. Esto agrupa varias revisiones de la misma definición de tarea de daemon.
+ `containerDefinitions`: una matriz de objetos `DaemonContainerDefinition` que describen los contenedores de la tarea de daemon.

**Parámetros opcionales**
+ `cpu`: unidades de CPU a nivel de tarea como cadena (por ejemplo, `"256"`).
+ `memory`: memoria a nivel de tarea en MiB como cadena (por ejemplo, `"512"`).
+ `taskRoleArn`: el ARN del rol de IAM que concede permisos a los contenedores de la tarea de daemon.
+ `executionRoleArn`: el ARN del rol de IAM que el agente de contenedor de Amazon ECS utiliza para realizar llamadas a la API de AWS en su nombre (por ejemplo, extraer imágenes de Amazon ECR).
+ `volumes`: una matriz de objetos `DaemonVolume`. Los volúmenes de daemon solo admiten montajes de vinculación con `host` y `sourcePath`. Las definiciones de tareas de Daemon no admiten Amazon EBS, Amazon EFS, FSx para Windows File Server, volúmenes de Docker ni almacenamiento efímero.
+ `tags`: una matriz de pares clave-valor para etiquetar la definición de tarea de daemon.
+ `pidMode`: controla el modo del espacio de nombres PID del daemon.
+ `ipcMode`: controla el modo del espacio de nombres IPC del daemon.

## Modo de red
<a name="managed-daemons-network-mode"></a>

Los daemons utilizan un modo de red `daemon_bridge` especial que Amazon ECS establece automáticamente. No puede especificar un modo de red en la definición de tarea de daemon. Todos los daemons de una instancia comparten un único espacio de nombres de red y se puede acceder a ellos de forma local mediante una dirección IP estática de puente de daemon (`169.254.172.2` para IPv4 o `fd00:ec2::172:2` para IPv6). Las tareas de la aplicación (que no son daemons) se pueden comunicar con los daemons en esta dirección sin necesidad de configurar la red adicional.

Como los daemons se ejecutan en un espacio de nombres de red independiente del de las tareas de aplicación, las tareas que no son de daemon no se tienen que preocupar de los conflictos de puertos con los daemons. Sin embargo, dado que todas las tareas de daemon comparten el mismo espacio de nombres, los daemons de la misma instancia no pueden vincularse al mismo puerto. Al implementar varios daemons, asegúrese de que cada daemon utilice un puerto único.

## Capacidades con privilegios
<a name="managed-daemons-privileged"></a>

En las instancias administradas de Amazon ECS, los daemons admiten capacidades de Linux privilegiadas para las operaciones a nivel de sistema. Los agentes de seguridad, las herramientas de supervisión de redes y los agentes de observabilidad a menudo necesitan acceso a nivel de núcleo para funcionar correctamente.

Puede conceder capacidades de dos maneras:

El **modo con todos los privilegios** otorga todas las capacidades de Linux al contenedor. Utilícelo cuando el agente necesite un amplio acceso al sistema:

```
{
    "containerDefinitions": [{
        "name": "security-daemon",
        "image": "my-security-agent:latest",
        "privileged": true
    }]
}
```

Las **capacidades individuales** solo conceden los permisos que necesita el daemon siguiendo el principio de privilegio mínimo. Use el campo `linuxParameters.capabilities` para agregar capacidades individuales, como `SYS_ADMIN`, `NET_ADMIN`, `SYS_PTRACE`, `BPF` y `PERFMON`:

```
{
    "containerDefinitions": [{
        "name": "monitoring-daemon",
        "image": "my-monitoring-agent:latest",
        "linuxParameters": {
            "capabilities": {
                "add": ["NET_ADMIN", "SYS_PTRACE"]
            }
        }
    }]
}
```

## Uso compartido de espacios de nombres PID e IPC
<a name="managed-daemons-namespace-sharing"></a>

En Amazon ECS Managed Instances, los daemons admiten el uso compartido de espacios de nombres PID e IPC para casos de uso como agentes de seguridad, herramientas de supervisión y daemons de observabilidad que necesitan visibilidad sobre los procesos de las tareas de aplicación o los recursos IPC.

`pidMode`  
Tipo: cadena  
Requerido: no  
Valores válidos: `none` \| `shared`  
Valor predeterminado: `none`  
El modo del espacio de nombres PID del daemon. Si se especifica `none` o no se proporciona ningún valor, el daemon se ejecuta con su propio espacio de nombres PID, aislado de las demás tareas. Si se especifica `shared`, el daemon se une al espacio de nombres PID del host, lo que permite que accedan a este las tareas que no son de daemon que usan `pidMode: "host"` u otros daemons que usan `pidMode: "shared"`.

`ipcMode`  
Tipo: cadena  
Requerido: no  
Valores válidos: `none` \| `shared`  
Valor predeterminado: `none`  
Modo del espacio de nombres IPC del daemon. Si se especifica `none` o no se proporciona ningún valor, el daemon se ejecuta con su propio espacio de nombres IPC, aislado de las demás tareas. Si se especifica `shared`, el daemon se une al espacio de nombres IPC del host, lo que permite que accedan a este las tareas que no son de daemon que usan `ipcMode: "host"` u otros daemons que usan `ipcMode: "shared"`.

En el siguiente ejemplo, se muestra una definición de tarea de daemon con el uso compartido de espacios de nombres PID e IPC habilitado:

```
{
    "family": "my-monitoring-daemon",
    "pidMode": "shared",
    "ipcMode": "shared",
    "containerDefinitions": [
        {
            "name": "monitoring-agent",
            "image": "public.ecr.aws/my-company/monitoring-agent:latest",
            "essential": true
        }
    ]
}
```

Para compartir el espacio de nombres PID con un daemon que tiene `pidMode` establecido en `shared`, una tarea que no sea de daemon debe especificar `pidMode: "host"` en la definición de tarea. Esto permite que los contenedores de la tarea vean los procesos del daemon y habilita casos de uso como la supervisión de procesos y el envío de señales.

Para compartir el espacio de nombres IPC con un daemon que tenga `ipcMode` establecido en `shared`, una tarea que no sea de daemon debe especificar `ipcMode: "host"` en la definición de la tarea. Esto permite que los contenedores de la tarea accedan a los recursos IPC del daemon, como segmentos de memoria compartida y colas de mensajes.

## Volúmenes
<a name="managed-daemons-volumes"></a>

Los daemons administrados admiten montajes de vinculación mediante volúmenes host con una especificación de `sourcePath`. Esto permite que los contenedores daemon monten directorios de hosts para acceder a los registros, las métricas y la información del sistema de la instancia de Amazon EC2 subyacente. Los agentes de recopilación de registros, los exportadores de métricas y los escáneres de seguridad suelen utilizarlos para obtener visibilidad de los datos a nivel de host.

La definición de tareas de daemon es compatible con las especificaciones de volumen de los hosts con `sourcePath`. Los volúmenes de daemon persisten durante todo el ciclo de vida de la instancia de contenedor subyacente.

**nota**  
Los volúmenes de Amazon EBS, los volúmenes de Amazon EFS, los volúmenes de FSx para Windows File Server, los volúmenes de Docker y el almacenamiento efímero no se admiten en las definiciones de tareas de daemon.

**nota**  
Los daemons no admiten el uso compartido de volúmenes entre sí. Cada daemon funciona con su propia configuración de volumen independiente.

En el ejemplo que sigue se muestra un daemon que recopila registros con un montaje de vinculación:

```
{
    "containerDefinitions": [{
        "name": "log-collector",
        "image": "fluent/fluentd:latest",
        "mountPoints": [{
            "sourceVolume": "var-log",
            "containerPath": "/var/log"
        }]
    }],
    "volumes": [{
        "name": "var-log",
        "host": {
            "sourcePath": "/var/log"
        }
    }]
}
```

## Parámetros de contenedor admitidos
<a name="managed-daemons-container-params"></a>

Las definiciones de contenedor de daemon admiten los siguientes parámetros:
+ `image` (obligatorio): URI de imagen del contenedor
+ `name` (obligatorio): nombre del contenedor
+ `cpu`: unidades de CPU reservadas para el contenedor
+ `memory`/`memoryReservation`: límites de memoria fijos y flexibles
+ `essential`: si el contenedor es esencial (predeterminado: true)
+ `command`/`entryPoint`: anula el comando o el punto de entrada del contenedor
+ `environment`/`environmentFiles`/`secrets`: configuración del entorno
+ `privileged`: ejecute el contenedor en modo privilegiado
+ `user`: usuario en nombre del que se ejecutará el contenedor
+ `workingDirectory`: directorio de trabajo dentro del contenedor
+ `readonlyRootFilesystem`: monte el sistema de archivos raíz como de solo lectura
+ `mountPoints`: puntos de montaje de volúmenes (montajes de vinculación únicamente con host y sourcePath)
+ `logConfiguration`: configuración de registro (admite awslogs, splunk y awsfirelens)
+ `healthCheck`: configuración de la comprobación de estado del contenedor
+ `dependsOn`: dependencias de inicio de contenedores
+ `ulimits`: límites de recursos
+ `systemControls`: parámetros del núcleo
+ `linuxParameters.capabilities`: capacidades de Linux que se agregarán o eliminarán
+ `linuxParameters.initProcessEnabled`: ejecute un proceso de inicio en el contenedor
+ `repositoryCredentials`: credenciales para registros privados
+ `restartPolicy`: política de reinicio de contenedores