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.
Tópicos
Pré-requisitos
Este tutorial pressupõe que os seguintes pré-requisitos foram concluídos:
-
A versão mais recente da AWS CLI está instalada e configurada. Para obter mais informações sobre como instalar ou atualizar sua AWS CLI, consulte Instalar ou atualizar para a versão mais recente da AWS CLI.
-
As etapas em Configuração para usar o Amazon ECS foram concluídas.
-
Seu usuário da AWS tem as permissões necessárias especificadas no exemplo de política AmazonECS_FullAccess do IAM.
-
Você tem uma VPC e um grupo de segurança criados para uso. Para ter mais informações, consulte Criar uma nuvem privada virtual.
-
(Opcional) O AWS CloudShell é uma ferramenta que oferece aos clientes uma linha de comando sem precisar criar a própria instância do EC2. Para obter mais informações, consulte O que é o AWS CloudShell? no Guia do usuário do AWS CloudShell.
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
nos comandos subsequentes. Caso você crie o próprio cluster, não padrão, é necessário especificar cluster_name
--cluster
para cada comando que deseja usar com esse cluster.cluster_name
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-instancescontainer_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
. 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 --cli-input-json
file://path_to_file.json
--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-definitionsleep360:1
--count1
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
--tasktask_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": []
}
]
}
]
}