Criar uma tarefa do Amazon ECS para o tipo de inicialização do EC2 com a AWS CLI - Amazon Elastic Container Service

Criar uma tarefa do Amazon ECS para o tipo de inicialização do EC2 com a AWS CLI

As etapas a seguir ajudarão você a configurar um cluster, registrar uma definição de tarefa, executar uma tarefa e realizar outros cenários comuns no Amazon ECS com a AWS CLI. Use a versão mais recente da AWS CLI. Para obter informações sobre como atualizar para a versão mais recente Consulte instalar ou atualizar para a versão mais recente da AWS CLI.

Pré-requisitos

Este tutorial pressupõe que os seguintes pré-requisitos foram concluídos:

Etapa 1: criar um cluster

Por padrão, a conta recebe um cluster default quando você ativa a primeira instância de contêiner.

nota

O benefício de usar o cluster default fornecido é que você não precisa especificar a opção --cluster cluster_name nos comandos subsequentes. Caso você crie o próprio cluster, não padrão, é necessário especificar --cluster cluster_name para cada comando que deseja usar com esse cluster.

Crie o próprio cluster com um nome exclusivo usando o seguinte comando:

aws ecs create-cluster --cluster-name MyCluster

Saída:

{ "cluster": { "clusterName": "MyCluster", "status": "ACTIVE", "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/MyCluster" } }

Etapa 2: iniciar uma instância com o AMI do Amazon ECS

Você deve ter uma instância de contêiner do Amazon ECS no cluster para executar tarefas nele. Caso você não tenha instâncias de contêiner em seu cluster, consulte Iniciar uma instância de contêiner do Linux do Amazon ECS para obter mais informações.

Etapa 3: listar instâncias de contêiner

Depois de alguns minutos do início de sua instância de contêiner, o agente do Amazon ECS registra a instância junto ao cluster padrão. É possível listar as instâncias de contêiner em um cluster executando o comando a seguir:

aws ecs list-container-instances --cluster default

Saída:

{ "containerInstanceArns": [ "arn:aws:ecs:us-east-1:aws_account_id:container-instance/container_instance_ID" ] }

Etapa 4: descrever a instância de contêiner

Depois que tiver o ARN ou o ID de uma instância de contêiner, será possível usar o comando describe-container-instances para obter informações úteis sobre a instância, como recursos de memória e CPU restantes e registrados.

aws ecs describe-container-instances --cluster default --container-instances container_instance_ID

Saída:

{ "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" } } ] }

Também é possível encontrar o ID da instância do Amazon EC2 que é possível usar para monitorar a instância no console do Amazon ECS ou com o comando aws ec2 describe-instances --instance-id instance_id.

Etapa 5: registrar uma definição de tarefa

Para executar uma tarefa no cluster do ECS, você deve registrar uma definição de tarefa. As definições de tarefa são listas de contêineres agrupados. O exemplo a seguir é uma definição de tarefa simples que usa uma imagem busybox do Docker Hub e simplesmente hiberna por 360 segundos. Para obter mais informações sobre os parâmetros de definição de tarefa disponíveis, consulte Definições de tarefa do Amazon ECS.

{ "containerDefinitions": [ { "name": "sleep", "image": "busybox", "cpu": 10, "command": [ "sleep", "360" ], "memory": 10, "essential": true } ], "family": "sleep360" }

O exemplo de JSON acima pode ser passado para a AWS CLI de duas maneiras: é possível salvar o JSON de definição de tarefa como um arquivo e passá-lo com a opção --cli-input-json file://path_to_file.json. Ou, você pode ignorar as aspas no JSON e passar as definições do contêiner do JSON na linha de comando, como no exemplo abaixo. Caso você opte por passar as definições de contêiner na linha de comando, o comando ainda exige um parâmetro --family usado para manter várias versões da definição de tarefa associadas entre si.

Para usar um arquivo JSON para definições de contêiner:

aws ecs register-task-definition --cli-input-json file://$HOME/tasks/sleep360.json

Para usar uma string JSON para definições de contêiner:

aws ecs register-task-definition --family sleep360 --container-definitions "[{\"name\":\"sleep\",\"image\":\"busybox\",\"cpu\":10,\"command\":[\"sleep\",\"360\"],\"memory\":10,\"essential\":true}]"

O register-task-definition retornará uma descrição da definição de tarefa depois de concluir o 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 } }

Etapa 6: listar definições de tarefa

É possível listar as definições de tarefa para a conta a qualquer momento com o comando list-task-definitions. A saída desse comando mostra os valores family e revision valores que você pode usar juntos ao chamar run-task ou start-task.

aws ecs list-task-definitions

Saída:

{ "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" ] }

Etapa 7: executar uma tarefa

Depois que tiver registrado uma tarefa para a conta e executado uma instância de contêiner registrada em seu cluster, será possível executar a tarefa registrada no cluster. Neste exemplo, você coloca uma única instância da definição de tarefa sleep360:1 no cluster padrão.

aws ecs run-task --cluster default --task-definition sleep360:1 --count 1

Saída:

{ "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" } ] } ] }

Etapa 8: listar tarefas

Liste as tarefas para o cluster. Você deve ver a tarefa que executou na seção anterior. É possível utilizar o ID da tarefa ou o ARN completo retornado por esse comando e usá-lo para descrever a tarefa depois.

aws ecs list-tasks --cluster default

Saída:

{ "taskArns": [ "arn:aws:ecs:us-east-1:aws_account_id:task/task_ID" ] }

Etapa 9: descrever a tarefa em execução

Descreva a tarefa usando o ID da tarefa recuperado anteriormente para obter mais informações sobre a tarefa.

aws ecs describe-tasks --cluster default --task task_ID

Saída:

{ "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": [] } ] } ] }