AWS - Permita que as suas equipes de desenvolvimento se movam à velocidade da luz

No mundo da tecnologia, nada é mais importante do que ter a ferramenta certa no momento certo e no lugar certo, especialmente quando estamos trabalhando com uma equipe ágil. Agile, no seu cerne, trata-se de dominar os meios corretos para atingir seus objetivos a tempo, sem perder a flexibilidade necessária para acomodar uma série de demandas à medida que estas chegam. Devido à necessidade da nossa empresa de manter estas capacidades, optamos por trabalhar com a AWS. Fazendo isso, reduzimos significativamente o custo das nossas operações.

Neste artigo, explicamos os serviços AWS que utilizamos e destacamos alguns de seus principais benefícios.

EKS (Elastic Kubernetes Service)

Vamos começar com o básico de qualquer sistema distribuído moderno - Kubernetes.

Como o EKS é construído em cima de instâncias EC2, o AWS pode fornecer o nó mestre e toda a infraestrutura necessária. Você só precisa se preocupar com as definições dos seus serviços.

Em nossa configuração atual, temos diferentes nomes de espaços para cada um dos ambientes. As únicas duas coisas que mudam são as variáveis/secreções e o número de instâncias em execução. Desta forma, temos um ambiente de desenvolvimento que é muito semelhante à produção. Isto é essencial para que você possa depurar e encontrar aquele erro evasivo que tanto o incomoda.

Outro argumento forte para utilizar o Kubernetes é sua abordagem declarativa da infraestrutura. Você declara os serviços que ele deve executar, e ele fará o melhor para executá-los. Se por algum motivo o serviço cair, o Kubernetes iniciará uma nova instância para cumprir o estado declarado.

Então você pode perguntar: "O EKS ajuda a implantar e manter os serviços, mas como os diferentes serviços conversarão uns com os outros"?

Kinesis

Com o serviço Kinesis, você pode direcionar todas as suas mensagens de uma instância para outra e ter serviços desacoplados interagindo bem.

Isso ajuda quando as solicitações do cliente não atingem a mesma instância, ou quando o processamento não está fixo em uma instância e requer cálculos adicionais de outros microsserviços.

Outra opção que a AWS oferece para comunicação de serviços é a assinatura de SNS e SQS (Serviço de Fila Simples). Você pode ler mais sobre como configurá-lo here.

O exemplo mais simples poderia ser ter um serviço processando os dados e outro arquivando os dados. Com SQS, isso não é possível sem assinar o SQS a um fluxo Kinesis.

Além disso, o Kinesis se integra profundamente com as funções DynamoDB e Lambda, que são os dois tópicos seguintes.

DynamoDB

Esta é a solução ideal da AWS para a NoSQLs de persistência baseada em documentos. Além da capacidade de armazenar objetos JSON, você pode criar índices e pesquisar por eles, tornando os fetches muito performáticos. Se, assim que você escalar sua aplicação, um determinado índice começar a receber muito uso, você pode escalar os recursos alocados a ele na configuração da tabela.

Em nosso caso, temos tudo separado por entidades de domínio, que representam os conceitos centrais para nossa solução.

E a cereja no topo do bolo é que o DynamoDB também pode canalizar para o Kinesis. Acho que assim dá para entender onde queremos chegar. Essa arquitetura de eventos é perfeita para o Serverless. O Serverless foi desenvolvido exatamente para casos como este.

Funções Lambda (Serverless)

Outro tema importante no mundo do desenvolvimento. As funções Lambda estão muito populares hoje em dia por serem muito simples de desenvolver e implantar.

Em nossa infraestrutura, a gente a usa como uma ferramenta auxiliar. Ela observa o fluxo de Kinesis vindo de nossa aplicação em EKS e DynamoDB, e reage de formas muito específicas a esses eventos.

Vejamos, por exemplo, como você pode informar sua equipe que um grande cliente começou a usar sua aplicação.

  • O aplicativo salva uma nova entrada de cliente no DynamoDB
  • O DynamoDB canaliza este evento para uma corrente de Kinesis
  • O fluxo Kinesis aciona a função Lambda que estava pronta para este tipo de evento
  • A função Lambda envia uma mensagem gentil no Slack para o canal de marketing dizendo que temos um novo cliente legal :)

Outro exemplo seria a atualização dos índices de Elasticsearch.

Imagine que você usa a ES para uma busca baseada em texto em sua entidade que está armazenada em sua tabela DynamoDB.

  • Um novo recorde é adicionado à sua tabela de entidades
  • DynamoDB canaliza este evento criado para uma Corrente de Kinesis
  • Uma função lambda escuta este fluxo e guarda as informações no índice Elasticsearch, disponibilizando-as para serem consultadas com termos simplificados.

Como você pode ver, isto é totalmente desacoplado da aplicação principal. Ele dá valor imediato e melhora a visibilidade do que está acontecendo.

Elasticsearch

Por falar nisso, a Elasticsearch é uma das melhores maneiras de analisar seus registros de produção e obter informações precisas sobre o estado da sua aplicação. E, adivinhe - a Amazon fornece a Elasticsearch como um serviço e, como ela é construída sobre o EC2, você pode dimensioná-la para atender às suas exigências.

Infelizmente, esta é a única peça até agora que não está ligada ao Kinesis. Assim, para povoarmos o ES, usamos o Fluentd em nossos nodos do Kubernetes. Isto normaliza a saída dos recipientes e o empurra para o ES.

As funções Lambda que dependem exclusivamente dos dados do ES precisam ser acionadas com um evento cronológico, por exemplo, a cada cinco minutos.

