Implantando Node.js no AWS EC2

Implantando Node.js no AWS EC2

Olá, dessa vez iremos falar sobre AWS e EC2. Se ainda não ouviram sobre, preparem-se para entrar em um mundo de possibilidades na nuvem! Hoje, vamos discutir essas duas ótimas tecnologias e como elas estão revolucionando a forma como desenvolvemos e implantamos nossas aplicações.

Primeiramente, vamos esclarecer alguns termos. AWS é a sigla para Amazon Web Services, a plataforma de computação em nuvem da gigante do comércio eletrônico, a Amazon. Já o EC2 é o Elastic Compute Cloud, um dos serviços oferecidos pela AWS, que nos permite criar e gerenciar instâncias virtuais de servidores. É como ter um computador virtual na nuvem, totalmente configurável e escalável.

Por que devo estudar AWS e EC2?

A resposta é simples: a computação em nuvem é o futuro, e as empresas estão cada vez mais migrando suas aplicações e infraestruturas para a nuvem. Dominar essas tecnologias é uma habilidade extremamente relevante e valorizada no mercado de trabalho.

Ao aprender sobre AWS e EC2, você terá o poder de implantar suas aplicações de forma rápida e eficiente, sem se preocupar com a compra e manutenção de servidores físicos. Além disso, a escalabilidade oferecida pela nuvem permite que você aumente ou diminua os recursos conforme a demanda, economizando tempo e dinheiro.

Agora você deve estar se perguntando quais empresas renomadas utilizam AWS e EC2, certo? Bem, a lista é grande! Gigantes como Netflix, Airbnb, Spotify, NASA e até mesmo a própria Amazon confiam nessas tecnologias para impulsionar seus negócios. Essas empresas reconhecem os benefícios de contar com uma infraestrutura escalável e confiável, que permite lidar com um número crescente de usuários e oferecer uma experiência de alta qualidade.

Sendo assim, criaremos uma aplicação Node.js bem simples e a colocaremos disponível em uma instância EC2.

Criando uma aplicação simples

Comece criando o projeto Node com o seguinte comando no terminal.

npm init -y

npm install express

Com isso, podemos criar o arquivo app.js.


E por fim, altere a propriedade start do package.json para isso:


O código apresentado é uma aplicação em Node.js que utiliza o framework Express para criar um servidor web. Ele define várias rotas, sendo a rota principal configurada para o método GET e mapeada para a raiz ("/") do servidor. Quando um cliente faz uma requisição GET para essa rota, o servidor responde com a mensagem "Hello World!". Essa é uma forma comum de verificar se o servidor está funcionando corretamente.


Além da rota GET, o código também possui rotas para os métodos DELETE, PUT e POST. Essas rotas são usadas para realizar operações de manipulação de dados, como exclusão, atualização e criação de usuários. No entanto, as implementações específicas para essas operações não estão incluídas no código fornecido. É necessário adicionar a lógica necessária para manipular os dados, de acordo com as necessidades do aplicativo.

Por fim, o código utiliza o método listen() para iniciar o servidor na porta 3000. Dessa forma, o servidor fica pronto para receber requisições HTTP dos clientes e responder de acordo com as rotas configuradas. Em resumo, o código fornece uma base para a criação de um servidor web simples, utilizando Node.js e Express, permitindo definir diferentes rotas e responder às requisições de acordo com as necessidades do aplicativo.


É importante ressaltar que o código fornecido não está completo, pois não inclui a conexão com um banco de dados. Em uma aplicação real, é comum que haja a necessidade de armazenar e recuperar dados persistentes, e isso geralmente é feito por meio de um banco de dados. Nesse código específico, as rotas para operações de exclusão, atualização e criação de usuários estão presentes, mas a lógica para interagir com um banco de dados não foi implementada. Para tornar essa aplicação funcional em um ambiente de produção, seria necessário adicionar a integração com um banco de dados, como MongoDB ou MySQL, por exemplo, para garantir a persistência e manipulação adequada dos dados.

