Creación de una tarea de Amazon ECS para el tipo de lanzamiento de EC2 con la AWS CLI
Los siguientes pasos le ayudan a configurar un clúster, registrar una definición de tarea, ejecutar una tarea y llevar a cabo otros escenarios comunes en Amazon ECS con la AWS CLI. Utilice la versión más reciente de la AWS CLI. Para obtener más información acerca de cómo actualizar a la versión más reciente, consulte Instalación o actualización de la versión más reciente de la AWS CLI.
Temas
- Requisitos previos
- Paso 1: Crear un clúster
- Paso 2: Lanzar una instancia con la AMI de Amazon ECS
- Paso 3: Mostrar la lista de instancias de contenedor
- Paso 4: Describir la instancia de contenedor
- Paso 5: Registrar una definición de tareas
- Paso 6: Mostrar la lista de definiciones de tareas
- Paso 7: Ejecutar una tarea
- Paso 8: Mostrar la lista de tareas
- Paso 9: Describir la tarea en ejecución
Requisitos previos
En este tutorial se supone que los siguientes requisitos previos se han completado:
-
La última versión de la AWS CLI está instalada y configurada. Para obtener más información acerca de cómo instalar la AWS CLI o actualizarla, consulte Instalación o actualización de la versión más reciente de la AWS CLI.
-
Se han completado los pasos que se indican en Configuración para utilizar Amazon ECS.
-
Su usuario de AWS dispone de los permisos requeridos que se especifican en la política de IAM AmazonECS_FullAccess de ejemplo.
-
Tiene una VPC y un grupo de seguridad creados para utilizarlos. Para obtener más información, consulte Creación de una nube virtual privada.
-
(Opcional) AWS CloudShell es una herramienta que proporciona a los clientes una línea de comandos sin necesidad de crear su propia instancia de EC2. Para obtener más información, consulte ¿Qué es AWS CloudShell? en la Guía del usuario de AWS CloudShell.
Paso 1: Crear un clúster
De forma predeterminada, su cuenta recibe un clúster default
donde lanzar su primera instancia de contenedor.
nota
El beneficio de utilizar el clúster default
que se le facilita es que no tiene que especificar la opción --cluster
en los comandos siguientes. Si crea su propio clúster no predeterminado, tiene que especificar cluster_name
--cluster
para cada comando que pretenda utilizar con dicho clúster.cluster_name
Cree su propio clúster con un nombre único con el comando siguiente:
aws ecs create-cluster --cluster-name
MyCluster
Salida:
{
"cluster": {
"clusterName": "MyCluster",
"status": "ACTIVE",
"clusterArn": "arn:aws:ecs:region
:aws_account_id
:cluster/MyCluster"
}
}
Paso 2: Lanzar una instancia con la AMI de Amazon ECS
Debe tener una instancia de contenedor de Amazon ECS en su clúster antes de poder ejecutar tareas en el mismo. Si no dispone de instancias de contenedor en el clúster, consulte Lanzamiento de una instancia de contenedor de Linux de Amazon ECS para obtener más información.
Paso 3: Mostrar la lista de instancias de contenedor
A los pocos minutos de lanzar la instancia de contenedor, el agente de Amazon ECS registra la instancia con su clúster predeterminado. Puede mostrar la lista de las instancias de contenedor de un clúster ejecutando el comando siguiente:
aws ecs list-container-instances --cluster
default
Salida:
{
"containerInstanceArns": [
"arn:aws:ecs:us-east-1:aws_account_id
:container-instance/container_instance_ID
"
]
}
Paso 4: Describir la instancia de contenedor
Una vez que tenga el ARN o el ID de una instancia de contenedor, puede utilizar el comando describe-container-instances para obtener información valiosa sobre la instancia, como por ejemplo, los recursos registrados y restantes de CPU y de memoria.
aws ecs describe-container-instances --cluster
default
--container-instancescontainer_instance_ID
Salida:
{
"failures": [],
"containerInstances": [
{
"status": "ACTIVE",
"registeredResources": [
{
"integerValue": 1024,
"longValue": 0,
"type": "INTEGER",
"name": "CPU",
"doubleValue": 0.0
},
{
"integerValue": 995,
"longValue": 0,
"type": "INTEGER",
"name": "MEMORY",
"doubleValue": 0.0
},
{
"name": "PORTS",
"longValue": 0,
"doubleValue": 0.0,
"stringSetValue": [
"22",
"2376",
"2375",
"51678"
],
"type": "STRINGSET",
"integerValue": 0
},
{
"name": "PORTS_UDP",
"longValue": 0,
"doubleValue": 0.0,
"stringSetValue": [],
"type": "STRINGSET",
"integerValue": 0
}
],
"ec2InstanceId": "instance_id
",
"agentConnected": true,
"containerInstanceArn": "arn:aws:ecs:us-west-2:aws_account_id
:container-instance/container_instance_ID
",
"pendingTasksCount": 0,
"remainingResources": [
{
"integerValue": 1024,
"longValue": 0,
"type": "INTEGER",
"name": "CPU",
"doubleValue": 0.0
},
{
"integerValue": 995,
"longValue": 0,
"type": "INTEGER",
"name": "MEMORY",
"doubleValue": 0.0
},
{
"name": "PORTS",
"longValue": 0,
"doubleValue": 0.0,
"stringSetValue": [
"22",
"2376",
"2375",
"51678"
],
"type": "STRINGSET",
"integerValue": 0
},
{
"name": "PORTS_UDP",
"longValue": 0,
"doubleValue": 0.0,
"stringSetValue": [],
"type": "STRINGSET",
"integerValue": 0
}
],
"runningTasksCount": 0,
"attributes": [
{
"name": "com.amazonaws.ecs.capability.privileged-container"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.17"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
},
{
"name": "com.amazonaws.ecs.capability.logging-driver.json-file"
},
{
"name": "com.amazonaws.ecs.capability.logging-driver.syslog"
}
],
"versionInfo": {
"agentVersion": "1.5.0",
"agentHash": "b197edd",
"dockerVersion": "DockerVersion: 1.7.1"
}
}
]
}
También puede buscar el ID de instancia de Amazon EC2 que puede utilizar para monitorizar la instancia en la consola de Amazon EC2 o con el comando aws ec2 describe-instances --instance-id
instance_id
.
Paso 5: Registrar una definición de tareas
Antes de poder ejecutar una tarea en su clúster de ECS, debe registrar una definición de tareas. Las definiciones de tareas son listas de contenedores agrupadas. El ejemplo siguiente es una definición de tarea sencilla que utiliza una imagen busybox
de Docker Hub y duerme sencillamente durante 360 segundos. Para obtener más información acerca de los parámetros de definición de tareas disponibles, consulte Definiciones de tareas de Amazon ECS.
{ "containerDefinitions": [ { "name": "sleep", "image": "busybox", "cpu": 10, "command": [ "sleep", "360" ], "memory": 10, "essential": true } ], "family": "sleep360" }
El ejemplo anterior de JSON se puede transferir a la AWS CLI de dos formas: puede guardar la definición de tareas JSON como un archivo y transferirlo con la opción
. O bien, puede eludir las comillas en JSON y transferir las definiciones de contenedor JSON en la línea de comandos como en el ejemplo siguiente. Si elige transferir las definiciones de contenedor en la línea de comandos, el comando requiere adicionalmente un parámetro --cli-input-json
file://path_to_file.json
--family
que se utiliza para mantener varias versiones de la definición de tareas asociadas entre sí.
Para utilizar un archivo JSON para definiciones de contenedor:
aws ecs register-task-definition --cli-input-json
file://$HOME/tasks/sleep360.json
Para utilizar una cadena JSON para definiciones de contenedor:
aws ecs register-task-definition --family
sleep360
--container-definitions"[{\"name\":\"sleep\",\"image\":\"busybox\",\"cpu\":10,\"command\":[\"sleep\",\"360\"],\"memory\":10,\"essential\":true}]"
register-task-definition devuelve una descripción de la definición de tarea después de completar su registro.
{
"taskDefinition": {
"volumes": [],
"taskDefinitionArn": "arn:aws:ec2:us-east-1:aws_account_id
:task-definition/sleep360:1",
"containerDefinitions": [
{
"environment": [],
"name": "sleep",
"mountPoints": [],
"image": "busybox",
"cpu": 10,
"portMappings": [],
"command": [
"sleep",
"360"
],
"memory": 10,
"essential": true,
"volumesFrom": []
}
],
"family": "sleep360",
"revision": 1
}
}
Paso 6: Mostrar la lista de definiciones de tareas
Puede enumerar las definiciones de tareas para su cuenta en cualquier momento con el comando list-task-definitions. La salida de este comando muestra los valores family
y revision
, que puede utilizar conjuntamente al llamar a run-task o start-task.
aws ecs list-task-definitions
Salida:
{
"taskDefinitionArns": [
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/sleep300:1",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/sleep300:2",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/sleep360:1",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/wordpress:3",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/wordpress:4",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/wordpress:5",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/wordpress:6"
]
}
Paso 7: Ejecutar una tarea
Después de haber registrado una tarea para su cuenta y de haber lanzado una instancia de contenedor que se registra para su clúster, puede ejecutar la tarea registrada en su clúster. Para este ejemplo, coloque una instancia única de la definición de tarea sleep360:1
en su clúster predeterminado.
aws ecs run-task --cluster
default
--task-definitionsleep360:1
--count1
Salida:
{
"tasks": [
{
"taskArn": "arn:aws:ecs:us-east-1:aws_account_id
:task/task_ID
",
"overrides": {
"containerOverrides": [
{
"name": "sleep"
}
]
},
"lastStatus": "PENDING",
"containerInstanceArn": "arn:aws:ecs:us-east-1:aws_account_id
:container-instance/container_instance_ID
",
"clusterArn": "arn:aws:ecs:us-east-1:aws_account_id
:cluster/default",
"desiredStatus": "RUNNING",
"taskDefinitionArn": "arn:aws:ecs:us-east-1:aws_account_id
:task-definition/sleep360:1",
"containers": [
{
"containerArn": "arn:aws:ecs:us-east-1:aws_account_id
:container/container_ID
",
"taskArn": "arn:aws:ecs:us-east-1:aws_account_id
:task/task_ID
",
"lastStatus": "PENDING",
"name": "sleep"
}
]
}
]
}
Paso 8: Mostrar la lista de tareas
Muestra las tareas para el clúster. Debería ver la tarea que ejecutó en la sección anterior. Puede tomar el ID de tarea o el ARN completo que se devuelve desde este comando y utilizarlo para describir la tarea con posterioridad.
aws ecs list-tasks --cluster
default
Salida:
{
"taskArns": [
"arn:aws:ecs:us-east-1:aws_account_id
:task/task_ID
"
]
}
Paso 9: Describir la tarea en ejecución
Describa la tarea utilizado el ID de tarea recuperado antes para obtener información adicional sobre la tarea.
aws ecs describe-tasks --cluster
default
--tasktask_ID
Salida:
{
"failures": [],
"tasks": [
{
"taskArn": "arn:aws:ecs:us-east-1:aws_account_id
:task/task_ID
",
"overrides": {
"containerOverrides": [
{
"name": "sleep"
}
]
},
"lastStatus": "RUNNING",
"containerInstanceArn": "arn:aws:ecs:us-east-1:aws_account_id
:container-instance/container_instance_ID
",
"clusterArn": "arn:aws:ecs:us-east-1:aws_account_id
:cluster/default",
"desiredStatus": "RUNNING",
"taskDefinitionArn": "arn:aws:ecs:us-east-1:aws_account_id
:task-definition/sleep360:1",
"containers": [
{
"containerArn": "arn:aws:ecs:us-east-1:aws_account_id
:container/container_ID
",
"taskArn": "arn:aws:ecs:us-east-1:aws_account_id
:task/task_ID
",
"lastStatus": "RUNNING",
"name": "sleep",
"networkBindings": []
}
]
}
]
}