Além de afirmar o estado de seu sistema, você pode ter diferentes índices (analógicos a tabelas em bancos de dados mais convencionais) armazenando dados e métricas de uso. Em combinação com uma UI (Interface do usuário) fora do comum e a ferramenta de análise Kibana, você pode derivar informações importantes sobre como seu usuário utiliza o produto.

Veja nosso aplicativo na prática
A workstreams.ai oferece task management simplicity by using powerful automationsimplicidade na gestão de tarefas através de automação poderosa.

Step Functions

But how can we manage stageful execution flows?

Step Functions. This is a powerful tool for triggering executions that are time-based and have an arbitrary mechanism for blocking the operation.

Let’s say that we want to send a message to our users to remind them to finish the tutorial, but the user can start the tutorial on his own without our input. So, we need a way to cancel the execution of this reminder. Step Functions allows exactly that. You control the execution flow, and, if the execution is no longer relevant, you can cancel it.

Elasticache

Step Functions are great, but we need to save the reference of the execution somewhere so the application can decide later if the execution should be canceled or not. Amazon has you covered on this as well.

For anything temporary (but not exclusively temporary), you can use this scalable service that provides a choice between Redis and Memcached.

We love to use Redis, and AWS delivers High Availability instances across as many replicas as you require. There are a couple of major differences between them— Redis’ advanced data structures, and Memcache’s object size limitations (more than one MB).

Choose what fits your use case. You can also combine them!

CloudWatch

If you are using any of the services that we mentioned above, you are generating logs that are pushed and aggregated to CloudWatch. With it, alarms and notifications can be set so your team will not lose a status change in the infrastructure.

IAM (Identity Access Manager)

This is the core of every service that is running on AWS or user accessing any kind of information. IAM defines every rule that the service will run under.

For example, the Lambda function can be triggered by events and perform certain actions. To respond to an event, you don’t need a specific rule, but for performing actions, you need to state that this lambda function can access this service or resource.

The same goes for users. If you define that a particular user group doesn’t have permission for deleting S3 files, they will not be able to perform this action.

When you configure these profiles and security groups, you can define them as broadly as possible. But, when we are talking about production environments, the more granular the permission scope, the better. This is because it provides better control over who is permitted to execute what.

VPC (Virtual Private Cloud)

Still speaking about security, one thing is to make sure a service or a user has the right permissions to do the required job. Another is to reduce the surface of your whole infrastructure, and also reduce the scope that your security response team needs to tackle. Remember, the more of your system is openly connected to the internet, the more vulnerable it is.

This is why AWS came with the implementation of a virtual private cloud, where you can define a granular configuration for your external and internal facing EC2 instances.

workstreams.ai identify inactive tasks
Use tecnologia para render mais
A workstreams.ai otimiza cada processo do seu negócio.

ELB (Elastic Load Balancer)

O ELB é uma implementação padrão da AWS para fornecer um ambiente de aplicação escalável multi instância. Com esta ferramenta, você poderá receber solicitações para um IP e espalhar o peso para que possa ser atendida por múltiplas instâncias e escalar facilmente.

ECR (Elastic Container Registry)

Se você vai implantar uma aplicação moderna, estamos falando de implantação de imagens de contêineres. Desde 2014, nossa indústria tem sido parte de uma revolução. Novas tecnologias surgiram para tirar proveito do que as tecnologias de contêineres podem trazer.

Mas para que você possa implantar contêineres, você precisa de um local de armazenamento. A ECR fornece exatamente isso. É fácil como empurrar uma nova imagem. E, dentro da Kubernetes, você pode declarar uma implantação para usar esta imagem específica. Por causa do IAM, seu cluster Kubernetes pode puxar a imagem sem nenhuma configuração adicional de sua parte.

S3 (Simple Storage System)

Quando você precisa implantar ou armazenar outros artefatos além de imagens de contêineres, a Amazon te dá suporte com o S3. Simples de usar, basta definir um balde com permissões. Ele pode ser acessado de qualquer lugar - na internet ou não - e você pode carregar novos arquivos dentro ele.

Não tem muito mais que possamos dizer a respeito disso. É simples, rápido, escalonável e custa quase nada.

Amazon CloudFront

Já que estamos falando da distribuição de arquivos estáticos com S3, um serviço que normalmente é usado em conjunto com ele é a solução CDN (content delivery network) da AWS. Isto aproveita a rede global que a AWS construiu e armazena seu conteúdo perto de sua base de usuários, reduzindo o tempo total de download de artefatos armazenados no S3. Sem mencionar a mitigação de DDoS já pronta e outras características úteis, como invalidação de cache, se você precisar lançar uma atualização o mais rápido possível.

AWS Certificate Manager

Se você estiver servindo sob HTTPS (o que você definitivamente deveria), você apenas confia no serviço que fornece e fornece seus certificados SSL/TLS. Uma das grandes vantagens de utilizar a solução AWS, além de seguir todos os padrões e melhores práticas de segurança, é a renovação automática dos certificados. Isto significa que não precisa de nenhum input de sua parte se for emitido pela Amazon.

Para finalizar, recomendamos o AWS não apenas como uma ferramenta de construção, mas também como a base para uma aplicação sólida, escalável e moderna.

Se você tem uma inicialização que valoriza tecnologias de ponta e a velocidade de entrega é uma necessidade, inscreva-se no programa AWS Activate para ter acesso ao suporte Amazon Premium, créditos para escalar facilmente e para fazer parte de um grupo de empresas inovadoras.

Compartilhe este artigo sobre:
Seleção de idioma

Selecione seu idioma preferido: