Tutorial: Criar um cluster com uma tarefa do Fargate usando a CLI do Amazon ECS - Serviço Amazon Elastic Container

Tutorial: Criar um cluster com uma tarefa do Fargate usando a CLI do Amazon ECS

Este tutorial mostra como configurar um cluster e implantar um serviço com tarefas usando o tipo de inicialização do Fargate.

Pré-requisitos

Conclua os seguintes pré-requisitos:

  • Configure uma conta da AWS.

  • Instale a CLI do Amazon ECS. Para mais informações, consulte Instalar a CLI do Amazon ECS.

  • Instale e configure a AWS CLI. Para obter mais informações, consulte Interface da linha de comando da AWS.

  • Opcional: AWS CloudShell é uma ferramenta que oferece aos clientes uma linha de comando sem precisar criar sua 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 a função do IAM de execução de tarefas

O agente de contêiner do Amazon ECS faz chamadas para APIs da AWS em seu nome, portanto, são necessárias uma política e uma função do IAM para o serviço saber que o agente pertence a você. Essa função do IAM é denominada função do IAM de execução de tarefa. Se você já tiver uma função de execução de tarefa criada para usar, ignore esta etapa. Para mais informações, consulte Função do IAM de execução de tarefas do Amazon ECS.

Para criar a função do IAM de execução de tarefa usando a AWS CLI

  1. Crie um arquivo denominado task-execution-assume-role.json com o conteúdo a seguir.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. Criar a função de execução da tarefa:

    aws iam --region us-west-2 create-role --role-name ecsTaskExecutionRole --assume-role-policy-document file://task-execution-assume-role.json
  3. Anexe a política de função de execução de tarefa:

    aws iam --region us-west-2 attach-role-policy --role-name ecsTaskExecutionRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy

Etapa 2: configurar a CLI do Amazon ECS

A CLI do Amazon ECS precisa de credenciais para fazer solicitações de API em seu nome. Ela pode extrair credenciais das variáveis de ambiente, de um perfil da AWS ou de um perfil do Amazon ECS. Para mais informações, consulte Configurar a CLI do Amazon ECS.

Para criar uma configuração da CLI do Amazon ECS

  1. Crie uma configuração de cluster para definir a região da AWS a ser usada, os prefixos de criação de recursos e o nome do cluster a ser usado com a CLI do Amazon ECS:

    ecs-cli configure --cluster tutorial --default-launch-type FARGATE --config-name tutorial --region us-west-2
  2. Crie um perfil de CLI usando a chave de acesso e a chave secreta:

    ecs-cli configure profile --access-key AWS_ACCESS_KEY_ID --secret-key AWS_SECRET_ACCESS_KEY --profile-name tutorial-profile

Etapa 3: Criar um cluster e configurar o grupo de segurança

Para criar um cluster de ECS e grupo de segurança

  1. Crie um cluster do Amazon ECS com o comando ecs-cli up. Como você especificou o Fargate como seu tipo de inicialização padrão na configuração do cluster, esse comando criará um cluster vazio e uma VPC configurada com duas sub-redes públicas.

    ecs-cli up --cluster-config tutorial --ecs-profile tutorial-profile

    Este comando pode levar alguns minutos para se concluído à medida que seus recursos são criados. A saída desse comando contém os IDs da sub-rede e da VPC que são criados.

    nota

    Anote esses IDs, pois você precisará deles nas etapas a seguir.

  2. Usando a AWS CLI, recupere o ID do grupo de segurança padrão para a VPC. Use o ID da VPC da saída anterior:

    aws ec2 describe-security-groups --filters Name=vpc-id,Values=VPC_ID --region us-west-2

    A saída desse comando contém o ID do grupo de segurança, que será usado na próxima etapa.

  3. Usando a AWS CLI, adicione uma regra de grupo de segurança para permitir acesso de entrada na porta 80:

    aws ec2 authorize-security-group-ingress --group-id security_group_id --protocol tcp --port 80 --cidr 0.0.0.0/0 --region us-west-2

Etapa 4: Criar um arquivo de composição

Para esta etapa, crie um arquivo de composição do Docker simples que crie um aplicativo web PHP. Nesse momento, a CLI do Amazon ECS é compatível com a Sintaxe do arquivo de composição do Docker versões 1, 2 e 3. A versão especificada no arquivo Compose deve ser a string "1", "1.0", "2", "2.0", "3" ou "3.0". As versões secundárias do Docker Compose não são compatíveis.

Veja o arquivo de composição, que você pode chamar de docker-compose.yml. O contêiner web expõe a porta 80 para tráfego de entrada para o servidor da web. Ele também configura logs de contêiner para acessar o grupo de logs do CloudWatch criado anteriormente. Essa é a prática recomendada para tarefas do Fargate.

