O que é uma instância EC2 (na prática)
Uma instância EC2 é um servidor virtual na AWS. Para hospedar um site simples, você vai criar uma máquina Linux, acessar por SSH, instalar um servidor web (como Nginx ou Apache) e colocar arquivos estáticos (HTML/CSS/JS) em uma pasta servida pelo servidor. O acesso público acontece pelo IP público da instância (ou DNS público), desde que a rede e as regras de acesso já estejam corretas.
Checklist antes de criar
- AMI Linux (ex.: Amazon Linux 2023 ou Ubuntu LTS).
- Tipo de instância pequeno para testes (ex.: t3.micro ou t2.micro, conforme disponibilidade/região).
- Par de chaves para SSH (arquivo .pem).
- Armazenamento raiz padrão (geralmente 8–10 GiB) é suficiente para site estático.
- Tags para organização e custos (Name, Project, Environment).
- VPC/Sub-rede corretas (sub-rede pública, com rota para Internet Gateway) para ter IP público e acesso externo.
Passo a passo: criando a instância EC2
1) Abrir o assistente de criação
No Console da AWS, vá em EC2 > Instances > Launch instances.
2) Nome e tags
Defina um nome descritivo e tags úteis. Exemplo:
- Name: site-teste-ec2
- Project: site-simples
- Environment: dev
- Owner: seu-nome
Tags ajudam a encontrar recursos e a controlar custos por projeto/ambiente.
3) Escolher a AMI (Linux)
Escolha uma AMI Linux. Recomendações comuns:
- Ouça o áudio com a tela desligada
- Ganhe Certificado após a conclusão
- + de 5000 cursos para você explorar!
Baixar o aplicativo
- Amazon Linux 2023: boa integração com AWS, pacotes via dnf.
- Ubuntu Server LTS: muito comum, pacotes via apt.
Para iniciantes, qualquer uma funciona. O importante é seguir os comandos corretos do sistema escolhido.
4) Escolher o tipo de instância
Para teste e site simples, use um tipo pequeno:
- t3.micro (ou t2.micro) costuma ser suficiente para um site estático e testes.
Evite tipos maiores no início para não aumentar custos sem necessidade.
5) Par de chaves (Key pair)
Em Key pair:
- Se você já tem um par de chaves, selecione-o.
- Se não tem, clique em Create new key pair, escolha RSA e formato .pem (para macOS/Linux/WSL).
Guarde o arquivo .pem com segurança. Quem tem essa chave (e acesso de rede) pode tentar acessar sua instância.
6) Configurações de rede: VPC e sub-rede
Em Network settings, selecione:
- VPC: a VPC do seu ambiente de hospedagem.
- Subnet: uma sub-rede pública (aquela que tem rota para Internet Gateway).
- Auto-assign public IP: Enable (para facilitar o teste via IP público).
Se você escolher uma sub-rede privada ou não tiver IP público, não conseguirá acessar o site diretamente pela internet.
7) Armazenamento (Root volume)
Mantenha o padrão (ex.: gp3, 8–10 GiB). Para site estático simples, isso é mais do que suficiente.
8) Revisar e lançar
Revise as opções e clique em Launch instance. Aguarde o status ficar Running e os checks de saúde passarem.
Acessando a instância via SSH
1) Encontrar o IP público e o usuário
Na lista de instâncias, selecione a instância e copie:
- Public IPv4 address (ou Public IPv4 DNS)
- Username padrão depende da AMI:
| AMI | Usuário comum |
|---|---|
| Amazon Linux | ec2-user |
| Ubuntu | ubuntu |
2) Ajustar permissão do arquivo .pem (macOS/Linux/WSL)
No terminal, na pasta onde está sua chave:
chmod 400 minha-chave.pem3) Conectar por SSH
Substitua o IP e o usuário conforme sua AMI:
ssh -i minha-chave.pem ec2-user@SEU_IP_PUBLICOSe for Ubuntu:
ssh -i minha-chave.pem ubuntu@SEU_IP_PUBLICONa primeira conexão, confirme o fingerprint digitando yes.
Instalando um servidor web e publicando um site estático
Opção A: Nginx (recomendado para site estático)
Amazon Linux 2023:
sudo dnf update -y
sudo dnf install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginxUbuntu:
sudo apt update -y
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginxOnde colocar os arquivos do site (Nginx)
O diretório padrão costuma ser:
- Nginx (Ubuntu):
/var/www/html - Nginx (Amazon Linux): frequentemente
/usr/share/nginx/html
Confirme o caminho verificando a configuração:
sudo nginx -T | grep -n "root" | headCrie uma página simples (exemplo usando o caminho mais comum do Nginx no Amazon Linux):
sudo tee /usr/share/nginx/html/index.html > /dev/null <<'HTML'
<!doctype html>
<html lang="pt-br">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Site na EC2</title>
<style>body{font-family:Arial;margin:40px} .box{max-width:720px}</style>
</head>
<body>
<div class="box">
<h1>Olá!</h1>
<p>Este site está rodando em uma instância EC2 com Nginx.</p>
<p>Hora do servidor: <span id="t"></span></p>
</div>
<script>document.getElementById('t').textContent = new Date().toISOString();</script>
</body>
</html>
HTMLSe seu Nginx usar /var/www/html, troque o caminho no comando acima.
Opção B: Apache (alternativa comum)
Amazon Linux 2023:
sudo dnf update -y
sudo dnf install -y httpd
sudo systemctl enable httpd
sudo systemctl start httpdUbuntu:
sudo apt update -y
sudo apt install -y apache2
sudo systemctl enable apache2
sudo systemctl start apache2Diretório padrão do Apache:
/var/www/html
Exemplo de página:
sudo tee /var/www/html/index.html > /dev/null <<'HTML'
<!doctype html>
<html lang="pt-br">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Site na EC2</title>
</head>
<body>
<h1>Site no ar via Apache</h1>
<p>Hospedado em EC2.</p>
</body>
</html>
HTMLConfirmando que o site está funcionando pelo IP público
1) Teste pelo navegador
No seu computador, abra:
http://SEU_IP_PUBLICO
Você deve ver a página que criou.
2) Teste por linha de comando (opcional)
No seu computador (ou de dentro da instância), teste com curl:
curl -I http://SEU_IP_PUBLICOO esperado é receber HTTP/1.1 200 OK (ou similar).
Organizando os arquivos do site (boa prática simples)
Mesmo em um site estático pequeno, organize assim:
index.html(página principal)assets/(imagens, fontes)css/(estilos)js/(scripts)
Exemplo criando estrutura (ajuste o diretório raiz conforme seu servidor):
sudo mkdir -p /usr/share/nginx/html/{assets,css,js}
sudo tee /usr/share/nginx/html/css/style.css > /dev/null <<'CSS'
body{font-family:Arial;margin:40px}
CSSDepois, referencie no index.html:
<link rel="stylesheet" href="/css/style.css">Solução de problemas (rápida e prática)
1) Não consigo acessar por SSH
- IP público mudou? Se você parou e iniciou a instância, o IP público pode mudar (a menos que use Elastic IP). Confira o IP atual no Console.
- Chave errada? Garanta que está usando o arquivo
.pemcorreto e com permissãochmod 400. - Usuário errado? Tente
ec2-user(Amazon Linux) ouubuntu(Ubuntu).
2) O site não abre no navegador (timeout)
- Porta 80 não está liberada para entrada. Confirme que o acesso HTTP está permitido para o público que você deseja (ex.: seu IP ou 0.0.0.0/0 em ambiente de teste).
- Sub-rede não é pública ou não tem rota para Internet Gateway. Se a instância não tem conectividade pública, o navegador não alcança.
- Sem IP público: verifique se a instância tem
Public IPv4 address.
3) O serviço web não está rodando
Verifique status:
sudo systemctl status nginx
sudo systemctl status httpd
sudo systemctl status apache2Inicie/reinicie:
sudo systemctl start nginx
sudo systemctl restart nginxOu para Apache:
sudo systemctl restart httpd
sudo systemctl restart apache24) Página não atualiza ou aparece a página padrão
- Você editou o arquivo no diretório errado. Confirme o
rootdo servidor (Nginx) ou o DocumentRoot (Apache). - Cache do navegador: faça hard refresh (Ctrl+F5) ou teste em aba anônima.
5) Erro de permissão ao criar/editar arquivos
- Use
sudoao escrever em diretórios do servidor web. - Confirme permissões e dono:
ls -la /usr/share/nginx/html
ls -la /var/www/htmlSe necessário, ajuste permissões com cuidado (evite deixar tudo 777). Para site estático, normalmente basta garantir leitura para o usuário do servidor web.
Padrão de controle de custos: parar ou encerrar ao final
Parar (Stop) vs Encerrar (Terminate)
- Stop: a instância para de rodar (para de cobrar computação), mas o volume EBS continua existindo e pode gerar custo. O IP público pode mudar ao iniciar novamente.
- Terminate: remove a instância. Se o volume raiz estiver marcado para apagar ao encerrar (padrão comum), você elimina também esse custo. Use quando não precisar mais do ambiente.
Como parar/encerrar pelo Console
EC2 > Instances > selecione a instância > Instance state:
- Stop instance (para pausar)
- Terminate instance (para remover)
Verificação rápida de “sobras” comuns
- Volumes (EBS) não anexados
- Snapshots antigos
- Elastic IP alocado e não associado