Cache and Beanstalk
Contextualização
Esse projeto foi desenvolvido para a disciplina Computação em Nuvem do curso de engenharia da computação do Insper. A proposta é criar um projeto IaC (Infrastructure as Code). Para isso foi utilizado o Terraform para criar a infraestrutura na AWS. A infraestrura criada foi a integração do Elastic Beanstalk com o Elastic Cache e o CloudWatch para monitorar os recursos criados.
O que é o Terraform?
O Terraform é uma ferramenta de código aberto desenvolvida pela HashiCorp que permite a criação de infraestrutura como código. O Terraform permite que o desenvolvedor escreva a infraestrutura como código, sendo que o código é escrito em HCL (HashiCorp Configuration Language), uma linguagem de configuração de código aberto. O Terraform permite que o desenvolvedor crie, altere e melhore a infraestrutura de forma segura e eficiente, sendo que o código é escrito em arquivos .tf
e o Terraform cria a infraestrutura de acordo com o código escrito.
Para saber mais sobre o Terraform, acesse a documentação.
O que é o AWS Elastic Beanstalk?
Em inglês a palavra "beanstalk" significa "pé de feijão", sendo que também é associada ao conto "João e o pé de feijão", uma história em que o protagonista planta um feijão que cresce rapidamente, atingindo uma altura enorme que é utilizado por João para explorar o reino das nuvens. A analogia com o serviço da AWS é que o desenvolvedor pode fazer o upload de seu código e o Elastic Beanstalk cuida de todo o resto, como se o código fosse o feijão e o Elastic Beanstalk o pé de feijão, podendo atingir uma altura enorme, ou seja, escalando o serviço rapidamente.
O AWS Elastic Beanstalk é um serviço que facilita a implantação e o dimensionamento de aplicativos da Web e serviços da Web desenvolvidos com Java, .NET, PHP, Node.js, Python, Ruby, Go e Docker em servidores da Web comuns, como Apache, Nginx, Passenger e IIS. A proposta é que o desenvolvedor se preocupe apenas com o código e o Elastic Beanstalk cuide do resto. Para isso o desenvolvedor precisa apenas fazer o upload do código .zip ou .war, sendo que caso deseje não utilizar as configurações padrões, pode fazer o upload de um arquivo .yaml com as configurações desejadas dentro do arquivo compactado.
Para isso o serviço utiliza um conjunto de componentes que são criados e configurados automaticamente, como instâncias do Amazon EC2, balanceadores de carga do Elastic Load Balancing, grupos de Auto Scaling, grupos de segurança, logs e monitoramento com o Amazon CloudWatch e muito mais, sendo que o desenvolvedor pode ter acesso a esses componentes e configurá-los da forma que desejar.
Para mais informações sobre o serviço, acesse a documentação oficial.
O que é o AWS Elastic Cache?
O AWS Elastic Cache é um serviço que facilita a implantação, operação e escalabilidade de um cache na nuvem. O serviço é compatível com dois mecanismos de cache de código aberto: Memcached e Redis. Sendo que o Redis é um mecanismo de cache de alto desempenho e armazenamento de dados em memória, enquanto o Memcached é um mecanismo de cache de memória distribuída de alto desempenho. Para esse projeto foi utilizado o Redis.
O Elastic Cache é uma ótima opção para aplicativos que exigem cache de banco de dados, sessão, consulta ou API, sendo que o serviço é totalmente gerenciado, escalável e altamente disponível.
Para utilizar o serviço, o desenvolvedor precisa apenas criar um cluster, configurar os parâmetros desejados e conectar o aplicativo ao endpoint do cluster. O serviço cuida de todo o resto, como provisionamento de capacidade, configuração de software, patching, monitoramento, failover e recuperação de desastres.
E também é compatível com diversos outros recursos da AWS, como o Amazon VPC, AWS Identity and Access Management (IAM), Amazon CloudWatch, AWS CloudFormation e Amazon CloudTrail.
Para mais informações sobre o serviço, acesse a documentação oficial.
O que é o AWS CloudWatch?
O AWS CloudWatch é um serviço de monitoramento e observabilidade da AWS que fornece dados e insights de monitoramento, ações automatizadas e respostas rápidas para manter os aplicativos em execução sem problemas. O serviço coleta dados de monitoramento e operacionais em forma de logs, métricas e eventos, fornecendo uma visibilidade unificada dos recursos da AWS, aplicativos e serviços que executam na AWS e em ambientes locais.
Para mais informações sobre o serviço, acesse a documentação oficial.
Estrutura do projeto
Para esse projeto foi utilizado o serviço do Elastic Beanstalk com o Elastic Cache, sendo que o Elastic Beanstalk foi configurado para utilizar o Python 3.11 no Amazon Linux 2023. Enquanto o Elastic Cache foi configurado para utilizar a versão mais recente do Redis, que atualmente é a 7.0.7. Para que o Beanstalk se comunique com o Elastic Cache, ambos foram configurados para utilizar a mesma VPC, e foi criado um grupo de segurança com a porta 6379 aberta para que o Beanstalk possa se comunicar com o Elastic Cache.
Também foi utilizado o CloudWatch para monitorar recursos personalizados do Beanstalk e do Elastic Cache, que serão explicados mais adiante. E por fim foi criado um bucket S3 para armazenar o .zip
da aplicação, que nesse caso é feita utilizando o framework Flask.