Cómo crear una definición de tarea - Amazon Elastic Container Service

Cómo crear una definición de tarea

Antes de poder ejecutar los contenedores de Docker en Amazon ECS, debe crear una definición de tarea. Puede definir varios contenedores y volúmenes de datos en una definición de tarea. Para obtener más información acerca de los parámetros disponibles en una definición de tarea, consulte Parámetros de definición de tarea.

Para crear una nueva definición de tarea

  1. Abra la consola de Amazon ECS en https://console.aws.amazon.com/ecs/.

  2. En el panel de navegación, elija Task Definitions (Definiciones de tareas) y Create new Task Definition (Crear nueva definición de tareas).

  3. En la página Select compatibilities, seleccione el tipo de lanzamiento que su tarea debe usar y elija Next step.

    nota

    El tipo de lanzamiento Fargate no es compatible con los contenedores de Windows.

  4. Siga los pasos que aparecen en una de las siguientes pestañas en función del tipo de lanzamiento que haya seleccionado.

Fargate launch type

Mediante la plantilla de compatibilidad con el tipo de lanzamiento Fargate

Si ha elegido Fargate, complete los pasos siguientes:

  1. (Opcional) Si tiene una representación de JSON de su definición de tarea, siga los pasos que se describen a continuación:

    1. En la página Configure task and container definitions, desplácese a la parte inferior de la página y seleccione Configure via JSON (Configurar vía JSON).

    2. Pegue el JSON de la definición de tarea en el área de texto y elija Save (Guardar).

    3. Verifique su información y seleccione Create (Crear).

    Desplácese hasta la parte inferior de la página y elija Configure via JSON (Configurar vía JSON).

  2. En Task Definition Name (Nombre de la definición de tarea), escriba un nombre para la definición de tarea. Se admiten hasta 255 letras (mayúsculas y minúsculas), números, guiones y caracteres de subrayado.

  3. (Opcional) En Task Role (Rol de tarea), elija un rol de IAM que proporcione permisos a los contenedores de la tarea para realizar llamadas a las operaciones de la API de AWS en su nombre. Para obtener más información, consulte Roles de IAM para las tareas.

    nota

    Aquí solo se muestran roles con la relación de confianza de Amazon EC2 Container Service Task Role (Rol de tarea de servicio de contenedor de Amazon EC2). Para obtener más información sobre la creación de un rol de IAM para las tareas, consulte Creación de un rol y una política de IAM para sus tareas.

  4. En Task execution IAM role (Rol de IAM de ejecución de tarea), seleccione el rol de ejecución de la tarea o seleccione Create new role (Crear nuevo rol) para que la consola cree uno. Para obtener más información, consulte Rol de IAM de ejecución de tareas de Amazon ECS.

  5. En Task size (Tamaño de tarea), elija un valor para Task memory (GB) [Memoria de tarea (GB)] y Task CPU (vCPU) [CPU de tarea (vCPU)]. En la siguiente tabla se muestran las combinaciones válidas.

    Valor de CPU Valor de memoria
    256 (0,25 vCPU) 512 MB, 1 GB, 2 GB
    512 (0,5 vCPU) 1 GB, 2 GB, 3 GB, 4 GB
    1024 (1 vCPU) 2 GB, 3 GB, 4 GB, 5 GB, 6 GB, 7 GB, 8 GB
    2048 (2 vCPU) Entre 4 GB y 16 GB en incrementos de 1 GB
    4096 (4 vCPU) Entre 8 GB y 30 GB en incrementos de 1 GB
  6. Para cada contenedor en su definición de tarea, siga los pasos que se describen a continuación:

    1. Elija Add container (Añadir contenedor).

    2. Rellene cada campo obligatorio y todos los campos opcionales que va a usar en sus definiciones de contenedor. Hay más parámetros de definición de contenedor disponibles en el menú Advanced container configuration (Configuración avanzada del contenedor). Para obtener más información, consulte Parámetros de definición de tarea.

    3. Elija Add (Añadir) para añadir el contenedor a la definición de tarea.

  7. (Opcional) Para Service Integration, para configurar los parámetros para la integración de App Mesh, elija Enable (Habilitar integración) App Mesh y haga lo siguiente:

    1. En Application container name (Nombre de contenedor de la aplicación), elija el nombre del contenedor para usar con la aplicación App Mesh. Este contenedor ya debe estar definido dentro de la definición de la tarea.

    2. En Envoy image (Imagen de Envoy), introduzca 840364872350.dkr.ecr.region-code.amazonaws.com/aws-appmesh-envoy:v1.12.5.0-prod.

    3. En Mesh name (Nombre de mesh), elija el servicio mesh App Mesh para utilizar. Esto ya debe haberse creado para que se muestre. Para obtener más información, consulte Mallas de servicios en la Guía del usuario de AWS App Mesh.

    4. En Virtual node name (Nombre de nodo virtual), elija el nodo virtual App Mesh para usar. Esto ya debe haberse creado para que se muestre. Para obtener más información, consulte Nodos virtuales en la Guía del usuario de AWS App Mesh.

    5. En Virtual node port (Puerto de nodo virtual), esto se rellenará previamente con el puerto que escucha establecido en el nodo virtual.

    6. Elija Apply (Aplicar), Confirm (Confirmar). Esto creará un nuevo contenedor proxy Envoy en la definición de tarea, así como la configuración de compatibilidad. Después completará previamente los ajustes de configuración de proxy App Mesh para el paso siguiente.

  8. (Opcional) En Proxy Configuration (Configuración de proxy), verifique todos los valores previamente completados. Para obtener más información sobre estos campos, consulte la pestaña JSON en Update Services (Actualizar servicios).

  9. (Opcional) Para la integración del router de registro puede añadir una configuración de direccionamiento de registro personalizada. Elija Enable FireLens integration (Habilitar integración de FireLens) y, a continuación, haga lo siguiente:

    1. Para Type (Tipo), elija el tipo de router de registro que va a utilizar.

    2. Para Image (Imagen), escriba la URI de imagen del contenedor del router de registro. Si elije el tipo de router de registro fluentbit, el campo Image (Imagen) se rellena previamente con la imagen de AWS for Fluent Bit. Para obtener más información, consulte Uso de AWS para la imagen de Fluent Bit.

    3. Seleccione Apply. Esto crea un nuevo contenedor del router de regeistro para la definición de la tarea con el nombre log_router y aplica la configuración que neceista. Si realiza algún cambio en los campos de integración del router de registro, elija Apply (Aplicar) de nuevo para actualizar el contenedor FireLens.

  10. (Opcional) Para definir los volúmenes de datos para su tarea, seleccione Add volume (Añadir volumen). Para obtener más información, consulte Uso de volúmenes de datos en tareas.

    1. En Name (Nombre), escriba un nombre para el volumen. Se admiten hasta 255 letras (mayúsculas y minúsculas), números, guiones y caracteres de subrayado.

  11. En la sección Tags (Etiquetas), especifique la clave y el valor de cada etiqueta que se va a asociar a la definición de tarea. Para obtener más información, consulte Etiquetado de los recursos de Amazon ECS.

  12. Seleccione Create.

EC2 launch type

Mediante la plantilla de compatibilidad con el tipo de lanzamiento EC2

Si ha elegido EC2, complete los pasos siguientes:

  1. (Opcional) Si tiene una representación de JSON de su definición de tarea, siga los pasos que se describen a continuación:

    1. En la página Configure task and container definitions, desplácese a la parte inferior de la página y seleccione Configure via JSON (Configurar vía JSON).

    2. Pegue el JSON de la definición de tarea en el área de texto y elija Save (Guardar).

    3. Verifique su información y seleccione Create (Crear).

    Desplácese hasta la parte inferior de la página y elija Configure via JSON (Configurar vía JSON).

  2. En Task Definition Name (Nombre de la definición de tarea), escriba un nombre para la definición de tarea. Se admiten hasta 255 letras (mayúsculas y minúsculas), números, guiones y caracteres de subrayado.

  3. (Opcional) En Task Role (Rol de tarea), elija un rol de IAM que proporcione permisos a los contenedores de la tarea para realizar llamadas a las API de AWS en su nombre. Para obtener más información, consulte Roles de IAM para las tareas.

    En las tareas que utilizan el tipo de lanzamiento EC2, estos permisos los suele conceder el rol de IAM de la instancia de contenedor de Amazon ECS. Para obtener más información, consulte Rol de IAM de la instancia de contenedor de Amazon ECS.

    nota

    Aquí solo se muestran roles con la relación de confianza de Amazon EC2 Container Service Task Role (Rol de tarea de servicio de contenedor de Amazon EC2). Para obtener más información sobre la creación de un rol de IAM para las tareas, consulte Creación de un rol y una política de IAM para sus tareas.

  4. (Opcional) Para Network Mode, elija el modo de red de Docker para utilizar para los contenedores en su tarea. Los modos de red disponibles corresponden a los descritos en Network settings en la referencia de ejecución de Docker. Si selecciona Enable App Mesh integration (Habilitar la integración de App Mesh) en uno de los siguientes pasos, debe seleccionar awsvpc.

    El modo de red de Docker predeterminado es bridge. Si el modo de red se establece en none, no puede especificar el mapeo de puertos en sus definiciones de contenedor y los contenedores de tarea no tienen conectividad externa. Si el modo de red es awsvpc, a la tarea se le asigna una interfaz de red elástica. Los modos de red host y awsvpc ofrecen el rendimiento de redes más alto para contenedores, dado que utilizan la pila de redes de Amazon EC2 en lugar de la pila de redes virtualizada que proporciona el modo bridge; no obstante, los puertos de contenedor expuestos se asignan directamente al puerto de host correspondiente, por lo que no puede aprovechar los mapeos de puertos de host dinámico ni ejecutar varias instancias de la misma tarea en una instancia de contenedor única si se utilizan los mapeos de puertos.

  5. (Opcional) En Task execution role (Rol de ejecución de tareas), elija un rol de IAM que proporcione permisos para que los contenedores de la tarea puedan realizar llamadas a las API de AWS en su nombre.

    En las tareas que utilizan el tipo de lanzamiento EC2, estos permisos los suele conceder el rol de IAM de la instancia de contenedor de Amazon ECS, que se ha especificado antes como Task Role (Rol de tarea). No es necesario especificar una rol de ejecución de tarea. Para obtener más información, consulte Rol de IAM de ejecución de tareas de Amazon ECS.

  6. (Opcional) En Task size, elija un valor para Task memory (GB) y Task CPU (vCPU). Los valores de Task CPU (vCPU) admitidos están entre 128 unidades de CPU (0,125 vCPU) y 10240 unidades de CPU (10 vCPU).

    nota

    Los parámetros de CPU y memoria de nivel de tarea se omiten para los contenedores de Windows. Le recomendamos que especifique recursos de nivel de contenedor para los contenedores de Windows.

  7. Para cada contenedor en su definición de tarea, siga los pasos que se describen a continuación.

    1. Elija Add container (Añadir contenedor).

    2. Rellene todos los campos obligatorios y algunos de los opcionales para usar en sus definiciones de contenedor (en el menú Advanced container configuration encontrará más parámetros para la definición de contenedor). Para obtener más información, consulte Parámetros de definición de tarea.

    3. Elija Add para añadir el contenedor a la definición de tarea.

  8. (Opcional) Para Constraint, defina la manera en que las tareas que se crean a partir de esta definición de tarea se colocan en su clúster. Para las tareas que usan el tipo de lanzamiento EC2, puede usar las restricciones para ubicar tareas basadas en zona de disponibilidad, tipo de instancia o atributos personalizados. Para obtener más información, consulte Restricciones para ubicación de tareas de Amazon ECS.

  9. (Opcional) Para Service Integration, para configurar los parámetros para la integración de App Mesh, elija Enable (Habilitar integración) App Mesh y haga lo siguiente:

    1. En Application container name (Nombre de contenedor de la aplicación), elija el nombre del contenedor para usar con la aplicación App Mesh. Este contenedor ya debe estar definido dentro de la definición de la tarea.

    2. En Envoy image (Imagen de Envoy), introduzca 840364872350.dkr.ecr.region-code.amazonaws.com/aws-appmesh-envoy:v1.12.5.0-prod.

    3. En Mesh name (Nombre de mesh), elija el servicio mesh App Mesh para utilizar. Esto ya debe haberse creado para que se muestre. Para obtener más información, consulte Mallas de servicios en la Guía del usuario de AWS App Mesh.

    4. En Virtual node name (Nombre de nodo virtual), elija el nodo virtual App Mesh para usar. Esto ya debe haberse creado para que se muestre. Para obtener más información, consulte Nodos virtuales en la Guía del usuario de AWS App Mesh.

    5. En Virtual node port (Puerto de nodo virtual), esto se rellenará previamente con el puerto que escucha establecido en el nodo virtual.

    6. Elija Apply (Aplicar), Confirm (Confirmar). Esto creará un nuevo contenedor proxy Envoy en la definición de tarea, así como la configuración de compatibilidad. Después completará previamente los ajustes de configuración de proxy App Mesh para el paso siguiente.

  10. (Opcional) En Proxy Configuration (Configuración de proxy), verifique todos los valores previamente completados. Para obtener más información sobre estos campos, consulte la pestaña JSON en Update Services (Actualizar servicios).

  11. (Opcional) Para la integración del router de registro puede añadir una configuración de direccionamiento de registro personalizada. Elija Enable FireLens integration (Habilitar integración de FireLens) y, a continuación, haga lo siguiente:

    1. Para Type (Tipo), elija el tipo de router de registro que va a utilizar.

    2. Para Image (Imagen), escriba la URI de imagen del contenedor del router de registro. Si elije el tipo de router de registro fluentbit, el campo Image (Imagen) se rellena previamente con la imagen de AWS for Fluent Bit. Para obtener más información, consulte Uso de AWS para la imagen de Fluent Bit.

    3. Seleccione Apply. Esto crea un nuevo contenedor del router de regeistro para la definición de la tarea con el nombre log_router y aplica la configuración que neceista. Si realiza algún cambio en los campos de integración del router de registro, elija Apply (Aplicar) de nuevo para actualizar el contenedor FireLens.

  12. (Opcional) Para definir los volúmenes de datos para su tarea, seleccione Add volume. Puede crear un volumen de montaje vinculado o de Docker. Para obtener más información, consulte Uso de volúmenes de datos en tareas.

    1. En Name (Nombre), escriba un nombre para el volumen. Se admiten hasta 255 letras (mayúsculas y minúsculas), números, guiones y caracteres de subrayado.

    2. (Opcional) Para crear un volumen de montaje vinculado, en Source path (Ruta de origen), especifique la ruta de la instancia de contenedor del host que se debe presentar al contenedor. Si se deja este campo en blanco, el demonio de Docker asigna una ruta de host. Si se especifica una ruta de origen, el volumen de datos persiste en esa ubicación de la instancia de contenedor de host hasta que la elimine manualmente. Si la ruta de origen no existe en el host de la instancia de contenedor, el demonio de Docker la crea. Si la ubicación existe, el contenido de la carpeta de la ruta de origen se exporta al contenedor.

    3. Para crear un volumen de Docker, seleccione Specify a volume driver (Especificar un controlador de volumen).

      1. En Driver (Controlador), seleccione el controlador de volumen de Docker que va a utilizar. El valor de controlador debe coincidir con el nombre del controlador proporcionado por Docker. Utilice docker plugin ls en su instancia de contenedor para recuperar el nombre del controlador.

      2. En Scope (Ámbito), elija la opción que determina el ciclo de vida del volumen de Docker. Los volúmenes de Docker con un ámbito de task se aprovisionan automáticamente cuando se inicia la tarea y se destruyen cuando la tarea se detiene. Los volúmenes de Docker cuyo ámbito es shared se conservan una vez detenida la tarea.

      3. Seleccione Enable auto-provisioning (Habilitar aprovisionamiento automático) para que el volumen de Docker se cree, si aún no existe. Esta opción solo está disponible para los volúmenes que especifican el ámbito shared.

      4. En Driver options (Opciones del controlador), especifique los valores de clave específicos del controlador que se van a usar.

      5. En Volume labels (Etiquetas del volumen), especifique los metadatos personalizados que se van a añadir al volumen de Docker.

  13. En la sección Tags (Etiquetas), especifique la clave y el valor de cada etiqueta que se va a asociar a la definición de tarea. Para obtener más información, consulte Etiquetado de los recursos de Amazon ECS.

  14. Seleccione Create.

Plantilla de definición de tarea

A continuación se muestra una plantilla de definición de tarea vacía. Utilice esta plantilla para crear la definición de la tarea, que posteriormente se puede pegar en el área de entrada JSON de la consola o guardar en un archivo y utilizarse con la opción de la AWS CLI --cli-input-json. Para obtener más información, consulte Parámetros de definición de tarea.

{ "family": "", "taskRoleArn": "", "executionRoleArn": "", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "", "image": "", "repositoryCredentials": { "credentialsParameter": "" }, "cpu": 0, "memory": 0, "memoryReservation": 0, "links": [ "" ], "portMappings": [ { "containerPort": 0, "hostPort": 0, "protocol": "tcp" } ], "essential": true, "entryPoint": [ "" ], "command": [ "" ], "environment": [ { "name": "", "value": "" } ], "environmentFiles": [ { "value": "", "type": "s3" } ], "mountPoints": [ { "sourceVolume": "", "containerPath": "", "readOnly": true } ], "volumesFrom": [ { "sourceContainer": "", "readOnly": true } ], "linuxParameters": { "capabilities": { "add": [ "" ], "drop": [ "" ] }, "devices": [ { "hostPath": "", "containerPath": "", "permissions": [ "read" ] } ], "initProcessEnabled": true, "sharedMemorySize": 0, "tmpfs": [ { "containerPath": "", "size": 0, "mountOptions": [ "" ] } ], "maxSwap": 0, "swappiness": 0 }, "secrets": [ { "name": "", "valueFrom": "" } ], "dependsOn": [ { "containerName": "", "condition": "HEALTHY" } ], "startTimeout": 0, "stopTimeout": 0, "hostname": "", "user": "", "workingDirectory": "", "disableNetworking": true, "privileged": true, "readonlyRootFilesystem": true, "dnsServers": [ "" ], "dnsSearchDomains": [ "" ], "extraHosts": [ { "hostname": "", "ipAddress": "" } ], "dockerSecurityOptions": [ "" ], "interactive": true, "pseudoTerminal": true, "dockerLabels": { "KeyName": "" }, "ulimits": [ { "name": "msgqueue", "softLimit": 0, "hardLimit": 0 } ], "logConfiguration": { "logDriver": "awslogs", "options": { "KeyName": "" }, "secretOptions": [ { "name": "", "valueFrom": "" } ] }, "healthCheck": { "command": [ "" ], "interval": 0, "timeout": 0, "retries": 0, "startPeriod": 0 }, "systemControls": [ { "namespace": "", "value": "" } ], "resourceRequirements": [ { "value": "", "type": "GPU" } ], "firelensConfiguration": { "type": "fluentd", "options": { "KeyName": "" } } } ], "volumes": [ { "name": "", "host": { "sourcePath": "" }, "dockerVolumeConfiguration": { "scope": "task", "autoprovision": true, "driver": "", "driverOpts": { "KeyName": "" }, "labels": { "KeyName": "" } }, "efsVolumeConfiguration": { "fileSystemId": "", "rootDirectory": "", "transitEncryption": "ENABLED", "transitEncryptionPort": 0, "authorizationConfig": { "accessPointId": "", "iam": "ENABLED" } } } ], "placementConstraints": [ { "type": "memberOf", "expression": "" } ], "requiresCompatibilities": [ "EC2" ], "cpu": "", "memory": "", "tags": [ { "key": "", "value": "" } ], "pidMode": "task", "ipcMode": "none", "proxyConfiguration": { "type": "APPMESH", "containerName": "", "properties": [ { "name": "", "value": "" } ] }, "inferenceAccelerators": [ { "deviceName": "", "deviceType": "" } ] }

Puede generar esta plantilla de definición de tarea utilizando el siguiente comando de la AWS CLI:

aws ecs register-task-definition --generate-cli-skeleton