AWS para Iniciantes: EC2 sem complicação para colocar um site simples no ar

Capítulo 5

Tempo estimado de leitura: 8 minutos

+ Exercício

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:

Continue em nosso aplicativo e ...
  • Ouça o áudio com a tela desligada
  • Ganhe Certificado após a conclusão
  • + de 5000 cursos para você explorar!
ou continue lendo abaixo...
Download App

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:
AMIUsuário comum
Amazon Linuxec2-user
Ubuntuubuntu

2) Ajustar permissão do arquivo .pem (macOS/Linux/WSL)

No terminal, na pasta onde está sua chave:

chmod 400 minha-chave.pem

3) Conectar por SSH

Substitua o IP e o usuário conforme sua AMI:

ssh -i minha-chave.pem ec2-user@SEU_IP_PUBLICO

Se for Ubuntu:

ssh -i minha-chave.pem ubuntu@SEU_IP_PUBLICO

Na 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 nginx

Ubuntu:

sudo apt update -y
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

Onde 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" | head

Crie 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>
HTML

Se 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 httpd

Ubuntu:

sudo apt update -y
sudo apt install -y apache2
sudo systemctl enable apache2
sudo systemctl start apache2

Diretó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>
HTML

Confirmando 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_PUBLICO

O 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}
CSS

Depois, 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 .pem correto e com permissão chmod 400.
  • Usuário errado? Tente ec2-user (Amazon Linux) ou ubuntu (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 apache2

Inicie/reinicie:

sudo systemctl start nginx
sudo systemctl restart nginx

Ou para Apache:

sudo systemctl restart httpd
sudo systemctl restart apache2

4) Página não atualiza ou aparece a página padrão

  • Você editou o arquivo no diretório errado. Confirme o root do 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 sudo ao escrever em diretórios do servidor web.
  • Confirme permissões e dono:
ls -la /usr/share/nginx/html
ls -la /var/www/html

Se 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

Agora responda o exercício sobre o conteúdo:

Para conseguir acessar um site hospedado em uma instância EC2 diretamente pela internet usando o IP público, qual configuração de rede é a mais necessária?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Para o site ser acessível pela internet via IP/DNS público, a instância precisa estar em uma sub-rede pública (com rota para Internet Gateway) e ter um IP público atribuído.

Próximo capitúlo

AWS para Iniciantes: Armazenamento essencial para o site (EBS e noções de S3)

Arrow Right Icon
Capa do Ebook gratuito AWS para Iniciantes: Hospedando um Site com Segurança e Boas Práticas (Sem Complicação)
45%

AWS para Iniciantes: Hospedando um Site com Segurança e Boas Práticas (Sem Complicação)

Novo curso

11 páginas

Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.