Com isso já temos nossa aplicação, agora crie um repositório no Github e coloque o projeto no repositório, isso será necessário para acessarmos a aplicação quando estivermos dentro da aplicação EC2.

Agora entre no site da AWS https://aws.amazon.com/pt/free

Clique em EC2, depois execute a instância e verá a tela de criação. O primeiro passo é criar uma chave.


Agora vá em detalhes avançados e no final cole os comandos de instalação:


#!/bin/bash

# Install Docker

sudo yum update -y

sudo yum install -y docker

sudo yum install -y git

sudo yum install libxcrypt-compat-4.4.33-7.amzn2023.x86_64

# Start the Docker service

sudo service docker start

# Add the current user to the "docker" group

sudo usermod -a -G docker $USER

# Install Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.28.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

# Install PM2

sudo npm install -g pm2

sudo pm2 startup systemd -u $USER --hp /home/$USER

pm2 completion install

Agora clique em executar instância. Após algum tempo ela será iniciada e podemos clicar nela no painel de instâncias.


Clique no id da instância e va até segurança.



Vá até o grupo de segurança adicionado e adicione novas regras de segurança:



Agora que adicionamos todas as regras de segurança podemos entrar na instância, clonar o repositório e finalmente rodar a aplicação em deploy.

Volte ao painel de instâncias, selecione a instância que criou e vá em Conectar. Nela teremos algumas opções:


Existem duas formas principais de se conectar a uma instância da AWS: diretamente na AWS ou através do cliente SSH no terminal local. A opção de conectar diretamente na AWS é fornecida pelo serviço de acesso à instância, onde é possível acessar a instância através de um navegador web. Isso é conveniente para acessar rapidamente a instância, sem precisar configurar o cliente SSH no terminal local. Por outro lado, usar o cliente SSH no terminal local requer a configuração adequada do cliente SSH, além da obtenção das informações de conexão, como o endereço IP da instância e a chave de acesso.

Embora conectar diretamente na AWS seja mais simples em termos de configuração inicial, pode ser mais limitado em recursos e funcionalidades do que usar o cliente SSH no terminal local. Ao usar o cliente SSH, você tem mais controle sobre a conexão e pode executar comandos mais avançados no terminal da instância. Além disso, a conexão via SSH também é útil quando há necessidade de automatizar tarefas ou executar scripts remotamente na instância.

Em resumo, a escolha entre conectar diretamente na AWS ou usar o cliente SSH no terminal local depende das necessidades e preferências individuais. A opção de conectar diretamente na AWS é mais conveniente para acessar rapidamente a instância, enquanto o uso do cliente SSH no terminal local oferece maior controle e flexibilidade em termos de recursos e automação.

Quando entrar na instância, verá algo semelhante a isso:


Crie uma chave do github dentro da instância e clone o seu repositório. Com o projeto dentro da instância, podemos rodar ele com o comando:

sudo su

pm2 start app.ja

Agora temos nossa aplicação rodando e disponível online para requisições. E ainda podemos achar o IP clicando no ID do painel de instâncias. No exemplo que criamos ao rodar o ip 3.129.12.133:3001, iriamos ver o Hello World! que fizemos no GET da aplicação.



Conclusão

Em conclusão, neste artigo exploramos as tecnologias AWS e EC2, que estão transformando a forma como desenvolvemos e implantamos aplicações na nuvem. Aprendemos que a AWS é uma plataforma de computação em nuvem da Amazon, e o EC2 é um serviço dentro dessa plataforma que permite criar e gerenciar instâncias virtuais de servidores.

Aprender sobre AWS e EC2 é extremamente relevante para os programadores, pois a computação em nuvem é o futuro e as empresas estão migrando cada vez mais suas aplicações para essa infraestrutura. Dominar essas tecnologias nos capacita a implantar nossas aplicações de maneira rápida, eficiente e escalável, sem a necessidade de lidar com a complexidade de infraestrutura física.

💡
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.