Módulo 1: Contêineres e computação sem servidor na AWS
MÓDULO DE APRENDIZAGEM
Visão geral
O AWS AppRunner é um serviço de computação da AWS totalmente gerenciado que facilita aos desenvolvedores a implantação rápida de aplicações Web e APIs em escala e sem a necessidade de experiência prévia com a infraestrutura.
Objetivos do aprendizado
Neste módulo, você irá:
- Saber mais sobre contêineres e tecnologia sem servidor.
- Pesquisar os serviços de computação da AWS que oferecem suporte a contêineres e a tecnologia sem servidor.
- Entender como determinar quando o AWS App Runner é adequado para suas workloads.
Dois temas populares atualmente são contêineres e tecnologia sem servidor. Os contêineres facilitam o gerenciamento da infraestrutura subjacente, seja on-premises ou na nuvem. Atualmente, quase 80% de todos os contêineres na nuvem são executados na AWS. A tecnologia sem servidor gerencia a infraestrutura para você, permitindo que sua equipe concentre sua atenção nas prioridades dos negócios. A AWS fornece vários serviços para os contêineres e a tecnologia sem servidor, e a escolha do serviço adequado para seu caso de uso pode ser determinada após examinar algumas considerações importantes.
Tempo para a conclusão
30 minutos
Contêineres
Não seria bom empacotar sua aplicação, junto com a configuração, o runtime e as dependências, tudo em um pacote organizado? Os contêineres proporcionam uma forma padrão de empacotar o código, as configurações e as dependências de sua aplicação em um único objeto. Eles compartilham um sistema operacional instalado no servidor e são executados como processos isolados de recursos. Isso permite fazer implantações rápidas, confiáveis e consistentes, independentemente do ambiente.
Contêineres versus Máquinas virtuais
Para entender os contêineres, vamos primeiro falar sobre máquinas virtuais para que possamos compará-los. Na época em que os servidores físicos eram dominantes, um servidor era um ambiente singular. Ele vinha com uma certa quantidade de memória, armazenamento e hardware de rede, executava um sistema operacional específico e atendia a uma organização. Então surgiu a virtualização, que tornou possível emular um computador em software. Agora, o “servidor” pode ser uma máquina virtual (VM), adaptada ao sistema operacional e aos recursos que a organização e as aplicações exigem. Uma camada de software chamada hipervisor cria, executa e gerencia VMs e as relaciona ao hardware físico, com alta eficiência. O servidor físico pode executar várias VMs para vários locatários, o que reduz os custos gerais de infraestrutura. Atualmente, as VMs são dominantes na empresa e fundamentais para a computação em nuvem.
Os contêineres oferecem alguns dos mesmos benefícios das VMs, mas são mais portáteis e eficientes. Os contêineres são uma forma de empacotar uma aplicação junto com suas dependências, bibliotecas e configurações. Vários contêineres compartilham um sistema operacional host e são executados como processos isolados. Enquanto as VMs virtualizam o hardware e geralmente são medidas em gigabytes, os contêineres virtualizam o sistema operacional e são normalmente medidos em megabytes. Isso os torna leves, portáteis e eficientes. Os contêineres são adequados principalmente para os microsserviços, com uma filosofia compartilhada de componentes de software leves e independentes.
Mais do que as VMs, os contêineres mudam a forma como os desenvolvedores trabalham porque são projetados como uma unidade de implantação de software. Os desenvolvedores criam contêineres e os implantam como parte do seu trabalho. Os contêineres e as máquinas virtuais não são uma escolha do tipo “um ou outro”. Muitas vezes você pode usá-los juntos, oferecendo o melhor dos dois universos. Os muitos serviços da AWS que oferecem suporte a contêineres os executam em máquinas virtuais.
Os contêineres compartilham um sistema operacional instalado no servidor e são executados como processos isolados de recursos, garantindo implantações rápidas, confiáveis e consistentes, independentemente do ambiente. Quer você implante localmente em seu laptop ou na produção, a experiência será a mesma, com exceção dos segredos e das configurações do ambiente.
Referência: Contêineres da AWS
Tipos de contêineres
Plataforma Docker
O Docker é uma plataforma de software que permite a criação, o teste e a implantação de aplicações rapidamente. O Docker define um contêiner como “um processo em sandbox na sua máquina que está isolado de todos os outros processos na máquina host. Esse isolamento aproveita os namespaces e os grupos de controle do kernel, atributos que estão no Linux há muito tempo. O Docker trabalhou para tornar esses recursos acessíveis e fáceis de usar.”
Os benefícios de usar o Docker incluem o envio mais rápido do código, a padronização das operações da aplicação, a transferência perfeita do código e a economia por meio da utilização eficiente dos recursos. Em média, os usuários do Docker disponibilizam software com uma frequência sete vezes maior do que os usuários de outras tecnologias. Você pode padronizar suas operações para implantação, solução de problemas e reversão de contêineres. Passar das máquinas locais para a produção é um processo simples e direto. Você pode executar mais código em cada servidor com contêineres, economizando ainda mais.
As aplicações .NET modernas (criadas em .NET Core 3.1 ou .NET 5+) podem ser executadas no Linux e são compatíveis com contêineres Docker.
Os serviços da AWS que oferecem suporte a contêineres Docker incluem AWS App Runner, Amazon Elastic Container Service (ECS) e Amazon Elastic Kubernetes Service (EKS), AWS Fargate on ECS ou EKS e AWS Lambda.
Referência: AWS Docker
Contêineres Linux
Os contêineres Linux do Docker são executados em hosts Linux. As aplicações .NET modernas (criadas em .NET Core 3.1 ou .NET 5+) podem ser executadas em contêineres Linux, mas não em aplicações legadas do .NET Framework, que exigem o Windows.
Os serviços da AWS que oferecem suporte a contêineres Linux incluem AWS App Runner, Amazon Elastic Container Service (ECS), Amazon Elastic Kubernetes Service (EKS), AWS Fargate no ECS ou EKS e AWS Lambda.
Contêineres Windows
Os contêineres Windows oferecem suporte aos sistemas operacionais Microsoft Windows. Os contêineres Windows não podem ser executados em instâncias de contêiner do Linux, e vice-versa.
Os serviços da AWS que oferecem suporte a contêineres Windows incluem Amazon Elastic Container Service (ECS), Amazon ECS no AWS Fargate e Amazon Kubernetes Service (EKS). O AWS App Runner não oferece suporte a contêineres Windows.
Referência: contêineres Windows do Amazon EC2
Benefícios dos contêineres
Os contêineres oferecem muitos benefícios tangíveis:
Leveza
Os contêineres são pacotes de software leves. Eles são significativamente menores do que as máquinas virtuais porque não incluem uma imagem de sistema operacional convidado. Em vez disso, os contêineres compartilham um sistema operacional com o host. Por esse motivo, os contêineres geralmente iniciam mais rápido do que as máquinas virtuais.
Padronizado e portátil
Os contêineres fornecem um ambiente de software consistente e portátil. Isso permite padronizar as operações de implantação, investigação de problemas e reversão.
Mova-se sem problemas
Os contêineres se movem facilmente. Você pode mover aplicações conteinerizadas de máquinas locais para ambientes de produção e de ambientes on-premises para a nuvem. Os contêineres podem simplificar a implementação de pipelines de CI/CD devido aos seus atributos de consistência e controle de versão.
Envie mais rápido
O efeito combinado de contêineres leves e portáteis que podem ser movidos sem problemas é a agilidade. Você pode desenvolver mais rapidamente ao trabalhar com contêineres, pois eles eliminam o tempo gasto em dependências de software, na configuração de ambientes e na solução de problemas de diferenças nos ambientes. Por exemplo, em média, os usuários do Docker disponibilizam software com uma frequência sete vezes maior do que os usuários de outras tecnologias.
Economize
Os contêineres permitem que você execute mais código em cada instância do servidor. Isso melhora a utilização e proporciona economias.
Referências: AWS | O que é Docker?, AWS | Contêineres
Benefícios dos contêineres na AWS
A AWS é um destino de nuvem apreciado para contêineres. Atualmente, quase 80% de todos os contêineres na nuvem são executados na AWS. Além dos benefícios inerentes aos contêineres, você também obtém esses benefícios ao hospedar contêineres na AWS.
Seguro
A AWS oferece mais de 200 serviços e atributos essenciais para segurança, conformidade e governança. A AWS executa os contêineres com forte isolamento de segurança e as atualizações de segurança mais recentes. Você pode definir permissões de segurança granulares para cada contêiner.
Confiável
A AWS fornece uma infraestrutura global que inclui 69 zonas de disponibilidade em 22 regiões, permitindo que você execute contêineres em todo o mundo. Todos os serviços de contêiner da AWS têm um Acordo de Nível de Serviço (SLA).
Opções
A AWS oferece uma ampla variedade de serviços de contêiner, incluindo serviços gerenciados e sem servidor. Isso inclui o serviço Amazon Elastic Container Registry (ECR), o Amazon Elastic Container Service (ECS), o Amazon Elastic Kubernetes Service (EKS), o AWS Fargate, o Amazon Elastic Compute Cloud (EC2) e o AWS App Runner.
A AWS também fornece a ferramenta App2Container (A2C), que auxilia na conteinerização e migração de aplicações .NET e Java existentes.
Integração à AWS
Os serviços de contêiner da AWS estão altamente integrados à AWS. Isso permite que as aplicações de contêiner aproveitem os serviços da AWS para escalabilidade automática, rede, segurança e monitoramento. Você obtém a agilidade dos contêineres combinada com a elasticidade e a segurança da AWS.
Referência: AWS Containers Deep Dive
Casos de uso para contêineres
Aqui estão alguns casos de uso comuns para contêineres.
Microsserviços
Microsserviços são uma abordagem arquitetônica e organizacional do desenvolvimento de software na qual o software consiste em pequenos serviços independentes que se comunicam usando APIs bem definidas. Esses serviços pertencem a pequenas equipes autossuficientes. As arquiteturas de microsserviços tornam as aplicações mais fáceis de escalar e mais rápidas de desenvolver. Isso permite a inovação e acelera o tempo de lançamento de novos atributos no mercado. Os contêineres são uma estratégia muito usada para microsserviços. As aplicações Monolith podem ser divididas em microsserviços e componentes independentes em contêineres.
Processamento de lotes
Os trabalhos de processamento em lote e Extract-Transform-Load (ETL) são ideais para contêineres. Eles podem ser iniciados rapidamente e executados de acordo com um cronograma ou em resposta a eventos. Eles podem escalar dinamicamente para atender à demanda.
Machine Learning
Use contêineres para escalar rapidamente os modelos de machine learning para treinamento e inferência e executá-los perto de suas fontes de dados em qualquer plataforma.
Aplicações híbridas
Os contêineres permitem padronizar a maneira como o código é implantado, facilitando a criação de fluxos de trabalho para as aplicações executadas entre ambientes on-premises e na nuvem.
Migração de aplicações para a nuvem
Os contêineres ajudam na migração “lift-and-shift” para a nuvem. Você pode empacotar facilmente aplicações inteiras em contêineres, permitindo movê-las para a nuvem sem nenhuma alteração no código. Você pode aproveitar a elasticidade da nuvem para escalar os contêineres.
Referência: AWS | Microsserviços
Tecnologia sem servidor
As tecnologias sem servidor permitem que você crie e execute aplicações sem precisar pensar em servidores. A AWS oferece serviços gerenciados para hospedar código, gerenciar dados e integrar aplicações que não exigem que você gerencie servidores. Eles apresentam ajuste de escala automático, alta disponibilidade incorporada e um modelo de pagamento por uso.
Benefícios da tecnologia sem servidor
As tecnologias sem servidor permitem que você se concentre nas suas aplicações e clientes em vez de gerenciar a infraestrutura.
Elimine a sobrecarga operacional
Com tecnologias sem servidor, você não precisa lidar com o gerenciamento da infraestrutura, o provisionamento de capacidade e a aplicação de patches. Ao eliminar a sobrecarga operacional, suas equipes podem fazer o lançamento com mais rapidez, obter feedback e iterar para chegar logo ao mercado.
Adaptação em escala
As tecnologias sem servidor podem escalar automaticamente de zero a picos de demanda. Isso permite que você se adapte prontamente às necessidades do cliente.
Redução de custos
As tecnologias sem servidor podem escalar automaticamente de zero a picos de demanda. Isso permite que você se adapte às necessidades do cliente mais rápido do que nunca.
Crie aplicações melhores com mais facilidade
As tecnologias sem servidor incorporaram integrações com outros serviços da AWS. Você pode se concentrar em criar a aplicação em vez de configurá-la.
Referência: AWS | Tecnologia sem servidor
Casos de uso para tecnologias sem servidor
As tecnologias sem servidor são adequadas para estes casos de uso comuns:
Aplicações Web
As aplicações Web, incluindo APIs da Web e microsserviços, são facilmente criadas com as tecnologias sem servidor. Os serviços de computação sem servidor serão escalados automaticamente para corresponder ao seu tráfego na Web.
Processamento de dados
Você pode processar dados em praticamente qualquer escala com tecnologias de dados sem servidor, como Amazon Simple Storage Service (S3), Amazon DynamoDB, Amazon Relational Database Service Proxy (RDS Proxy) e Amazon Aurora Sem Servidor.
Processamento de lotes
As tecnologias sem servidor podem executar tarefas em lote de acordo com um cronograma ou em resposta a um evento.
Ingestão de eventos
Você pode executar funções sem servidor para processar, indexar ou analisar dados não estruturados recebidos e aplicar serviços de machine learning.
Serviços de computação da AWS para contêineres
Agora que você entende de contêineres e de tecnologia sem servidor, vamos considerar os serviços de computação da AWS que oferecem suporte a contêineres, alguns dos quais também oferecem suporte à tecnologia sem servidor. Todos esses serviços oferecem suporte a contêineres Linux do Docker e alguns também oferecem suporte a contêineres Windows. Você pode ver uma lista completa de serviços e ferramentas da AWS para contêineres na página de contêineres da AWS. Você não precisa saber todos os detalhes sobre esses serviços, mas deve entender o que os diferenciam uns dos outros.
Registro de contêineres: Amazon ECR
O Amazon Elastic Container Registry (ECR) permite armazenar, compartilhar e implantar software de contêiner, de forma pública ou privada. Normalmente, você envia os contêineres para o ECR, onde eles estão próximos aos serviços de computação de contêineres da AWS, como AWS App Runner, Amazon ECS ou Amazon EKS.
Orquestração de contêineres: Amazon ECS, Amazon EKS e AWS Fargate
Esses serviços hospedam contêineres e também os orquestram, o que significa que eles automatizam o provisionamento, a implantação, a rede, o dimensionamento, a disponibilidade e o gerenciamento do ciclo de vida dos contêineres.
O Amazon Elastic Container Service (Amazon ECS) é um serviço de orquestração de contêineres totalmente gerenciado que facilita a implantação, o gerenciamento e a escala das aplicações conteinerizadas. Você pode executar contêineres altamente seguros, confiáveis e escaláveis no ECS.
O Amazon Elastic Kubernetes Service (Amazon EKS) é um serviço de contêiner gerenciado para executar e escalar aplicações do Kubernetes na nuvem ou on-premises. O Kubernetes é um sistema de código aberto com a finalidade de automatizar a implantação, a escalabilidade e o gerenciamento de aplicações conteinerizadas. O EKS é a maneira mais confiável de iniciar, executar e escalar o Kubernetes.
AWS Fargate é computação sem servidor para contêineres. Tanto o Amazon ECS quanto o Amazon EKS estão disponíveis em formato sem servidor e em um modelo de preços diferente quando você os combina com o AWS Fargate.
Além de gerenciar contêineres na nuvem, tanto o Amazon ECS quanto o Amazon EKS também podem gerenciar aplicações de contêineres on-premises por meio dos serviços Amazon ECS Anywhere ou Amazon EKS Anywhere.
Funções sem servidor: AWS Lambda
O AWS Lambda é um serviço sem servidor, orientado por eventos para a execução de funções. Ele é compatível com contêineres.
Controle em nível de servidor: instâncias spot do Amazon EC2 e do EC2
Essas opções fornecem o maior controle sobre os detalhes da infraestrutura, mas também são a forma menos gerenciada de executar contêineres na AWS.
O Amazon Elastic Compute Cloud (Amazon EC2) é um serviço que oferece capacidade computacional segura e redimensionável na nuvem. Você pode executar contêineres com controle em nível de servidor no EC2. Para fazer isso, aloque as instâncias do EC2 e instale o Docker nelas.
Se suas aplicações forem tolerantes a falhas, você poderá executar nas instâncias spot do Amazon EC2, que estão disponíveis com até 90% de desconto. As instâncias spot permitem aproveitar a capacidade não utilizada do EC2 na Nuvem AWS. Para usar instâncias spot, a aplicação precisará ser interruptível. Você pode considerar instâncias spot para a análise de dados, trabalhos em lote, processamento em segundo plano ou tarefas opcionais.
Aplicações Web simples: AWS Lightsail
O AWS Lightsail é adequado para as aplicações conteinerizadas simples que você queira executar, por um preço fixo mensal. É uma boa opção para estudantes, pequenas empresas e startups que tenham um site e um banco de dados pequenos para começar a trabalhar na nuvem.
Totalmente gerenciado: AWS App Runner
Finalmente, chegamos ao tópico deste curso, o AWS App Runner. O App Runner é um serviço totalmente gerenciado que facilita aos desenvolvedores a implantação rápida de aplicações Web e APIs conteinerizadas, em alta escala e sem a necessidade de experiência prévia com a infraestrutura. O App Runner também não tem servidor, oferecendo as vantagens dos contêineres e da tecnologia sem servidor simultaneamente. O App Runner pode executar workloads modernas do .NET em contêineres Linux.
Escolher um serviço de computação da AWS
Agora que fizemos um tour pelos serviços de computação da AWS para contêineres, vamos analisar algumas questões importantes que ajudarão você a decidir se o AWS App Runner ou outro serviço é adequado para sua aplicação. A tabela 1 relaciona as considerações aos serviços da AWS.
Tabela 1: Tabela decisória dos serviços de computação de contêineres da AWS
Você é novo no setor de contêineres ou tem experiência com contêineres?
Se você for um novato em contêineres, considere o AWS App Runner. É a opção de maior serviço e não exige experiência prévia em infraestrutura.
Você precisa de contêineres Windows?
Se você quiser executar aplicações legadas do .NET Framework em um contêiner, a única opção será os contêineres Windows. Os serviços da AWS que oferecem suporte a contêineres Windows são Amazon ECS, Amazon ECS usando AWS Fargate e Amazon EKS. Se você estiver executando o .NET moderno, poderá usar contêineres Linux e qualquer um dos serviços de computação da AWS que ofereçam suporte a contêineres.
A orquestração de contêineres é uma necessidade atual ou futura?
Há uma grande diferença entre uma aplicação de contêiner único e uma combinação de contêineres que devem ser orquestrados. Se você tiver uma combinação complexa de contêineres e precisa de gerenciamento vitalício, considere o Amazon ECS ou o Amazon EKS.
A tecnologia sem servidor é adequada para você?
Se sua aplicação é adequada aos casos de uso sem servidor e você se sente confortável em permitir que a AWS gerencie a infraestrutura e o modelo de pagamento sem servidor, considere essas opções do AWS Lambda, AWS App Runner ou AWS Fargate.
- Se sua aplicação consistir em funções orientadas por eventos, você poderá usar o AWS Lambda.
- Se você precisar de orquestração, use o AWS Fargate com o Amazon ECS ou com o Amazon EKS.
- Se você prefere um serviço totalmente gerenciado, escolha o AWS App Runner.
Principais conclusões
Agora você já tem uma compreensão básica sobre os contêineres, a tecnologia sem servidor e seus respectivos benefícios. Você aprendeu sobre os diferentes serviços de computação da AWS e o que os diferencia. Você também aprendeu quais perguntas fazer para determinar o serviço de computação correto da AWS para uma workload.
Conclusão
Neste módulo, você aprendeu pela primeira vez sobre contêineres: como eles diferem das máquinas virtuais e os contêineres Linux do Docker versus contêineres Windows. Eles são leves, padronizados, portáteis, fáceis de transportar e permitem que você envie mais rapidamente e faça economias. Os contêineres na AWS são seguros, confiáveis, contam com uma variedade de serviços de contêineres e são profundamente integrados à AWS.
Depois, você aprendeu sobre as tecnologias sem servidor, que permitem criar aplicações sem precisar pensar em servidores. Os benefícios incluem a eliminação da sobrecarga operacional, escalabilidade automática, redução de custos e criação de aplicações com mais facilidade por meio de integrações incorporadas a outros serviços da AWS. Os casos de uso são aplicações Web, processamento de dados, processamento em lote e ingestão de eventos.
Você aprendeu sobre os serviços de computação da AWS para contêineres e como escolher um serviço de computação. Você aprendeu que o AWS App Runner é um serviço totalmente gerenciado para hospedagem de contêineres que também não tem servidor.