Como criar uma tarefa para instâncias gerenciadas do Amazon ECS com a AWS CLI
As etapas a seguir ajudarão você a configurar um cluster, criar um provedor de capacidade, registrar uma definição de tarefa, executar uma tarefa do Linux e realizar outros cenários comuns no Amazon ECS com instâncias gerenciadas do Amazon ECS usando 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.
nota
É possível usar endpoints de serviço de pilha dupla para interagir com o Amazon ECS via AWS AWS CLI, SDKs e API do Amazon ECS sobre IPv4 e IPv6. Para obter mais informações, consulte Usar endpoints de pilha dupla do Amazon ECS.
Tópicos
Pré-requisitos
Antes de começar o tutorial, conclua as seguintes etapas:
-
Você concluiu as etapas em Configurar o uso do Amazon ECS.
-
A versão mais recente da AWS CLI está instalada e configurada. Para obter mais informações sobre instalação ou atualização da AWS CLI, consulte Instalar ou atualizar para a última versão da AWS CLI no Guia do usuário da AWS Command Line Interface.
-
As etapas em Configuração para usar o Amazon ECS foram concluídas.
-
Os perfis do IAM necessários para instâncias gerenciadas do Amazon ECS. Isso inclui:
-
Perfil de infraestrutura: permite que o Amazon ECS faça chamadas para serviços da AWS em seu nome para gerenciar a infraestrutura de instâncias gerenciadas do Amazon ECS.
Para obter mais informações, consulte Perfil do IAM de infraestrutura do Amazon ECS.
-
Perfil de instância: fornece permissões para o agente de contêiner do Amazon ECS e para o daemon do Docker em execução nas instâncias gerenciadas.
O nome do perfil de instância deve incluir
ecsInstanceRolecomo prefixo para corresponder à açãoiam:PassRoleno perfil de infraestrutura.Para obter mais informações, consulte Perfil de instância de instâncias gerenciadas do Amazon ECS.
-
-
Você tem uma VPC e um grupo de segurança criados para uso. Este tutorial usa uma imagem de contêiner hospedada no Amazon ECR Public, de modo que suas instâncias devem ter acesso à internet. Para fornecer às suas instâncias uma rota para a internet, use uma das seguintes opções:
-
Use uma sub-rede privada com um gateway NAT que tenha um endereço IP elástico.
-
Use uma sub-rede pública e atribua um endereço IP público às instâncias.
Para obter mais informações, consulte Criar uma nuvem privada virtual.
Para obter informações sobre grupos de segurança e regras, consulte Grupos de segurança padrão para VPCs e Exemplo de regras no Guia do usuário da Amazon Virtual Private Cloud.
-
-
(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 é AWS CloudShell? no Guia do usuário do AWS CloudShell.
Etapa 1: criar um cluster
Por padrão, sua conta recebe um cluster default.
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-namemanaged-instances-cluster
Resultado:
{ "cluster": { "status": "ACTIVE", "defaultCapacityProviderStrategy": [], "statistics": [], "capacityProviders": [], "tags": [], "clusterName": "managed-instances-cluster", "settings": [ { "name": "containerInsights", "value": "disabled" } ], "registeredContainerInstancesCount": 0, "pendingTasksCount": 0, "runningTasksCount": 0, "activeServicesCount": 0, "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/managed-instances-cluster" } }
Etapa 2: criar um provedor de capacidade de instâncias gerenciadas do Amazon ECS
Para poder executar tarefas usando as instâncias gerenciadas do Amazon ECS, crie um provedor de capacidade que defina a configuração da infraestrutura. O provedor de capacidade especifica os perfis do IAM, a configuração de rede e outras definições para suas instâncias gerenciadas.
Crie um arquivo JSON com a configuração do provedor de capacidade. Substitua os valores dos espaços reservados por seus identificadores de recursos reais:
{ "name": "managed-instances-cp", "cluster": "managed-instances-cluster", "managedInstancesProvider": { "infrastructureRoleArn": "arn:aws:iam::aws_account_id:role/ecsInfrastructureRole", "instanceLaunchTemplate": { "ec2InstanceProfileArn": "arn:aws:iam::aws_account_id:instance-profile/ecsInstanceRole", "networkConfiguration": { "subnets": [ "subnet-abcdef01234567890", "subnet-1234567890abcdef0" ], "securityGroups": [ "sg-0123456789abcdef0" ] }, "storageConfiguration": { "storageSizeGiB": 100 }, "monitoring": "basic" } } }
Salve essa configuração como managed-instances-cp.json e crie o provedor de capacidade:
aws ecs create-capacity-provider --cli-input-json file://managed-instances-cp.json
O comando retorna uma descrição do provedor de capacidade após concluir sua criação.
Etapa 3: configurar a estratégia padrão do provedor de capacidade do cluster
Atualize o cluster para usar o provedor de capacidade de instâncias gerenciadas do Amazon ECS como estratégia padrão do provedor de capacidade. Isso permite que tarefas e serviços usem automaticamente as instâncias gerenciadas do Amazon ECS sem especificar explicitamente o provedor de capacidade.
Crie um arquivo JSON com a configuração do provedor de capacidade do cluster:
{ "cluster": "managed-instances-cluster", "capacityProviders": [ "managed-instances-cp" ], "defaultCapacityProviderStrategy": [ { "capacityProvider": "managed-instances-cp", "weight": 1 } ] }
Salve essa configuração como cluster-cp-strategy.json e atualize o cluster:
aws ecs put-cluster-capacity-providers --cli-input-json file://cluster-cp-strategy.json
Etapa 4: registrar uma definição de tarefa do Linux
Para executar uma tarefa no seu cluster, 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 cria um aplicativo web em PHP usando a imagem de contêiner httpd hospedada no Docker Hub. Para obter mais informações sobre os parâmetros de definição de tarefa disponíveis, consulte Parâmetros de definição de tarefa do Amazon ECS para o Fargate.
{ "family": "sample-managed-instances", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "managed-instances-app", "image": "public.ecr.aws/docker/library/httpd:latest", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ], "essential": true, "entryPoint": [ "sh", "-c" ], "command": [ "/bin/sh -c \"echo '<html><head><title>Amazon ECS Sample App</title><style>body {margin-top: 40px; background-color: #333;} </style></head><body><div style=color:white;text-align:center><h1>Amazon ECS Sample App</h1><h2>Congratulations!</h2><p>Your application is now running on a container in Amazon ECS using Amazon ECS Managed Instances.</p></div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ] } ], "requiresCompatibilities": [ "MANAGED_INSTANCES" ], "cpu": "256", "memory": "512" }
Salve a definição da tarefa JSON como um arquivo e passe-a com a opção --cli-input-json file://. path_to_file.json
Para usar um arquivo JSON para definições de contêiner:
aws ecs register-task-definition --cli-input-json file://$HOME/tasks/managed-instances-task.json
O comando register-task-definition retorna uma descrição da definição de tarefa depois de concluir o registro.
Etapa 5: 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
Resultado:
{ "taskDefinitionArns": [ "arn:aws:ecs:region:aws_account_id:task-definition/sample-managed-instances:1" ] }
Etapa 6: criar um serviço
Depois de você registrar uma tarefa para sua conta, poderá criar um serviço para a tarefa registrada no seu cluster. Para este exemplo, crie um serviço com uma instância da definição de tarefa sample-managed-instances:1 em execução no cluster. A tarefa requer uma rota para a internet, então há duas maneiras de conseguir isso. Uma maneira é usar uma sub-rede privada configurada com um gateway NAT com um endereço IP elástico em uma sub-rede pública. Outra maneira é usar uma sub-rede pública e atribuir um endereço IP público à tarefa. Fornecemos os dois exemplos abaixo.
Exemplo usando uma sub-rede privada:
aws ecs create-service --clustermanaged-instances-cluster--service-namemanaged-instances-service--task-definition sample-managed-instances:1 --desired-count 1 --network-configuration "awsvpcConfiguration={subnets=[subnet-abcd1234],securityGroups=[sg-abcd1234]}"
Exemplo usando uma sub-rede pública:
aws ecs create-service --clustermanaged-instances-cluster--service-namemanaged-instances-service--task-definition sample-managed-instances:1 --desired-count 1 --network-configuration "awsvpcConfiguration={subnets=[subnet-abcd1234],securityGroups=[sg-abcd1234],assignPublicIp=ENABLED}"
O comando create-service retorna uma descrição do serviço depois de concluir sua criação.
Etapa 7: listar serviços
Liste os serviços para o seu cluster. Você deve ver o serviço que criou na seção anterior. É possível utilizar o nome do serviço ou o ARN completo retornado por esse comando e usá-lo para descrever o serviço depois.
aws ecs list-services --cluster managed-instances-cluster
Resultado:
{ "serviceArns": [ "arn:aws:ecs:region:aws_account_id:service/managed-instances-cluster/managed-instances-service" ] }
Etapa 8: descrever o serviço em execução
Descreva o serviço usando o nome do serviço recuperado anteriormente para obter mais informações sobre a tarefa.
aws ecs describe-services --cluster managed-instances-cluster --services managed-instances-service
Se for bem-sucedido, isso retornará uma descrição das falhas de serviço e os serviços. Por exemplo, na seção services, você encontrará informações sobre implantações, como o status das tarefas como pendentes ou em execução. Também é possível encontrar informações sobre a definição da tarefa, a configuração da rede e os eventos com time stamp. Na seção de falhas, você encontrará informações sobre falhas, se houver, associadas à chamada.
O resultado mostrará que o serviço está usando o provedor de capacidade de instâncias gerenciadas do Amazon ECS:
{ "services": [ { "capacityProviderStrategy": [ { "capacityProvider": "managed-instances-cp", "weight": 1, "base": 0 } ], "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "subnet-abcd1234" ], "securityGroups": [ "sg-abcd1234" ], "assignPublicIp": "ENABLED" } }, "enableECSManagedTags": false, "loadBalancers": [], "deploymentController": { "type": "ECS" }, "desiredCount": 1, "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/managed-instances-cluster", "serviceArn": "arn:aws:ecs:region:aws_account_id:service/managed-instances-service", "serviceName": "managed-instances-service", "taskDefinition": "arn:aws:ecs:region:aws_account_id:task-definition/sample-managed-instances:1" } ], "failures": [] }
Etapa 9: testar
Para testar sua implantação, você precisa encontrar o endereço IP público da instância gerenciada que executa sua tarefa.
Tarefa de teste implantada usando sub-rede pública
Primeiramente, obtenha o ARN da tarefa do seu serviço:
aws ecs list-tasks --cluster managed-instances-cluster --service managed-instances-service
A saída contém o ARN da tarefa:
{ "taskArns": [ "arn:aws:ecs:region:aws_account_id:task/managed-instances-cluster/EXAMPLE" ] }
Descreva a tarefa para obter o ARN da instância de contêiner. Use o ARN da tarefa para o parâmetro tasks:
aws ecs describe-tasks --cluster managed-instances-cluster --tasks arn:aws:ecs:region:aws_account_id:task/managed-instances-cluster/EXAMPLE
A saída mostra que a tarefa está sendo executada nas instâncias gerenciadas do Amazon ECS e inclui o ARN da instância de contêiner:
{ "tasks": [ { "launchType": "MANAGED_INSTANCES", "capacityProviderName": "managed-instances-cp", "containerInstanceArn": "arn:aws:ecs:region:aws_account_id:container-instance/managed-instances-cluster/CONTAINER_INSTANCE_ID", "taskArn": "arn:aws:ecs:region:aws_account_id:task/managed-instances-cluster/EXAMPLE", "taskDefinitionArn": "arn:aws:ecs:region:aws_account_id:task-definition/sample-managed-instances:1" } ] }
Descreva a instância de contêiner para obter o ID da instância do EC2:
aws ecs describe-container-instances --cluster managed-instances-cluster --container-instancesCONTAINER_INSTANCE_ID
A saída inclui o ID da instância do EC2:
{ "containerInstances": [ { "ec2InstanceId": "i-1234567890abcdef0", "capacityProviderName": "managed-instances-cp", "containerInstanceArn": "arn:aws:ecs:region:aws_account_id:container-instance/managed-instances-cluster/CONTAINER_INSTANCE_ID" } ] }
Descreva a instância do EC2 para obter o endereço IP público:
aws ec2 describe-instances --instance-idsi-1234567890abcdef0
O endereço IP público está na saída:
{ "Reservations": [ { "Instances": [ { "PublicIpAddress": "198.51.100.2", "InstanceId": "i-1234567890abcdef0" } ] } ] }
Insira o endereço IP público no seu navegador da web e verá uma página que exibe a aplicação de exemplo Amazon ECS em execução nas instâncias gerenciadas do Amazon ECS..
Tarefa de teste implantada usando sub-rede privada
Para tarefas implantadas em sub-redes privadas, você pode usar o Amazon ECS Exec para se conectar ao contêiner e testar a implantação de dentro da instância. Siga as mesmas etapas acima para obter o ARN da tarefa e, em seguida, use o ECS Exec:
aws ecs execute-command --cluster managed-instances-cluster \ --task arn:aws:ecs:region:aws_account_id:task/managed-instances-cluster/EXAMPLE\ --container managed-instances-app \ --interactive \ --command "/bin/sh"
Depois que o shell interativo estiver em execução, você poderá testar o servidor web:
curl localhost
Você deve ver o equivalente em HTML da página da Web da aplicação de amostra do Amazon ECS.
Etapa 10: limpar
Ao concluir este tutorial, você deve limpar os recursos associados para evitar cobranças por recursos não utilizados.
Exclua o serviço de :
aws ecs delete-service --cluster managed-instances-cluster --service managed-instances-service --force
Aguarde até que o serviço seja excluído e todas as tarefas interrompidas; em seguida, exclua o provedor de capacidade:
aws ecs delete-capacity-provider --capacity-provider managed-instances-cp
Exclua o cluster:
aws ecs delete-cluster --cluster managed-instances-cluster
nota
As instâncias gerenciadas são automaticamente encerradas quando o provedor de capacidade é excluído. Não é necessário encerrar manualmente as instâncias do EC2.