version: '3' services: web: image: amazon/amazon-ecs-sample ports: - "80:80" logging: driver: awslogs options: awslogs-group: tutorial awslogs-region: us-west-2 awslogs-stream-prefix: web
nota

Se sua conta já contiver um grupo de logs do CloudWatch Logs denominado tutorial na região us-west-2, escolha um nome exclusivo para que a CLI do ECS crie um novo grupo de logs para este tutorial.

Além de informações de composição do Docker, há alguns parâmetros específicos do Amazon ECS que você precisa especificar para o serviço. Usando os IDs da VPC, da sub-rede e do grupo de segurança da etapa anterior, crie um arquivo chamado ecs-params.yml com o seguinte conteúdo:

version: 1 task_definition: task_execution_role: ecsTaskExecutionRole ecs_network_mode: awsvpc os_family: Linux task_size: mem_limit: 0.5GB cpu_limit: 256 run_params: network_configuration: awsvpc_configuration: subnets: - "subnet ID 1" - "subnet ID 2" security_groups: - "security group ID" assign_public_ip: ENABLED

Etapa 5: Implantar o arquivo de composição em um cluster

Depois de criar o arquivo de composição, você poderá implantá-lo no cluster com ecs-cli compose service up. Por padrão, o comando procura arquivos chamados docker-compose.yml e ecs-params.yml no diretório atual; você pode especificar outro arquivo de composição do docker com a opção --file, e um arquivo ECS Params diferente com a opção --ecs-params. Por padrão, os recursos criados por esse comando têm o diretório atual no título, mas você pode substituí-lo pela opção --project-name. A opção --create-log-groups cria os grupos de logs do CloudWatch para os logs de contêiner.

ecs-cli compose --project-name tutorial service up --create-log-groups --cluster-config tutorial --ecs-profile tutorial-profile

Etapa 6: Visualizar os contêineres em execução em um cluster

Depois de implantar o arquivo de composição, você verá os contêineres em execução no serviço com ecs-cli compose service ps.

ecs-cli compose --project-name tutorial service ps --cluster-config tutorial --ecs-profile tutorial-profile

Resultado:

Name                                           State    Ports                     TaskDefinition  Health
tutorial/0c2862e6e39e4eff92ca3e4f843c5b9a/web  RUNNING  34.222.202.55:80->80/tcp  tutorial:1      UNKNOWN

No exemplo acima, você verá o contêiner web e de seu arquivo de composição, e também o endereço IP e a porta do servidor web. Se você colocar esse endereço em um navegador web, deverá visualizar o aplicativo web PHP. Além disso, na saída está o valor de task-id do contêiner. Copie o ID da tarefa; você poderá usá-lo na próxima etapa.

Etapa 7: Visualizar os logs do contêiner

Visualize os logs da tarefa:

ecs-cli logs --task-id 0c2862e6e39e4eff92ca3e4f843c5b9a --follow --cluster-config tutorial --ecs-profile tutorial-profile
nota

A opção --follow pede à CLI do Amazon ECS para pesquisar logs continuamente.

Etapa 8: Dimensionar as tarefas no cluster

Você pode escalar a contagem de tarefas para aumentar o número de instâncias do seu aplicativo com ecs-cli compose service scale.

ecs-cli compose --project-name tutorial service scale 2 --cluster-config tutorial --ecs-profile tutorial-profile

Neste exemplo, a contagem em execução do aplicativo é aumentada para dois.

ecs-cli compose --project-name tutorial service ps --cluster-config tutorial --ecs-profile tutorial-profile

Resultado:

Name                                           State    Ports                      TaskDefinition  Health
tutorial/0c2862e6e39e4eff92ca3e4f843c5b9a/web  RUNNING  34.222.202.55:80->80/tcp   tutorial:1      UNKNOWN
tutorial/d9fbbc931d2e47ae928fcf433041648f/web  RUNNING  34.220.230.191:80->80/tcp  tutorial:1      UNKNOWN

Etapa 9: visualizar seu aplicativo Web

Insira o endereço IP para a tarefa no navegador da web. Feito isso, você deverá ver uma página da web que exibe o aplicativo web Simple PHP App.

Etapa 10: Limpeza

Ao concluir este tutorial, você deve limpar seus recursos para que não incorram em quaisquer cobranças adicionais. Primeiro, exclua o serviço para que pare os contêineres existentes e não tente executar nenhuma outra tarefa.

ecs-cli compose --project-name tutorial service down --cluster-config tutorial --ecs-profile tutorial-profile

Agora, deixe seu cluster inativo, o que limpa os recursos que você criou anteriormente com o comando ecs-cli up.

ecs-cli down --force --cluster-config tutorial --ecs-profile tutorial-profile