O Amazon Elastic Container Service (ECS) é um serviço de orquestração de contêineres totalmente gerenciado que simplifica a implantação, gerenciamento e escala de aplicativos de contêiner na AWS. Ele gerencia recipientes sem a necessidade de aprender Kubernetes. Com Fargate, o gerenciamento de recursos também pode ser sem servidor. Nesta postagem, você aprenderá como implantar uma imagem de contêiner construída do Amazon Elastic Container Registry (ECR) no Amazon Elastic Container Service (ECS) provisionado com Fargate. O objetivo é fazer o mínimo nu para obter um URL/IP de uma imagem de contêiner no ECR (imagem construída e empurrada Parte 1 Desta série), vamos ir!
Índice #
O que é o Amazon Elastic Container Service (ECS) #
Amazon ECS é um serviço de orquestração de contêineres totalmente gerenciado que ajuda a implantar, gerenciar e escalar com mais eficiência aplicativos de contêiner. Você pode provisionar o recurso subjacente nas instâncias Fargate ou Elastic Compute 2 (EC2). Com Fargatevocê pode usar o Amazon ECS para executar contêineres sem precisar gerenciar servidores ou clusters de instâncias do Amazon EC2.
Abaixo está um diagrama de como a Amazon ECS com Fargate se encaixa no pipeline com a AWS CodePipline, ECR e outros serviços, incluindo o Docker no Mix:
Você também pode usar a CLI da AWS para criar a definição de cluster, serviço e tarefa. Para este tutorial, no entanto, você usará a interface do usuário do AWS Console para simplificar as coisas.
Crie um cluster de serviço de contêiner elástico #
Primeiro, você deve criar um cluster Amazon Elastic Container Service (ECS) para implantar sua imagem do Docker. Para isso, depois de fazer login no seu console da AWS com um usuário com as permissões IAM corretas, procure ecs
na barra de pesquisa e clique no Clusters
link abaixo Top Features
Como visto abaixo:
Após os clusters listando a página da página, clique no Create Cluster
Botão laranja no canto superior direito da página:
Então, no formulário que carrega, digite o nome do cluster. Estou usando dev-cluster
como exemplo. No Infrastructure
Seção, certifique -se AWS Fargate (serverless)
é verificado, como segue:
Não altere nenhuma das outras configurações opcionais e role até o fundo do formulário, onde você verá o Create
Botão, clique nisso:
Pode levar alguns minutos para que o cluster seja criado e aparecerá na página de listagem dos clusters, como visto abaixo:
Hurra! Seu cluster ECS com Fargate foi criado. Na próxima seção, você criará uma definição de tarefa.
Crie uma definição de tarefa para o ECS #
Uma tarefa é do seu aplicativo Blueprint. Ele pode ser criado a partir de um arquivo JSON ou da interface da web da AWS. Existem muitos parâmetros para uma tarefa, mas você só se concentrará nos importantes para o escopo do tutorial.
Para criar uma definição de tarefa, clique em Task definitions
Como visto na captura de tela anterior, ele o levará ao Task definitions
página de listagem. Aqui, clique no Create new task definition
botão laranja e selecione Create new task definition
Como visto abaixo:
No formulário de definição de tarefas, coloque no Task definition family
como nodejs-apps
e verifique se você tem AWS Fargate
selecionado no tipo de lançamento de Infrastructure requirements
:
Na seção Tamanho da tarefa, selecione CPU como .5 vCPU
e memória como 1 GB
. Como estamos executando um aplicativo simples do Hello World Node.js, esses recursos seriam mais do que suficientes. Em seguida, selecione o Task role
e Task execution role
como ecsTaskExecutionRole
.
Agora role para baixo até o Container-1
seção e nomear o aplicativo como hello-world
para a parte da imagem da imagem, copie a imagem Uri que você empurrou Parte 1 desta série da página de registro de contêineres, como mostrado abaixo:
Em seguida, cole o URI no Image URI
campo, pois é uma tarefa de contêiner único; Este contêiner será Essential Container
– Sim. Na seção de mapeamento de portas, exponha a porta 3000 no Container port
campo com o Protocol
Sendo TCP, nomeie a porta nodejs-3000
e mantenha App Protocol
como HTTP conforme selecionado. Parece o seguinte:
Role para baixo até o Environment variables
e adicione uma variável de ambiente chamada PORT
com o valor 3000
:
Depois disso, role até a parte inferior do formulário e clique no Create
botão:
Você verá a definição de serviço foi criada:
Até agora, você só criou uma definição de serviço, não um serviço, portanto, nenhum contêiner está em execução. Na próxima seção, você criará um serviço com uma tarefa que exibirá o contêiner.
Crie um serviço ESC #
Para criar um serviço, clique Clusters
na captura de tela anterior e depois clique no nome do cluster, que deve ser dev-cluster
. Na página de detalhes do cluster, na Services
guia, clique no Create
Botão no canto inferior direito da página para criar um serviço:
No formulário Criar Serviço, selecione o Compute options
como Launch type
com FARGATE
como Launch type
e o Platform version
como LATEST
:
No Deployment Configuration
seção, Application type
seria pré-selecionado como Service
no Family
Campo, selecione In nodejs-apps
e selecione o Revision
ser LATEST
. Em seguida, nomeie o serviço hello-world-service
então deixe as outras configurações como é Replica
tem Desired tasks
de 1:
Em seguida, role para baixo até o Networking
Seção, esta é a parte importante. Expanda -o, verifique se o VPC está selecionado como está. No Subnets
Seção Clique Clear current selection
E do suspensão, escolha apenas uma sub-rede que tenha us-east-1a
.
No Security group
Seção, escolha Create new security group
. No Security group name
campo, digite port-3000-open-from-anywhere
. Da mesma forma, digite Open port 3000 from anywhere
no Security group description
campo.
Depois disso, no Inbound rule for security groups
parte, escolha TCP personalizado como Type
; No campo da faixa de portas, digite 3000,
e selecione ‘qualquer lugar’ para o campo de origem. Além disso, verifique se o Public IP
é Turned On
:
Depois disso, role até o fundo do formulário e clique Create
Para criar o serviço.
Levará algum tempo para o serviço aparecer, você pode clicar no nome do serviço hello-world-service
:
Então, no Tasks
Guia Na página de serviço, clique no ID da tarefa:
Na página de tarefas, clique no Networking
Guia e clique no open address
ao lado Public IP
Como mostrado abaixo:
Quando o IP abrir em um novo navegador de guia (se for Chrome, deixe a guia carregá -la com insegurança sem https), depois anexar :3000
para o IP como o aplicativo Hello World Node.js está definido para ser executado em 3000 com o PORT
Variável de ambiente, você deve ver o aplicativo executado imprimindo Hello World!
No navegador:
Parabéns, seu contêiner Node.js Hello World agora está sendo executado no ECS com Fargate. Você deve ler sobre a diferença entre um ESC Tarefa e um serviço.
Nota importante #
Este é um exemplo simples: em um aplicativo da vida real e pronto para produção, você teria adicionado um balanceador de carga e alguns registros DNS. Você também configuraria os grupos de segurança, sub -redes, VPCs e configurações de IAM com muito mais precisão.
Você teria escrito alguma forma de pipeline de CI/CD para implantar as novas alterações automaticamente. Você também teria adicionado algum monitoramento e log ao aplicativo.
Exclua o cluster, a definição de serviço e o registro de contêineres se você não precisar mais deles.
Conclusão #
Como recapitulação, você aprendeu sobre o Amazon Elastic Container Service (ECS) e como provisioná -lo com Fargate ter recursos sem servidor. Em seguida, este tutorial ensinou a você como criar uma definição de tarefa ECS. Depois disso, você implantou um serviço com os parâmetros corretos para expor o serviço por meio de um IP público sem usar um balanceador de carga. Continue atualizando seu conhecimento da AWS!