Pular para o conteúdo principal
Ludmila Silva
Cloud & DevOps Engineer
Ver todos os autores

Alternativas ao LocalStack que você deveria conhecer

· 5 min para ler
Ludmila Silva
Cloud & DevOps Engineer

A partir do dia 31 de março de 2026, o LocalStack deixou de disponibilizar a versão Community, movendo diversos serviços core para planos pagos. Na prática, isso impacta diretamente aqueles que utilizavam a ferramenta para testes sem custo.

Mas se tem algo interessante na comunidade open source é que se uma porta fecha, outras várias são abertas. Por isso, resolvi reunir algumas opções open source para quem quer continuar desenvolvendo e testando localmente, com foco em AWS, mas sem estourar o orçamento no fim do mês.

Ah, além de falar brevemente dessas soluções, vamos fazer alguns testes rápidos. Por isso, certifique-se de ter o Docker e AWS CLI instalados.

Bora lá?

Floci

Eu encontrei o Floci em um post no LinkedIn escrito pelo Fabiano Moura, e achei a proposta muito válida: ser acessível e open source desde o início.

Atualmente, o Floci emula 22 serviços da AWS, desde o S3 ao CloudFormation. Ainda há serviços core da AWS não disponíveis, mas ele consegue cobrir diversos casos de estudo e testes.

Rodando em Docker com uma imagem bem leve, o Floci usa a mesma porta (a 4566) e mesmo protocolos e chamadas AWS SDK que o LocalStack, o que facilita a curva de aprendizado.

Instalando e testando o Floci

Para instalar o Floci, vamos usar o padrão com um container Docker. Para isso, execute o comando abaixo:

# Rodar o container em segundo plano
docker run --rm -d -p 4566:4566 hectorvent/floci:latest

Depois, vamos configurar a AWS CLI com o export das credenciais fake:

export AWS_ENDPOINT=http://localhost:4566
export AWS_DEFAULT_REGION=us-east-1
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test

Por fim, fazer alguns testes criando um Bucket S3, subindo um arquivo .txt e listando os objetos do bucket:

# Criando um bucket S3
aws s3 mb s3://my-bucket --endpoint-url $AWS_ENDPOINT

# Subindo um arquivo .txt
echo "hello floci" | aws s3 cp - s3://my-bucket/hello.txt --endpoint-url $AWS_ENDPOINT

# Listando os objetos do bucket criado
aws s3 ls s3://my-bucket --endpoint-url $AWS_ENDPOINT

Resultado:

Imagem: Saída do terminal (CLI) exibindo o comando aws s3 ls mostrando o arquivo hello.txt dentro do bucket my-bucket, confirmando que o upload foi realizado com sucesso no Floci.

Ministack

O Ministack apareceu para mim após uma postagem do Thiago Augusto Ozores no LinkedIn, e já virou um dos meus favoritos.

Ele permite emular 33 serviços da AWS, e se diferencia por executar contêineres reais para serviços críticos, tais como RDS, ElastiCache, Docker via ECS e consultas SQL com DuckDB (Athena), em vez de apenas simular as chamadas de API.

O Ministack é leve e rápido, com uma imagem de cerca de 150MB. Assim como o Floci e o LocalStack, ele também usa a porta 4566, e isso facilita o uso porque basta apenas mudar o endpoint dos laboratórios e ambientes.

Instalando e testando o Ministack

Assim como fizemos com o Floci, vamos subir um container do Ministack com o comando:

# Rodar o container em segundo plano
docker run -d -p 4566:4566 nahuelnucera/ministack

Vamos criar um Bucket S3 de teste com o comando:

# Criando um bucket S3 no ministack
aws s3 mb s3://my-local-bucket \
--endpoint-url http://localhost:4566 \
--region us-east-1

Resultado:

Imagem: Saída do terminal (CLI) exibindo o comando aws s3 mb indicando “make_bucket: my-local-bucket”, confirmando que o bucket foi criado com sucesso no ambiente do Ministack.

kumo

Por último, mais não menos importante, temos o kumo, que conheci por uma postagem do Everton Marques (também no LinkedIn!).

Escrito em Go, ele suporta 71 serviços da AWS! O kumo oferece um conjunto enxuto de funcionalidades, incluindo: execução sem autenticação, suporte a Docker, baixo consumo de recursos e inicialização rápida.

Assim como os outros colegas, o kumo também utiliza a porta 4566. Então, basta apenas mudar o endpoint para utilizar nos seus projetos.

Sem mais delongas, vamos fazer um teste rápido do kumo também!

Instalando e testando o kumo

# Rodar o container em segundo plano
docker run -d -p 4566:4566 ghcr.io/sivchari/kumo:latest

E lá vamos nós para mais um teste de bucket S3 rsrs:

# Criando um bucket S3 no kumo
aws s3 mb s3://my-kumo-bucket \
--endpoint-url http://localhost:4566 \
--region us-east-1

Resultado:

Imagem: Saída do comando aws s3 mb, com o my-kumo-bucket criado

Imagem: Saída do terminal (CLI) exibindo o comando aws s3 mb indicando “make_bucket: my-kumo-bucket”, confirmando que o bucket foi criado com sucesso no Kumo.

Considerações finais

O fim da versão gratuita do LocalStack pode parecer um problema à primeira vista, mas hoje aprendemos que ele abriu espaço para novas ferramentas. Isso nos permite testar alternativas e repensar o fluxo de desenvolvimento local focado em AWS.

Mas me conta aí, você já testou alguma dessas opções? Usa outra alternativa? Ou ainda segue utilizando o LocalStack firme e forte?

Até mais e bons estudos!

Referências

AWS com LocalStack e Terraform

· 12 min para ler
Ludmila Silva
Cloud & DevOps Engineer

Uma das principais dores de quem está estudando Cloud AWS é não conseguir aplicar o conteúdo na prática. É fato que nem sempre podemos ter uma conta da AWS com um cartão de crédito disponível, ou mesmo ter recursos financeiros para subir uma infraestrutura com os serviços necessários. E a gente sabe que não há nada melhor do que aplicar o conteúdo, experimentar, "quebrar" as coisas e entender como tudo funciona. Porém, fica o dilema de não ter acesso ou de praticar correndo o risco de ter infelizes surpresas na fatura do cartão no fim do mês.

Para resolver esse problema, existe uma ferramenta muito legal e que tem sido muito útil nos meus labs, permitindo emular alguns dos principais serviços da AWS e interagir através da linha de comando (CLI), SDKs e IaC: o LocalStack.

O objetivo deste artigo é apresentar o LocalStack e como ele pode ser utilizado junto com o Terraform para ambientes de estudo mais próximos dos cenários reais, mas sem pesar no bolso.

Então, bora lá conhecer essa ferramenta sensacional?

O que é e como funciona o LocalStack?

O LocalStack é uma ferramenta gratuita que emula serviços da AWS de forma local, rodando em um container Docker. Isso permite interagir e testar serviços como EC2, S3, VPC, CloudWatch, SQS, Route 53, ACM, entre outros. Com ele, podemos criar ambientes de teste com a mesma estrutura (inclusive de código!) que faríamos caso estivéssemos usando a própria AWS.

Com ele, fazemos com que a API do LocalStack responda no lugar da API da AWS, permitindo realizar testes de Infraestrutura como Código (IaC), validar pipelines CI/CD, scripts de automação, etc. Não é massa?

Agora que já temos um overview sobre o LocalStack, vamos partir para a instalação.

Instalando o LocalStack

Para utilizar o LocalStack, você precisa ter instalado:

Para não deixar este artigo muito longo, optei por não detalhar a instalação dos pré-requisitos. Um ponto importante é que vamos usar a AWS CLI, e por isso precisamos configurar com as credenciais para o LocalStack.

Para isso, após instalar a AWS CLI, rode o comando aws configure e preencha com as seguintes informações:

  • AWS Access Key ID: test
  • AWS Secret Access Key: test
  • Default region name: us-east-1
  • Default output format: json

AWS configure - exemplo do comando preenchido com Key Id, secret acess key, default region e output format

Feito isso, vamos seguir com a instalação, porém, há um detalhe importante: a partir de março de 2026, o LocalStack vai deixar de manter uma versão Community realmente ativa e vai exigir autenticação (login/token) para usar a imagem principal (localstack/localstack:latest).

Portanto, antes de realmente instalar, é necessário:

  1. Criar uma conta usando e-mail ou autenticação via Google ou GitHub;

  2. Clicar no link de ativação, enviado por email

  3. Preencher os dados para iniciar uma versão de testes do Pro durante 15 dias (sem necessidade de cadastrar o cartão de crédito):

Tela de login do LocalStack para iniciar a versão trial - com campos para preencher o nome e botão "Start Trial"

Após preencher, seremos direcionados para as instruções de download, instalação e configuração do LocalStack:

Página com as instruções de instalação, configuração e deploy do Localstack

Nesse tutorial, vou seguir com o padrão Linux, então, copiei o link do binário e segui com os comandos:

## Baixando o binário

curl --output localstack-cli-4.13.1-linux-amd64-onefile.tar.gz \
--location https://github.com/localstack/localstack-cli/releases/download/v4.13.1/localstack-cli-4.13.1-linux-amd64-onefile.tar.gz

## Extrair o binário para /usr/local/bin
sudo tar xvzf localstack-cli-4.13.1-linux-*-onefile.tar.gz -C /usr/local/bin

## Validar a versão
localstack --version

## Configurar o token (está no passo 2 da página Getting Started)
localstack auth set-token `<use_seu_token_aqui>`

Com tudo ok, vamos dar um start no LocalStack com o comando:

## Rodar o LocalStack em segundo plano
localstack start -d

O comando acima vai iniciar uma instância do Localstack no localhost, utilizando a porta 4566, dessa forma aqui:

Exemplo do Localstack startado, com a informação de que está "running"

Para testar se tudo deu certo mesmo, vamos simular a criação de um Bucket S3:

## Setar LocalStack Endpoint URL:
export LOCALSTACK_ENDPOINT=http://localhost:4566

## Criar o Bucket
aws --endpoint-url=$LOCALSTACK_ENDPOINT s3 mb s3://meu-primeiro-bucket

## Listar o Bucket
aws --endpoint-url=$LOCALSTACK_ENDPOINT s3 ls

E veja ele aí, Bucker criado e listado:

Exemplo com a saída do comando para listar o Bucket, retornando o meu-primeiro-bucket como saída do comando

Acessando o dashboard

Além de verificar e interagir com os recursos via CLI, também podemos usar uma interface gráfica (GUI) que nos ajuda a ter uma percepção mais "real" do que estamos construindo.

Para acessar esse dashboard, vá para a mesma página em que criamos a conta e pegamos os dados do token, clique na aba lateral esquerda, em Instances... E voilá! Os recursos disponíveis estão todos aí:

Página principal do dashboard do LocalStack, com UI com mais de 20 serviços listados, desde serviços de App Integration (API Gateway, SQS, MQ, entre outros), Compute (EC2, Lambda, ECS, entre outros), Storage (S3, Backup, entre outros) e diversos outros serviços AWS.

Agora que fizemos e acontecemos no LocalStack, você acha que acabou? Segura aí, que ainda tem mais mão na massa: vamos subir um website estático usando o Terraform!

Criando a infra LocalStack com Terraform

Primeiro, é necessário ter o Terraform instalado. Então, vou deixar aqui a documentação do Terraform para seguirem com a instalação, conforme o seu sistema operacional. Após instalação, use o comando terraform --version para validar a versão instalada. Feito isso, indico criar um diretório a parte para começarmos com esse projeto.

Dentro do diretório, crie os arquivos index.html e error.html, que serão as páginas dos website. Caso você não tenha arquivos para subir, pode usar o conteúdo os arquivos a seguir:

index.html

`<!DOCTYPE html>`
`<html lang="pt-br">`
`<head>`
`<meta charset="UTF-8">`
`<title>`Site estático com Terraform + LocalStack`</title>`
`</head>`
`<body style="margin:0; font-family: Arial, Helvetica, sans-serif; background-color:#0f172a; color:#f1f5f9; display:flex; align-items:center; justify-content:center; height:100vh;">`

`<div style="text-align:center; background-color:#1e293b; padding:40px; border-radius:12px; box-shadow:0 10px 25px rgba(0,0,0,0.3); max-width:600px;">`
`<h1 style="color:#38bdf8; margin-bottom:20px;">`
Chegaaaa mais... Deploy realizado com sucesso!
`</h1>`

`<p style="font-size:18px; line-height:1.6;">`
Este site estático foi provisionado utilizando
`<strong>`Terraform`</strong>` para criar um bucket S3
e publicado localmente com `<strong>`LocalStack`</strong>`.
`</p>`

`<p style="margin-top:20px; font-size:16px; color:#94a3b8;">`
Infraestrutura como Código + Ambiente AWS Local =
desenvolvimento mais rápido, seguro e econômico. Show, né?
`</p>`

`<div style="margin-top:30px; padding:10px; background-color:#0ea5e9; border-radius:8px; font-weight:bold;">`
🌍 Ambiente: LocalStack (AWS Emulator)
`</div>`
`</div>`

`</body>`
`</html>`

error.html

`<!DOCTYPE html>`
`<html lang="pt-br">`
`<head>`
`<meta charset="utf-8">`
`<title>`404`</title>`
`</head>`
`<body style="margin:0; font-family: Arial, Helvetica, sans-serif; background: linear-gradient(135deg, #1e293b, #0f172a); color:#f1f5f9; display:flex; align-items:center; justify-content:center; height:100vh;">`

`<div style="text-align:center; background-color:#1e293b; padding:40px; border-radius:12px; box-shadow:0 10px 25px rgba(0,0,0,0.4); max-width:400px; width:90%;">`

`<h1 style="margin:0 0 20px 0; font-size:48px; color:#f86538;">`
Ops... Deu ruim!
`</h1>`

`<p style="font-size:18px; margin:0; color:#cbd5e1;">`
404. Algo de errado não está certo.
`</p>`

`</div>`

`</body>`
`</html>`

Em seguida, vamos criar um arquivo chamado providers.tf, com o seguinte conteúdo:

terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}

provider "aws" {
access_key = "test"
secret_key = "test"
region = "us-east-1"

s3_use_path_style = false
skip_credentials_validation = true
skip_metadata_api_check = true

endpoints {
s3 = "http://s3.localhost.localstack.cloud:4566"
iam = "http://localhost:4566"
sts = "http://localhost:4566"
}
}

Aqui, estamos informando ao Terraform qual versão do provider AWS que ele deve usar, setando a versão como 5.x.; e que ele deve se conectar com o LocalStack, e não para a AWS real. Setamos também credenciais fictícias para facilitar a conexão com o ambiente do simulador.

Em seguida, vamos criar as variáveis reutilizáveis que serão utilizadas no projeto, através do arquivo variables.tf, com o seguinte conteúdo:

variable "bucket_name" {
description = "Name of the s3 bucket"
type = string
default = "mywebsites3"
}

variable "tags" {
description = "Tags to set on the bucket"
type = map(string)
default = {}
}

Basicamente, definimos que podemos alterar tanto o nome do Bucket quanto as tags, tornando esse mini projeto mais organizado e flexível. No bucket_name, foi definido um parâmetro default para o nome do Bucket, apenas para facilitar o processo. O ideal

Agora, vamos criar um outro arquivo main.tf que vai ser responsável pela criação dos recursos, ou seja, do Bucket S3, das configurações de website estático, da policy e fazer o upload dos arquivos HTML.

## Criar o bucket
resource "aws_s3_bucket" "s3_bucket_tf" {
bucket = var.bucket_name
tags = merge(
var.tags, {
Name = "${var.bucket_name}-static-website"
}
)
}

## Configurar o bucket para hospedar um site estático
resource "aws_s3_bucket_website_configuration" "s3_static_website_config" {
bucket = aws_s3_bucket.s3_bucket_tf.id

index_document {
suffix = "index.html"
}

error_document {
key = "error.html"
}
}

## Bucket policy e ACL
resource "aws_s3_bucket_acl" "s3_bucket_acl" {
bucket = aws_s3_bucket.s3_bucket_tf.id
acl = "public-read"
}

resource "aws_s3_bucket_policy" "s3_bucket" {
bucket = aws_s3_bucket.s3_bucket_tf.id

policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Sid = "PublicReadGetObject"
Effect = "Allow"
Principal = "*"
Action = "s3:GetObject"
Resource = [
aws_s3_bucket.s3_bucket_tf.arn,
"${aws_s3_bucket.s3_bucket_tf.arn}/*",
]
},
]
})
}

## Upload dos arquivos para o bucket
resource "aws_s3_object" "object_www" {
depends_on = [aws_s3_bucket.s3_bucket_tf]
for_each = fileset("${path.root}", "*.html")
bucket = var.bucket_name
key = basename(each.value)
source = each.value
etag = filemd5("${each.value}")
content_type = "text/html"
acl = "public-read"
}

Sobre os blocos de recursos, o bloco aws_s3_object usa a função fileset para mapear os arquivos HTML que estiverem na pasta raiz do projeto. Por isso, lembre-se de mantê-los no mesmo diretório que os arquivos do Terraform. Além disso, o parâmetro etag garante que o Terraform detecte mudanças no conteúdo dos arquivos.

E por fim, vamos criar um arquivo chamado outputs.tf que vai conter informações de saída, tais como o ARN do Bucket e o endpoint do website.

output "arn" {
description = "ARN of the bucket"
value = aws_s3_bucket.s3_bucket_tf.arn
}

output "bucket_name" {
description = "Name (id) of the bucket"
value = aws_s3_bucket.s3_bucket_tf.id
}

output "website_endpoint" {
value = aws_s3_bucket_website_configuration.s3_static_website_config.website_endpoint
}

Agora, execute os comandos:

## Inicializar o projeto
terraform init

## Formatar os arquivos
terraform fmt

## Validar a sintaxe e configurações
terraform validate

## Mostar o plano de execução
terraform plan

## Aplicar as mudanças
terraform apply -- auto-approve

Após o apply, acesse o endpoint no navegador, usando esta URL: http://mywebsites3.s3-website.localhost.localstack.cloud:4566/

E olha ele aí!

Página principal com mensagem de sucesso. Fundo escuro, com título escrito "Chegaaaa mais... Deploy realizado com sucesso!"

Inclusive, com a página de erro também:

Página com erro 404. Fundo escuro, com título em vermelhor escrito "Ops.. Deu ruim!". Subtítulo em cor branca, escrito "404. Algo de errado não está certo."

Massa demais, não é? Para finalizar, vamos limpar o nosso ambiente, removendo os recursos usando o comando terraform destroy --auto-approve

Simples assim.

Extra: como usar o LocalStack for Students

Na versão free do LocalStack, há 30 serviços disponíveis para brincar à vontade. No entanto, a medida em que os estudos e projetos vão ficando cada vez mais complexos, isso pode não ser o bastante. A mão de subir um EKS chega até a arder...

Infelizmente, a questão financeira pode ser uma pequena barreira aqui, mas há uma luz no fim do túnel: o LocalStack for Students!

Caso você tenha uma conta do GitHub Student Developer Pack, você tem acesso a diversos recursos para além da licença free. Os recursos incluem: AWS Glue, EMR, Lake Formation, Amazon MQ, Cost Explorer, Elastic Beanstalk, ECS, EKS, entre outros. Tem muita coisa mesmo.!Além disso, você tem 1.000 créditos mensais em CI/CD para integrar e implantar continuamente desenvolvimentos locais.

Não é massa? Caso tenha alguma dúvida sobre como configurar o GitHub Student Developer Pack, escrevi aqui um artigo para auxiliar.

Palavras finais

Com este artigo, quis mostrar para vocês uma pequena parte do que é possível fazer com o LocalStack, aliado a outras ferramentas, tais como o Terraform.

Por motivos didáticos, resolvi não utilizar o tflocal e o awslocal, que são wrappers que automatizam apontamento dos endpoints para o ambiente local. Optei pela configuração manual para entendermos melhor como a comunicação entre as ferramentas funciona.

Espero que este pequeno guia ajude você a praticar Cloud sem medo e sem receio de custos inesperados.

Bons estudos e até a próxima!

Referências

Docker sem mistério: um guia para iniciar no mundo dos containers

· 13 min para ler
Ludmila Silva
Cloud & DevOps Engineer

Introdução

Se voltarmos alguns bons anos, quando queríamos rodar uma aplicação em uma máquina com um sistema operacional, era necessário realizar uma série de configurações no ambiente, instalar diversos componentes, além de ajustar o hardware para suportar a carga de trabalho.

Pouco depois, surgiu a virtualização, que adicionou uma camada de abstração e isolamento entre o sistema operacional e hardware, o que chamamos de hipervisor. Ela possibilitou um melhor aproveitamento do hardware e a execução de vários sistemas isolados em diferentes máquinas virtuais. Porém, ainda precisávamos instalar e configurar o ambiente, suas dependências e fazer demais ajustes. A portabilidade era um caso à parte, o que tornou muito comum a frase: "Na minha máquina funciona!".

A containerização veio como uma forma mais leve e prática de empacotar as aplicações junto com tudo aquilo que elas necessitam para rodar: bibliotecas, dependências e demais configurações. Isso facilitou não só a execução, mas também o versionamento e portabilidade das aplicações.

E se podemos falar de uma plataforma que "democratizou" a containerização, essa é o Docker. O querido esteve e ainda está presente desde o desenvolvimento local até pipelines de CI/CD e ambientes de produção - e iremos falar melhor sobre isso no decorrer deste artigo.

Então, para alinharmos: o objetivo aqui é trazer um overview sobre o Docker, focando apenas no básico para que você possa progredir no mundo dos containers, caso assim deseje.

Bora lá?

O que é o Docker e o que são containers

O Docker é uma plataforma open source que viabiliza o desenvolvimento, distribuição e execução de aplicações. Criado em 2013 e baseado no LXC (Linux
Containers), pela até então chamada dotCloud, o Docker buscava resolver uma das grandes dores de cabeça no desenvolvimento de aplicações.... Sim, o famoso: "na minha máquina funciona".

Isso acontece porque o Docker utiliza o conceito de containers, que garantem que os aplicativos e suas dependências sejam "empacotados". Ou seja, que eles possam funcionar de forma consistente em qualquer ambiente.

Falando sobre os famigerados containers, a palavra-chave aqui é: isolamento. Isto porque eles são uma forma de agrupar uma aplicação e suas dependências, utilizando o kernel do sistema operacional do host, ou seja, da máquina (virtual ou física) onde está rodando. Assim, eles possibilitam o isolamento lógico (de processos, rede, usuários, etc.) e o isolamento de recursos (CPU, RAM, I/O), garantindo que a aplicação funcione de forma consistente e segura.

From: docker.com

Toda essa mágica ocorre por causa de funcionalidades do kernel Linux, especificamente dos:

  • cgroups (Grupos de controle), que permitem o isolamento de recursos como CPU, memória, etc.;
  • e os Namespaces, que são responsáveis por fazer com que cada container possua seu próprio environment, ou seja, cada container terá a sua árvore de processos, pontos de montagens, isolamento de filesystem, network, usuários, e por ai vai.

Ah, e não podemos esquecer do Chroot, uma syscall do Linux que permite alterar o diretório raiz de um processo e seus filhos.

Embora o Docker seja a solução mais popular, ele não foi a primeira nem é a única forma de executar containers. Mas, sem dúvidas, foi a solução que mais se destacou e se consolidou como ferramenta de conteinerização.

Quando usar o Docker?

Há quem diga que "o Docker já era" ou que ele não faz mais sentido hoje em dia. Na verdade, temos um ponto a ser discutido aí: não é que o Docker tenha caído em desuso, mas sim que, quando começamos a trabalhar com muitos containers e a dividir as aplicações em diversos serviços menores (o que chamamos de arquitetura de microsserviços), o gerenciamento do ambiente pode se tornar extremamente caótico.

Em um ambiente de produção, apenas dividir tudo em microsserviços e rodar containers não é o bastante. Precisamos escalar de forma rápida, garantir a alta disponibilidade, monitorar recursos, entre outras tarefas. Fazer isso com 10 containers é moleza, mas imagine fazer o mesmo centenas ou milhares deles?

Para lidar com toda essa complexidade, existem as ferramentas de orquestração de containers, como o Kubernetes. Os orquestradores automatizam o ciclo de vida dos containers, cuidando de tarefas que seriam impossíveis de fazer "na mão" em larga escala.

Portanto, usar o Docker sozinho em cenários de produção não é mesmo o ideal. Porém, ele continua sendo uma excelente ferramenta a ser usada nos seus estudos, no processo de compreender o desenvolvimento e de realizar testes locais. Ele é a porta de entrada para o mundo dos containers.

Além disso, ele ainda está como pano de fundo por trás da mágica dos orquestradores, já que utilizam container runtimes (como o containerd, que veio do próprio Docker) para criar e executar os containers. No fim das contas, mesmo quando ele não aparece no palco principal, o padrão que o Docker criou é o que sustenta todo esse ecossistema.

💡

OBS: Não se engane! Sabemos que para grandes ambientes de produção o uso do Docker "puro" não é recomendável, maaaaas infelizmente ainda existem muitos negócios que o utilizam dessa forma. Então, pode ser que você se depare com um cenário sem um orquestrador e cheio de containers Docker para gerenciar.... Eu lhe desejo boa sorte! 👀

Agora que entendemos o que é e quando usar o Docker, vamos colocar a mão na massa!

Instalando o Docker

Por padrão, vamos considerar a instalação do Docker no Linux. Para o nosso exemplo, estou usando uma Vagrantbox com o Ubuntu Jammy 22.04 (LTS) e também meu Pop!_OS, mas você pode utilizar a distro que melhor lhe agradar ou que for mais acessível para o momento.

Para seguirmos, abra o terminal e rode o seguinte comando:

## Executar o script
curl -fsSL https://get.docker.com | bash

Não tem muito segredo aqui: estamos usando um script oficial para automatizar o processo de instalação do Docker Engine (daemon + CLI) e configurar os repositórios, pacotes e dependências.

A saída do script irá trazer a versão do Docker Engine instalado:

Agora, vamos facilitar a nossa vida e permitir executar os comandos do Docker sem a necessidade de usar o sudo toda hora, utilizando o modo rootless (outra forma comum seria adicionar o seu usuário ao grupo docker).

## Para rodar os comandos sem o sudo
dockerd-rootless-setuptool.sh install

########## BEGIN ##########
sudo sh -eux <<EOF
# Install newuidmap & newgidmap binaries
apt-get install -y uidmap
EOF
########## END ##########

Para testar se deu certo, você pode rodar os comandos:

## Ver a versão do Docker
docker version

## Rodar a imagem do hello-world
docker run hello-world

Perceba que, ao executar o docker run, o Docker vai baixar a imagem hello-world (pois não a temos localmente) e executar um container. Vamos falar sobre a execução de containers depois, mas a saída que você verá é mais ou menos esta:

Show, né? Para instalar o Docker no Windows ou Mac, você pode utilizar o Docker Desktop.

O que são imagens e como criar um Dockerfile

No Docker, as imagens são como moldes: uma abstração da infraestrutura em estado de leitura (read-only), a partir de onde será criado o container. Uma vez gerada a imagem, ela é imutável e não "roda" sozinha. Em resumo, ela apenas fornece as instruções a partir das quais um container é criado.

Já os containers são instâncias "vivas" de uma imagem. Eles podem ser criados, iniciados, parados, movidos ou excluídos. Em geral, um container nasce isolado dos demais containers e da máquina host. E ele só pode ser criado a partir de, e somente de, uma única imagem.

Para criarmos nossa primeira imagem, vamos utilizar um arquivo chamado Dockerfile e inserir nele o conteúdo abaixo:

### Imagem base
FROM ubuntu:22.04

## Executar comandos durante a criação da imagem
RUN apt-get update && apt-get install nginx -y

## Expor uma porta
EXPOSE 80

## Executar comandos quando o container for executado
CMD ["nginx", "-g", "daemon off;"]

Agora, vamos entender com calma cada etapa desse Dockerfile:

  • FROM - aqui nós informamos qual imagem usaremos como base (no nosso caso, é a Ubuntu 22.04). É o ponto de partida sobre o qual vamos construir nossa solução;
  • RUN - aqui nós informamos quais comandos serão executados no momento de criação (build) da imagem;
  • EXPOSE - serve para expor uma porta (a-ha!). Com ele, definimos qual porta o container vai "ouvir";
    • Aqui cabe uma ressalva: isso não abre a porta por si só, mas documenta e facilita quando rodarmos o container.
  • CMD - aqui informamos qual comando será executado por padrão quando o container iniciar a partir dessa imagem, ou seja, é o que vai rodar quando o container subir. Entendendo um pouquinho:
    • nginx - vai iniciar o Nginx server;
    • -g e daemon off - serve para impedir que o Nginx gere seus processos e depois os encerre. Dessa forma, ele vai rodar em primeiro plano e evitar que o container morra.

Salve o arquivo e bora seguir para os próximos passos.

Buildando a imagem e rodando o container

Agora é a hora de fazer a mágica e transformar esse Dockerfile em algo real. Para isso, usamos o comando de build:

## Buildar
docker image build -t meu-nginx:1.0 .

Onde:

  • docker image build: é a instrução básica para criar uma imagem;
  • -t meu-nginx:1.0: a flag -t se refere a tag, e serve para darmos um nome e uma versão para a imagem, que no caso vai ser meu-nginx:1.0. Caso não informemos a versão, o Docker vai colocar :latest como padrão;
  • .: o ponto no final indica o contexto de build, e aqui estamos informando ao Docker que o Dockerfile está no diretório atual.

Já temos uma imagem pronta, porém, ela ainda não está rodando. Precisamos executar a nossa imagem, ou seja, criar o container:

## Executar a imagem
docker run -d -p 8080:80 --name meu-nginx meu-nginx:1.0
  • docker run: comando que cria e executa um container a partir de uma imagem;
  • -d: essa flag permite que o container rode em segundo plano, liberando o terminal (chamado de modo detached);
  • -p 8080:80: mapeia portas no formato "porta_host:porta_container", permitindo que o que chegue na porta 8080 do host seja direcionado para a porta 80 do container;
  • --name meu-nginx: aqui definimos um nome ao container. Caso você não use, o Docker irá utilizar algum nome aleatório como focused_curie, nervous_hopper ou algo do tipo;
  • meu-nginx:1.0: aqui informamos qual imagem deve ser usada para subir o container.

Com o container em execução, vamos seguir para testar alguns comandos. Bora lá!

Comandos básicos

Já aprendemos a como criar, buildar e executar, vou deixar aqui os comandos básicos para usar no dia-a-dia. Considere-os como um mini kit de sobrevivência, então brinque à vontade com eles:

## Listar os containers em execução
docker container ls

## Listar os containers (incluindo os parados)
docker container ls -a

## Listar imagens
docker image ls

## Inspecionar um container
docker container inspect [ID ou nome do container]

## Ver os logs de um container
docker container logs [ID ou nome do container]

## Ver os logs em tempo real
docker container logs -f [ID ou nome do container]

## Iniciar um container parado
docker container start [ID ou nome do container]

## Parar um container
docker container stop [ID ou nome do container]

## Remover um container
docker container rm [ID ou nome do container]

Observação: para remover um container, ele precisa estar parado. Podemos até usar a flag -f, mas nunca é o ideal.

Acessando um Container

Com o seu kit de sobrevivência em mãos, eis o momento de acessar um container que está rodando. Para entender como funciona, vamos executar um container de forma interativa (com as flags -t para o terminal, e -i para interatividade):

## Criando um container de forma interativa
docker container run --name meu-ubuntu -ti ubuntu

O Docker irá fazer o pull da versão latest do Ubuntu, abrindo o terminal. Olha só que legal, estamos dentro do Ubuntu:

Para sair desse container, jamais use o comando exit ou Ctrl+D, pois isso irá matar o processo principal e encerrar o container.

Então, para sair de forma segura, use Ctrl + P + Q.

Usando o attach

Podemos nos conectar a um container em execução utilizando o comando docker container attach [ID ou nome do container]

Porém, cabe um adendo importante aqui: o attach conecta diretamente ao processo principal do container. Caso você use um Ctrl + C nesse container, ele vai interromper o processo principal e morrer.

Usando o exec

Com o exec podemos rodar um comando em um container em execução:

Isso possibilita também executar o bash como um novo processo com o docker container exec -it [ID ou nome] bash:

O exec tem uma vantagem bem interessante para este caso: se usarmos o exit ou Ctrl+D, o container continua rodando normalmente. Isto ocorre porque não encerramos o processo principal, sendo esse comando o mais indicado para alguns casos de troubleshooting e manutenção.

Publicando sua imagem no Docker Hub

Já criamos nossa imagem e testamos localmente, agora vamos disponibilizá-la em um repositório (registry) de imagens. Por quê? Bem, porque isso facilita a portabilidade da aplicação, permitindo também armazenar, versionar e compartilhar as imagens.

Existem várias opções de repositórios, tanto públicos quanto privados, mas utilizaremos o Docker Hub por ser o mais popular. Então, para seguirmos é necessário que você crie uma conta aqui.

Após criar sua conta, vamos fazer o login via terminal:

## Docker login
docker login -u nome_de_usuario

OBS: O comando vai pedir a senha, mas você pode usar também um token de acesso.

Em seguida, precisamos renomear a tag da imagem do Nginx que criamos anteriormente, acrescentando o seu nome de usuário, seguindo o padrão usuario/nome-da-imagem:versao):

## Renomear a imagem
docker image tag meu-nginx:1.0 nome_de_usuario/meu-nginx:1.0

Exemplo:

Por fim, vamos fazer o push para o Docker Hub:

## Fazer o push da imagem
docker push nome_de_usuario/meu-nginx:1.0

E voilá! Aqui está a minha querida no repositório e disponível publicamente:

Conclusão

Uau! Foi uma pequena jornada que passamos aqui com o Docker, hein? Mas tem muita coisa para aprender e, como o objetivo deste post era fazer uma introdução ao Docker, muita coisa ficou de fora: volumes, network, multi-stage build, docker compose e por aí vai.

Eu espero que este pequeno guia possa ajudar no seu aprendizado, mas é muito importante que você coloque a mão na massa para fixar melhor.

Por fim, deixo logo abaixo algumas recomendações para seguir seus estudos e se aprofundar no mundo dos containers.

Te vejo na próxima!

Recomendações de leituras e cursos

Criando um fileserver com o Amazon EFS

· 8 min para ler
Ludmila Silva
Cloud & DevOps Engineer

Voltando com nossos tutoriais da AWS, hoje vamos abordar uma solução de compartilhamento de arquivos entre instâncias EC2.

O que é um fileserver

No ambiente on premises, utilizamos fileservers quando queremos compartilhar arquivos via rede para usuários ou aplicações.

Um fileserver (ou servidor de arquivos) nada mais é que um sistema criado para armazenar, gerenciar e compartilhar arquivos em uma rede. Através do fileserver, os usuários podem acessar documentos, imagens, vídeos e outros tipos de arquivos de forma centralizada, o que facilita a colaboração.

Normalmente, os servidores de arquivos operam com protocolos como SMB (Windows) e NFS (Linux), exigindo administração para gerenciamento de permissões, espaço em disco e desempenho.

O que é o EFS

O Amazon Elastic File System (EFS) é um serviço de armazenamento de arquivos gerenciado e escalável. Ele permite criar e compartilhar sistemas de arquivos entre várias instâncias da AWS, como EC2, containers e funções Lambda, de forma simples e segura.

Diferente dos servidores de arquivos tradicionais, o EFS não exige provisionamento de capacidade em disco, pois ele é escalável. Além disso, oferece alta disponibilidade com replicação automática entre zonas de disponibilidade (AZs). Cabe ressaltar que ele utiliza o protocolo NFS, portanto, é usado em Linux.

Em cenários em que é necessário armazenar arquivos e compartilhar com várias instâncias, ou que o volume de dados pode variar significativamente, a solução mais indicada é fazer uso do EFS - ao invés de um Elastic Block Store (EBS) por exemplo.

Até o presente momento em que este tutorial foi preparado, a AWS oferece 12 meses gratuitos de armazenamento com o EFS, com 5GB de espaço.

Agora que já sabemos o que é o EFS, vamos colocar as mãos na massa!

Passo a passo: servidor de arquivos com o EFS

1) Crie Grupos de Segurança

Primeiramente, vamos criar dois Grupos de Segurança. Para isso, temos que:

  • Acessar a console AWS ->ir em EC2 -> Grupos de Segurança -> clicar em Criar grupo de segurança

Para esse primeiro grupo, forneça um nome e uma descrição. Ele será o SG que vai permitir acessarmos a instância EC2 via SSH, mas limitando esse acesso ao IP da sua máquina local. Portanto, em Regras de Entrada:

  • Clique em Adicionar regra -> em Origem selecione Meu IP -> clique em Criar grupo de segurança

O segundo grupo será para o EFS liberar para a instância o protocolo NFS. Para isso, crie um novo grupo de segurança:

Adicione uma regra de entrada com as informações:

  • Tipo NFS, Origem Personalizado -> busque pelo Grupo de segurança criado para a EC2 e selecione o grupo -> e clique em Criar grupo de segurança

2) Criando o EFS

Agora vamos efetivamente criar o EFS:

  • Pesquise por EFS na console -> clique em Criar sistema de arquivos

Uma janela pop-up será aberta para criar o EFS, mas vamos selecionar a opção Personalizar para criarmos nosso sistema de arquivos:

Na janela de configuração do EFS, vamos definir as seguintes informações:

  • Nome do sistema de arquivos
  • Tipo de sistema de arquivos: marque Regional
  • Desmarque a caixa Habilitar backups automáticos

Mais abaixo, em Configurações de performance, deixe:

  • Modo de taxa de Transferência: Avançado
  • Marque o Elastic (Recomendado)
  • Modo de desempenho: Uso geral

Por fim, clique em Próximo.

Em Acesso à rede, como estou usando a VPC padrão da AWS - no Norte da Virgínia, o EFS vai listar todas as zonas de disponibilidade disponíveis para esta VPC. Nós vamos remover 4 delas, e deixar apenas a us-east-1a e us-east-1b.

Além disso, você deve remover os grupos de segurança padrão e selecionar o grupo criado para o EFS, conforme imagem:

Na página seguinte, não é necessário marcar nada em _Política do sistema de arquivos. Clique em Próximo_.

Você será direcionado para uma página para revisar as informações e criar o EFS. Desça até o final da página e clique em Criar.

Se tudo ocorrer com o esperado, o EFS será criado e em poucos segundos estará disponível:

Agora, clique no EFS para acessá-lo. Em seguida, clique no botão Anexar

Deixe marcada a opção Montar via DNS e copie os códigos das opções: Usando o assistente de montagem do EFS e o Usando o cliente do NFS. Guarde esses códigos em um bloco de notas, pois vamos precisar deles depois.

3) Provisionando as instâncias EC2

Iremos criar duas instâncias com sistemas operacionais ligeiramente diferentes, uma instância Ubuntu e outra Amazon Linux.

Portanto, acesse o EC2 para criar as instâncias. A primeira deve ser as seguintes configurações:

  • Nome: ec2-fileserver-1
  • Imagem de máquina da Amazon: Ubuntu 24.04
  • Tipo de instância: t2.micro
  • Par de chaves (login): Criar novo par de chaves
  • Configurações de rede -> clique em Editar -> selecione a VPC padrão da AWS e a sub-rede disponível na região us-east-1a
  • Firewall (Grupos de segurança): Selecionar grupo de segurança existente
  • Grupos de segurança comuns: escolha o grupo que criamos para as EC2 no começo deste tutorial

  • Em "Configurar armazenamento", mantenha o padrão de 1 volume com 8 GiB.

Já a segunda instância deve ser as seguintes configurações:

  • Nome: ec2-fileserver-1
  • Imagem de máquina da Amazon: Amazon Linux
  • Tipo de instância: t2.micro
  • Criar par de chaves: selecionar par de chaves (escolha o mesmo par de chaves criado para a instância Ubuntu)
  • Configurações de rede -> clique em Editar -> selecione a VPC padrão da AWS e a sub-rede disponível na região us-east-1b
  • Firewall (Grupos de segurança): Selecionar grupo de segurança existente
  • Grupos de segurança comuns: escolha o grupo que criamos para as EC2

Prontinho! Instâncias criadas:

4) Acessando as instâncias e montando o EFS

Agora, vamos acessar a instância por SSH. Eu não irei me delongar nesse passo, mas caso tenha dúvidas de como fazer, acesse o tutorial Criando uma instância EC2 na AWS

Primeiro vamos acessar a instância Ubuntu (ec2-fileserver-1) e rodar os seguintes comandos:

sudo apt update
sudo apt install nfs-common -y
sudo mkdir efs

## Aqui vamos colar o segundo comando copiado lá no EFS
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-0eb35cc770df5b760.efs.us-east-1.amazonaws.com:/ efs

df -h
  • Primeiro, atualizamos a lista de pacotes disponíveis nos repositórios configurados com o sudo apt update
  • Depois, instalamos o pacote nfs-common para permitir montar e acessar sistemas de arquivos NFS com o comando sudo apt install nfs-common -y
  • Criamos um diretório chamado 'efs' com o comando sudo mkdir efs
  • Em seguida, colamos o segundo comando que copiamos lá no EFS - para lembrar, olha ele aqui:

  • Por fim, listamos o espaço em disco e os sistemas montados com o comando df -h. Veja que nosso EFS já aparece montado:

Em seguida, vamos acessar o diretório do EFS e criar um arquivo nele. Para isso, execute os comandos:

cd efs
sudo touch teste.txt
ls -lha

O arquivo vai aparecer listado no diretório efs:

Agora, vamos acessar a instância Amazon Linux, e rodar os comandos:

sudo yum install -y amazon-efs-utils
sudo mkdir efs

## Aqui vamos colar o primeiro comando copiado lá no EFS
sudo mount -t efs -o tls fs-0eb35cc770df5b760:/ efs

df -h

Veja que nosso diretório aparece montado:

Agora, vamos acessar o diretório compartilhado, listar os arquivos e criar mais um arquivo a partir da instância Amazon Linux:

cd efs
ls -lha
sudo touch teste2.txt

Por fim, vamos voltar na instância Ubuntu (ec2-fileserver-1) depois de criar o arquivo teste2.txt e rodar o comando ls -lha para listar os arquivos do diretório:

Veja que o teste2.txt criado na outra instância já aparece aqui. É isso, você agora tem um sistema de compartilhamento de arquivos altamente disponível e escalável na AWS!

5) Limpando o ambiente

Para limpar o seu ambiente desse tutorial, basta:

  • Encerrar as duas instâncias criadas

  • Selecionar e excluir o EFS

  • Caso queira, pode excluir os Grupos de Segurança e o par de chaves criados também, mas isso é opcional.

É isso, bons estudos!

Referências

Projeto: Website estático na AWS

· 11 min para ler
Ludmila Silva
Cloud & DevOps Engineer

Depois de colocarmos a mão na massa em alguns dos principais serviços da AWS, nada melhor que colocar tudo isso em um projeto. Sim, tudo junto e misturado!

Como a ideia é manter tudo da forma mais simples possível, mas abarcando conceitos e serviços importantes, o projeto se trata de hospedar um website estático na AWS, com SSL e um domínio (este último é importante, mas opcional).

Um website estático é um site que usa somente arquivos estáticos, tais como arquivos HTML, CSS, JavaScript, imagens e vídeos. Ele não precisa de um servidor backend ou de interagir constantemente com um banco de dados. Com isso, as páginas de um site estáticos são carregadas de forma sempre igual, independente do que você fizer ou clicar. Esse tipo de site é comumente usado para páginas de portfólio, páginas de produtos, blogs simples ou páginas de documentação.

Agora que já temos uma ideia do que é um site estático, vamos seguir para as características do projeto.

Requisitos

Os requisitos do projeto são:

  • Um website estático hospedado na AWS com armazenamento durável;
  • Ter segurança e aceitar conexões HTTPS;
  • Aceitar requisições do tipo GET e HEAD;
  • Melhor desempenho e entrega para os usuários utilizando rede de entrega de conteúdo.

Arquitetura

O diagrama de arquitetura de implantação do sistema nos ajuda a visualizar como tudo funciona.

Os arquivos do site estão hospedados em um bucket no Amazon S3. O Route 53 faz o serviço de gerenciamento de DNS para o domínio do site. Além disso, temos um certificado SSL gerado com o Amazon Certificate Manager (ACM), a fim de garantir a segurança e criptografia através de requisições HTTPS. E o CloudFront para a entrega rápida dos conteúdos utilizando os Pontos de Presença (Edge Locations) da AWS.

Basicamente, o usuário digita a URL no navegador e a requisição passa pela Zona de DNS do domínio, que está sob responsabilidade do Route 53. Ele faz o redirecionamento para o Amazon CloudFront, que é responsável por fazer a entrega de conteúdo com base na localização geográfica do usuário, na origem da página e também no servidor de entrega do conteúdo - realizando essa entrega com baixa latência e trazendo a sensação de “alta velocidade” por parte do usuário. O CloudFront está conectado com o Bucket S3, onde os arquivos do website estão armazenados. Todo esse acesso ao site é seguro e criptografado, através do certificado SSL gerado no Certificate Manager.

Ferramentas e serviços utilizados

  • Amazon Simple Storage Service (Amazon S3)
  • CloudFront
  • AWS Certificate Manager
  • Route 53

Custos

Os custos deste projeto vão depender se você pretende comprar um domínio ou hospedar um domínio já existente na AWS. Esses passos são opcionais, mas mesmo assim é válido elencar os preços.

  • Registro de domínio: para registros .br, o custo é R$ 40,00 caso você registre no Registro BR. Para domínios com outras extensões, pode variar entre $3,00 a $5,00 (dólares), caso compre no Namecheap ou pela própria AWS.
  • Utilizar a Zona Hospedada da AWS: $ 0.50 (dólares) por mês.

💡

Caso você queira registrar um domínio nacional (.br), você pode registrar na Umbler por R$ 36,00 - e olha que não estou ganhando nada por indicar, hein!

Então, mãos a obra!

1) Utilizar um domínio registrado

Para este projeto, foi utilizado o domínio cloudtutorials.click, registrado na AWS - cujo passo a passo está aqui neste tutorial. O registro deste domínio custou $ 3.oo dólares (na verdade, 3.50 com as taxas), o que não passou de 20 reais considerando o valor do dólar no momento de registro.

Outro local em que você pode registrar domínios com um bom preço é no Namecheap. Eu também fiz um tutorial registrando o domínio cloudtutorials.site e me custou $ 1.16 dólares.

Também existe uma forma de registrar um domínio gratuitamente no Tech Domains ou Name.com por um ano, uma oferta para quem tem o Github Student Developer Pack. Isso mesmo!

Para ser elegível ao Github Student Pack você precisa ser estudante matriculado em um curso superior ou curso que conceda um diploma, tal como ensino médio, ensino secundário, faculdade, universidade. Você pode consultar as condições e ver o passo a passo de como se inscrever aqui.

Após ter se registrado e conseguido o Student Pack, basta acessar o Github Education, logar na sua conta e procurar a oferta:

Depois, você poderá registrar um domínio gratuitamente por um ano. Eu não vou me delongar nesse passo a passo, mas vou deixar um vídeo do YouTube para ilustrar o processo:

Com o domínio registrado em mãos, vamos seguir para a próxima etapa.

2) Criar uma zona hospedada (hosted zone) no Route 53

Se você optar por registrar seu domínio na AWS, a sua zona hospedada é criada automaticamente. Nesse caso, você não precisa fazer nada.

Caso você utilize um domínio registrado fora da AWS, vai precisar criar uma Zona Hospedada (Hosted zone).

Nesse caso, acesse a console AWS

  • Procure por Route 53
  • No painel, entre na opção Zonas hospedadas -> clique em Criar zona hospedada

  • Insira o domínio no campo Nome do domínio e deixe a opção Zona hospedada pública marcada. Clique em Criar zona hospedada

  • A zona será criada com dois registros DNS. Pegue os valores dos registros do tipo NS, copie e salve em um bloco de notas para facilitar o processo. No painel DNS do seu domínio, ou seja, onde você registrou você deverá configurar os registros NS para os da AWS.

3) Subindo um Website estático no S3

Agora que já temos um domínio em mãos, vamos começar a criar a estrutura de hospedagem do site. Para isso, você deve acessar a console AWS e buscar pelo S3.

No S3, você deverá criar um Bucket S3 para subir os arquivos do website. Para isso, clique no botão "Criar bucket" e preencha as informações:

  • Nome do bucket: defina um nome para o seu bucket
  • Região AWS: Norte da Virgínia (us-east-1)
  • Tipo de Bucket: Propósito geral
  • Ao criar o Bucket, desmarque a opção "Bloquear todo o acesso público" para que ele fique disponível na internet. Depois, desça até o final da página e clique em Criar bucket

  • Acesse o bucket e clique em Carregar para subir os arquivos do website

  • Em seguida, vá para -> Permissões e vá até Política do bucket. Clique em editar e cole a seguinte política* e clique em Salvar alterações:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::Nome-do-Bucket/*"
]
}
]
}
  • Lembre-se de mudar Nome-do-Bucket para o nome do seu bucket S3. Clique em Salvar alterações

  • Por fim, vá até Propriedades -> desça até a opção Hospedagem de site estático -> clique em editar. Habilite a opção de hospedagem de site estático e aponte a página index.html como documento de índice. Clique em Editar hospedagem de site estático

  • Marque a opção Ativar; em Tipo de hospedagem marque Hospedar um site estático; em Documento de índice indique o index.html
  • Salve as configurações e acesse o endpoint gerado

Ao colar o endpoint no navegador, já podemos ter uma prévia do site.

4) Criando um certificado SSL no AWS Certificate Manager

Um dos requisitos do nosso projeto é que ele suporte requisições seguras via HTTPS. Para permitir isso, primeiro devemos emitir um certificado SSL/TLS via AWS Certificate Manager.

O Certificate Manager é um serviço que permite a criação, gerenciamento e renovação de certificados SSL/TLS.

  • Pesquise por Certificate Manager na console AWS
  • Verifique se a sua localização esteja em Norte da Virgínia (us-east-1). Se não estiver, altere para ela
  • Clique em Solicitar um certificado
  • Em tipo de certificado, deverá estar marcada a opção Solicitar um certificado público. Clique em "Próximo".

  • Em Nomes de domínio forneça o nome do seu domínio

  • Em Método de validação: escolha o método de validação por DNS

  • Mantenha o algoritmo chave como RSA 2048. Clique em Solicitar

Como ele é um domínio registrado na AWS, haverá a opção Criar registros no Route53 - clique nela. Selecione o seu domínio e, em seguida, clique em "Criar registros". Se tudo ocorreu bem, você terá uma mensagem de registro criado com êxito.

5) Criando uma distribuição do CloudFront

Agora, vamos criar nossa distribuição de conteúdo (CND) no CloudFront.

  • Acesse a console AWS e busque pelo CloudFront. Clique em Criar distribuição (Create distribution)

  • Em Origin domain, você vai escolher o Bucket S3 em que os arquivos do Website - o CloudFront vai sugerir que você indique o endpoint do website, mas não faça isso
  • Em Origin access, marque a opção Origin access control settings, e depois clique no botão Criar nova OAC
  • Um pop-up vai abrir para configurar o controle de acesso, apenas clique em Criar (create)
  • Em Viewer marque Redirect HTTP to HTTPS (Redirecionar HTTP para HTTPS)
  • Em Allowed HTTP methods, deixe marcado "GET, HEAD"
  • Em Cache policy and origin request policy (recommended): selecione CachingDisabled

  • Mais abaixo, em Web Application Firewall (WAF), marque a opção para Não habilitar nenhuma proteção de segurança (Do not enable security protections)

  • Em Settings -> na opção Alternate domain name, escolha Add item e preencha com seu domínio (no meu caso, é cloudtutorials.click)
  • Em Custom SSL certificate, escolha o certificado SSL criado no passo anterior
  • Na opção Default root object (Objeto raiz padrão), digite index.html
  • Crie a distribuição.

Você verá que ao criar a distribuição, uma política de S3 será criada também. Copie a política, e substitua a que está no seu bucket por esta nova.

Assim que a distribuição estiver criada, conseguimos acessar o site pela URL gerada no CloudFront:

6) Apontar o domínio para o Bucket S3

A peça final do nosso projeto é criar um registro DNS que vai redirecionar o tráfego do domínio para a distribuição do CloudFront.

  • No Route 53, acesse a Zona hospedada e clique em “Criar registro”
  • Em Tipo de registro, selecione o tipo A e marque a opção "Alias" - os registros do tipo alias permitem rotear o tráfego para serviços internos que provisionamos na AWS
  • Em seguida, em Rotear o tráfego para selecione "Alias para distribuição do CloudFront". Vai aparecer a distribuição que criamos na lista.
  • No campo da política de roteamento, mantenha o “Roteamento simples” - No Roteamento simples, nós encaminhamos o tráfego para um único recurso
  • Clique em “ Criar registros”.

Agora, basta aguardar a propagação dos registros DNS. Não deve demorar muito. Em poucos minutos, você já consegue acessar o site pelo domínio:

7) Registrar seu processo e limpar o ambiente

É muito importante que você registre o seu processo. Anote, tire prints, crie um vídeo... Use e abuse das formas de reter conhecimento. Depois disso, compartilhe seus resultados com grupos ou no LinkedIn.

Por fim, não esqueça de limpar o seu ambiente:

  • Desabilitar e deletar a distribuição CloudFront
  • Deletar o certificado SSL criado no Certificate Manager
  • Apagar os registros DNS e remover a Zona Hospedada do domínio no Route 53
  • Esvaziar o bucket S3 e deletá-lo.

Fim! Espero que esse tutorial possa contribuir com a sua jornada de aprendizados na AWS.

Referências


Este projeto também se encontra no GitHub.

Como configurar o Route 53 como serviço de DNS de um domínio

· 6 min para ler
Ludmila Silva
Cloud & DevOps Engineer

Esse é um tutorial complementar ao de como registrar um domínio no Amazon Route 53.

Aqui vamos pensar em casos em que você já possui um domínio registrado ou quer registrá-lo em outro local, mas pretende usar o Route 53 como zona DNS do seu domínio para centralizar o gerenciamento.

Então, bora para o hands-on!

1) Registrando um domínio (opcional)

Primeiro, precisamos de um domínio registrado. Se você já tem um domínio, pode pular para a etapa 2 deste tutorial.

Caso não tenha, então vamos fazer o passo a passo do registro de um domínio. Eu particularmente gosto bastante de usar o Namecheap para registrar domínios para fins de testes.

Geralmente, há domínios bem baratos e em preços promocionais - o que fica caro mesmo é o valor da renovação dos domínios. Como eu não renovo esses domínios de testes, o registro por um ano atende bem. A única ressalva é que você vai precisar de um cartão de crédito para fazer o registro.

  • Acesse o Namecheap
  • Na aba de pesquisa, digite o nome de domínio desejado. Eu irei registrar o cloudtutorials
  • Uma lista de extensões vai aparecer (.com, .net, entre outros). Vamos selecionar a extensão .site. O domínio selecionado possui o valor de registro de 1,78 dólares, é o que aparece em retail e que vai ser cobrado. Então, se atente a isso.
  • Aqui é importante ressaltar também que o valor de renovação do domínio, isto é, o valor quando expirar, é de $ 23.48 doletas.

  • Selecione o domínio e clique em Checkout

  • Na página seguinte, está a especificação dos valores. Isso inclui a taxa da ICANN, que é a entidade que gerencia a distribuição de endereços IP e o Sistema de nomes de domínio (DNS).

  • Revise os valores - o registro será por somente um ano e a opção Auto-renew deve estar desativada. Cuidado para não contratar nenhum outro serviço extra. Clique em Confirm Order
  • Você será direcionado para uma página de login ou então criar uma nova conta. Caso você não tenha uma conta, crie-a com os dados de usuário, senha, nome e e-mail. Um e-mail de confirmação chegará na sua caixa de entrada.
  • Após fazer o login, seremos direcionados para a página de pagamento. Há as opções de pagamento (aceitam cartões Visa, MasterCard, Discover, American Express e também pagamento via Paypal). Vou selecionar a opção Secure Card Payment para cartão de crédito e preencher os dados

  • Após preencher os dados do cartão, basta clicar em Continue

  • Para finalizar o pedido, há uma página de revisão. Fique de olho para não contratar nada que não seja o registro do domínio (há também o serviço de privacidade dos dados no Whois, que é gratuito).

  • Clique em Pay Now... E pronto! Em poucos minutos o domínio estará registrado. Você receberá uma mensagem de confirmação na sua caixa de entrada de e-mail.

💡

Caso você seja estudante, você pode registrar um domínio gratuito pelo GitHub usando o GitHub Student Developer Pack - dá uma olhada lá!

2) Criando a Zona hospedada na AWS

Acesse a console AWS -> busque pelo Route 53 -> e entre na opção Zonas hospedadas. Clique em Criar zona hospedada

Insira o domínio no campo Nome do domínio e deixe a opção Zona hospedada pública marcada. Clique em Criar zona hospedada

A zona será criada com dois registros DNS. Pegue os valores dos registros do tipo NS, copie e salve em um bloco de notas para facilitar o processo:

3) Configurando o DNS

Logue na sua conta do Namecheap. Na aba lateral esquerda, clique em Domain List

Clique no botão Manage na opção do domínio desejado

Em Domain, vá até a opção Nameservers e selecione Custom DNS

Nos campos em branco, cole os 4 nameservers copiados da Zona hospedada do Route 53:

Após inserir, clique no sinal de "checked" (o "v" verde"). Teremos uma mensagem dizendo que a propagação do DNS pode levar até 48 horas:

4) Testando com uma instância EC2 (opcional)

Essa parte funciona corretamente após a propagação completa de DNS. No entanto, pode acontecer de funcionar bem antes.

Como o AWS cobra pela zona hospedada, essa etapa será apenas para ilustrar o acesso de uma instância EC2 pelo domínio.

Antes de começar este tutorial, eu deixei uma instância EC2 rodando. Esta parte é opcional, mas você pode criar uma instância - e caso tenha dúvidas em como criar uma instância EC2, você pode seguir este tutorial.

Assim que tiver criado sua instância, copie o IP público.

  • Acesse a Zona hospedada do domínio no Route 53

  • Clique no botão Criar registro

Insira os seguintes valores:

  • Nome do registro: deixe em branco
  • Valor: IP público da sua EC2
  • TTL: 300
  • Política de roteamento: Roteamento simples

5) Limpe o ambiente

  • Encerre a instância EC2 - caso você tenha criado uma

  • No Route 53, selecione o registro A e clique em Excluir registro. Em seguida, delete a Zona hospedada

  • Volte os Nameservers do seu domínio para o padrão do seu provedor. No caso do Namecheap, deixe em Namecheap BasicDNS

Documentação

Registrando um domínio no Route 53

· 7 min para ler
Ludmila Silva
Cloud & DevOps Engineer

Hoje vamos abordar o Amazon Route 53, um serviço da AWS que atua como DNS e que encaminha a solicitações dos usuários par aplicativos na web.

Porém, primeiro precisamos esclarecer alguns conceitos:

  • O que é como funciona o DNS
  • O que é um Domínio (ou nome de domínio)
  • E que é o Route 53 da AWS

O que é e como funciona o DNS

A comunicação em redes ocorre, principalmente, por meio de endereços IPs. O IP é um número binário de 32 bits (IPv4) ou 128 bits (IPv6), que deve ser único na comunicação. De forma bem geral, podemos dizer que desde as nossas máquinas pessoais até os servidores que hospedam serviços e sites que acessamos na internet, todos possuem endereços IPs que permitem seu acesso, gerenciamento e comunicação.

Agora imagine que para acessar o Google, tivéssemos que digitar sempre o IP 142.251.128.238 no navegador? Saber um é fácil, mas decorar os IPs de todos os sites que acessamos no dia a dia seria um imenso trabalho. Uma forma de facilitar a comunicação na web se dá pelo DNS.

O Domain Name System (Sistema de nome de domínio), ou simplesmente DNS, é um sistema que traduz "nomes" para endereços IP. Ele funciona quase como uma agenda telefônica do celular, por exemplo, em que temos vários nomes atrelados a uma sequência de números. Isso possibilita acessar os recursos na web sem a necessidade de ficar memorizando IPs.

Não vamos adentrar aqui na estrutura do DNS, mas essa introdução é importante para pensarmos sobre seu funcionamento básico: traduzir nomes de domínio.

O que é um domínio

Um domínio (domain name) é um nome que identifica um site na internet. Esse nome é composto de uma ou mais extensões, tais como o .com, .br, .org, entre outros. Esse final do domínio é conhecido como top level domain (TDL), ou domínio de primeiro nível.

No caso do domínio deste site - lu.dev.br - o "lu" seria o nome, o ".dev" é uma categoria, também chamada de second level domain (STL) e o ".br" é o TDL.

Os domínios são registrados e organizados em hierarquias. Para que você tenha um domínio, é necessário registrá-lo. Geralmente, o período de vigência de um domínio é 1 ano, depois desse prazo você deverá renová-lo (mas geralmente, os registros e renovações são feitos com durações maiores que um ano). Isso ocorre porque caso uma pessoa ou organização esqueçam de renovar o domínio a tempo, ele voltará ao mercado para ser registrado novamente.

Agora que já sabemos o que é um domínio, podemos entender de modo simples como funciona o fluxo do DNS: você digita o domínio no seu navegador → é realizada uma requisição para o servidor DNS que responde com o IP para o navegador. Voilá, página acessada e carregada.

O que é o Route 53

E finalmente chegamos nele: o Amazon Route 53!

O Route 53 é um serviço de DNS altamente disponível e escalável, que oferece registro de domínios, resolução de DNS e roteamento de tráfego.

Ele permite:

  • Registrar domínios, criar e gerenciar registros DNS;
  • Distribuir o tráfego de forma otimizada, baseado em várias políticas de roteamento;
  • Integrar-se a outros serviços da AWS;
  • Configurar verificações de integridade dos recursos, tais como instâncias EC2 ou Load Balancers. Dessa forma, o Route 53 "desvia" o tráfego de recursos não saudáveis.

Bora para o hands-on!

⚠️

ATENÇÃO: neste tutorial há custos envolvidos💸 Existem taxas para registro e renovação de domínios - seja na AWS ou qualquer outro registrador de domínios - além de outras cobranças de serviços. Portanto, use este tutorial como um guia em relação ao serviço do Route 53.

Passo a passo

1) Registrando um domínio no Route 53

Acesse a console AWS e busque pelo Route 53

Na aba lateral esquerda, clique em Domínios registrados

Em seguida, clique no botão Registrar domínios

Para este tutorial, vamos registrar o domínio cloudtutorialscom o TDL .click. Isso porque é o mais barato rsrs... 3,00 dólares ao ano. É só pesquisar pelo domínio no campo Pesquisar domínio

Em seguida, clique em Selecionar e no botão Prosseguir para check-out

Na página seguinte, temos opções de preço, tempo de registro e renovação automática. Você pode aumentar a duração do registro por mais anos se desejar, o que não é nosso caso.

Nós vamos manter por um ano e desativar a opção de renovação automática. Clique em Próximo

Na próxima página, devemos preencher as informações de contato:

  • Tipo de contato (se é pessoa, empresa, etc),
  • nome,
  • telefone,
  • e-mail,
  • Entre outros dados.

Esses dados ficam visíveis no WHOIS, que é um protocolo que armazena e fornece informações sobre um domínio e seus proprietários.

Por padrão, a proteção de privacidade dos contatos para o domínio já vem ativa (e sem nenhum custo extra, ao contrário do que ocorre com outros registradores de domínio).

Inclusive, se você abrir o terminal e digitar whois cloudtutorials.click, vai ver que está tudo privado:

Continuando: clique em Próximo

Na página Analisar e enviar estará um resumo e o valor total do registro do domínio.

Um detalhe importante é que há uma informação sobre a Taxa de gerenciamento de DNS, na qual falaremos dela mais adiante.

Mais ao final da página, estarão os _Termos e condições. Selecione a caixa para aceitar os termos e clique em _Enviar

A partir disso, a solicitação de registro de domínio estará em análise / andamento.

Em alguns minutos, o domínio é registrado:

2) Verificando a zona hospedada

No painel do Route 53, clique em Zonas hospedadas

Você vai ver que foi criada a Zona hospedada para o domínio que acabamos de registrar. Podemos dizer que a Zona hospedada (ou Zona DNS) permite centralizar o controle de um domínio, inserindo registros de recursos DNS - que especificam a função e o tipo de roteamento.

Quando registramos um domínio na AWS, o Route 53 automaticamente cria a zona hospedada, e com ela você pode especificar para onde deseja que o tráfego do domínio seja roteado, entre outras configurações.

Como a zona hospedada possui uma taxa cobrada por mês, nós iremos excluí-la a fim de evitar essa cobrança.

Lembrando que para fins de testes, uma zona hospedada que for excluída no Route 53 em até 12 horas após sua criação não é cobrada.

Por hoje é só, pessoal!

Bons estudos!

Documentação

Criando um bucket S3 com o CloudFormation

· 4 min para ler
Ludmila Silva
Cloud & DevOps Engineer

O desenvolvimento e a manutenção de aplicações modernas exigem rapidez no provisionamento, gerenciamento e entrega da infraestrutura necessária para atender às demandas. Nesse contexto, a infraestrutura tradicional, com processos manuais e demorados para criar ambientes de desenvolvimento, testes e produção, não atende mais aos requisitos dessas aplicações. Assim, a Infraestrutura como Código (IaC - Infrastructure as Code) surge como uma solução para responder ao dinamismo, complexidade e velocidade dos negócios atuais.

Na IaC, a configuração, provisionamento e administração da infraestrutura estão codificados em arquivos de texto, que podem ser versionados em sistemas de controle de versão, como o Git. Em vez de realizar essas atividades manualmente, a IaC permite um processo automatizado e controlado.

Na AWS, o serviço que possibilita criar e replicar uma infraestrutura a partir de um código é o Amazon CloudFormation. Ele permite que a infraestrutura seja replicada várias vezes, oferecendo um serviço gratuito, em que o pagamento ocorre apenas pelos recursos provisionados.

Dois conceitos importantes do CloudFormation são:

  • Template: No AWS CloudFormation, um template é um arquivo em formato JSON ou YAML que descreve a infraestrutura desejada, incluindo recursos como instâncias EC2, redes e permissões, de forma declarativa e reutilizável.
  • Stack: A partir do template, uma stack é criada, representando a implementação prática dos recursos definidos. Em outras palavras, a stack é o conjunto dos recursos ativos gerenciados em conjunto.

Podemos dizer, de forma resumida, que o CloudFormation possibilita a criação, atualização e exclusão de infraestrutura de forma automatizada, garantindo consistência e controle na nuvem.

Depois dessa breve introdução, vamos colocar a mão na massa!

Hands-on

1) Criando o template

Abra um editor de texto (VsCode, Notepad, Sublime Text, ou outro de sua preferência) e copie o trecho abaixo. Salve em formato .yaml

Resources:
TesteBucketS3:
Type: AWS::S3::Bucket
Properties:
AccessControl: Private
BucketName: `<nome_do_bucket>`

Se preferir, você pode baixar o arquivo também:

Download

Nesse template, temos as seguintes partes:

  • Resources - indica que serão especificados os recursos da infraestrutura na AWS;
  • TesteBucketS3 - é o indicador lógico do recurso, um nome único para referenciar esse recurso dentro do template caso fosse necessário - poderia ser qualquer outro nome;
  • Type - define o tipo do recurso que será criado;
  • AWS::S3::Bucket - é o nome do recurso, no caso é o Bucket S3;
  • Properties - define as configurações específicas (propriedades) do Bucket S3;
  • AccessControl - é uma das propriedades do bucket, que define o acesso somente por usuários autenticados e com permissão para tal;
  • BucketName - é o nome do bucket que será criado.

Ah, em BucketName lembre-se de trocar o <nome_do_bucket> para um nome de sua preferência. E também lembre que o nome para um Bucket S3 deve ser único e global na AWS.

Continuando...

2) Criar uma stack

Acesse a console AWS e procure por CloudFormation

Clique em Criar pilha

Para criar a pilha (stack), vamos selecionar a opção Escolher de um modelo existente, e especificar esse modelo marcando a opção Fazer upload de um arquivo de modelo

Em seguida, vamos escolher o arquivo .yaml e fazer upload. Veja que será criado outro Bucket S3 para armazenar o modelo do CloudFormation:

Clique em Próximo. Em seguida, dê um nome para a pilha e clique em Próximo novamente.

Clique em Próximo até chegar na página Revisar e Criar

Desça até ao final da página e clique em Enviar. Não tem muito segredo, o CloudFormation vai apresentar os eventos da criação da Stack e fazer o rollbak (reverter) caso ocorra algum problema.

Se tudo der certo, vai aparecer o status CREATE_COMPLETE

Para conferir se o Bucket foi criado, você pode acessar a Pilha -> Recursos

3) Limpando o ambiente

Para limpar o ambiente, você precisa selecionar e exluir a pilha

Confirme a exclusão. Em seguida, acesse o S3 e exclua o bucket criado para armazenar o modelo. Antes de excluir, você vai receber um alerta para esvaziar o bucket. Confirme e exclua tudo.

Prontinho, ambiente limpo 🧹

Bons estudos!

Documentação

Banco de dados NoSQL com o DynamoDB

· 3 min para ler
Ludmila Silva
Cloud & DevOps Engineer

Os bancos de dados não relacionais são bancos que armazenam os dados em um formato diferente das tabelas relacionais. A construção desse tipo de banco de dados permite criar aplicações modernas com mais flexibilidade e liberdade, realizando consultas e pesquisas mais rápidas.

Entre os tipos de NoSQL mais comuns estão os bancos de documentos como o MongoDB; de colunas, como o Cassandra; de grafos, como Neo4j; e de chave-valor como o Redis.

Exemplo de estrutura de dados em JSON, comumente usado no MongoDB, Firebase, entre outros

Nesse tutorial, vamos conhecer um pouco do Amazon DynamoDB, um serviço de banco de dados não relacional (NoSQL) rápido, com escalabilidade e baixa latência.

O DynamoDB é serveless, o que significa que você não precisa gerenciar a infraestrutura subjacente a ele. É gerenciado pela AWS, ou seja, a AWS cuida dos aspectos operacionais e da infraestrutura, e você somente precisa se ocupar dos seus dados e o desenvolvimento da sua aplicação.

No DynamoDB, os dados são armazenados no modelo de chave-valor, em que é necessário indicar uma _chave primária, utilizada para identificar um item na tabela. Você também pode especificar uma chave secundária_, fornecendo flexibilidade na consulta dos dados.

Passo a passo

1) Criando uma tabela

Acesse a console AWS e busque por DynamoDB. Clique em Criar tabela

Nas configurações da tabela, insira:

  • Nome da tabela: Clientes
  • Chave primária (Chave de partição): id_cliente (formato String)

Vá até ao final da página e clique em Criar tabela

2) Inserindo dados na tabela

Assim que a tabela for criada, clique em cima dela para acessá-la:

Em seguida, clique em Explorar itens da tabela

Mais abaixo, clique em Criar item

Clique em Adicionar novo atributo e escolha o formato String

Insira o valor 1 para o atributo id_cliente. E crie os seguintes itens, todos no formato String, com os valores que você preferir:

  • nome
  • sobrenome
  • cidade
  • estado

Assim que tiver completado os itens, clique no botão Criar item.

Veja que o item foi criado com sucesso:

Agora, crie mais outro item com os mesmos campos e id_cliente com valor 2, como na imagem:

Veja agora que temos dois itens criados:

3) Lendo os dados da tabela

Na mesma página da tabela, em Verificar ou consultar itens, selecione o campo Consulta, insira o valor 2 em id_cliente (Chave de partição), e clique em Executar

Veja que somente o item 2, da cliente Maria, foi retornado:

O legal é que você pode realizar diversas operações com o banco de dados e as tabelas do DynamoDB via CLI ou SKD.

4) Limpe o ambiente

Para limpar seu ambiente, basta selecionar a tabela e clicar em Excluir. Confirme a exclusão e pronto, tudo limpo!

Bons estudos!

Documentação

Criando uma instância RDS MySQL

· 5 min para ler
Ludmila Silva
Cloud & DevOps Engineer

Um banco de dados relacional é um sistema que gerencia dados organizados em tabelas, facilitando a relação entre essas informações. As tabelas são compostas por linhas e colunas, onde as linhas representam registros únicos e as colunas representam atributos dos dados.

Fonte: https://logap.com.br/blog/banco-de-dados-relacional/

Bancos de dados relacionais utilizam a linguagem SQL (Structured Query Language) para manipulação e consulta de dados. Além disso, existem sistemas de gerenciamento de banco de dados (SGBDs) que permitem acessar e manipular dados por meio de uma interface ou software. Os SGBDs mais populares são:

  • MySQL
  • SQLServer
  • PostgreSQL
  • Microsoft SQL Server
  • Oracle Database

Na AWS, temos o Amazon RDS (Relational Database Service), que é um serviço de banco de dados relacional com recursos de escalabilidade, automatização de patches, provisionamento de hardware e backup na Nuvem AWS. O Amazon RDS utiliza instâncias gerenciadas pela AWS e permite criar bancos de dados com os seguintes mecanismos:

  • PostgreSQL
  • MySQL
  • MariaDB
  • Oracle
  • SQL Server
  • Aurora (AWS)

Outro ponto interessante é que o Amazon RDS permite a criação de "Read Replicas" — cópias de leitura do banco de dados com replicação assíncrona. Esse recurso é útil, por exemplo, para aplicações com alta carga de leitura de dados, pois permite reduzir a carga do banco de dados principal, transferindo essas consultas para a réplica de leitura. Essa é uma estratégia muito eficaz de Alta Disponibilidade (High Availability).

Sem mais delongas, vamos para o nosso hands-on!

Passo a Passo

1) Criando a instância RDS

Acesse a console AWS e busque pelo RDS

Clique no botão Criar banco de dados

Na página seguinte, deixe marcado o método de Criação padrão e em Opções do mecanismo, selecione MySQL

Mais abaixo, em Modelos, selecione o Nível gratuito - afinal, não queremos nenhuma cobrança indesejada.

Em Configurações, especifique:

  • Identificador da instância de banco de dados: é o nome da sua instância. Deixei como database-1
  • Nome do usuário principal: admin
  • Gerenciamento de credenciais: marque autogerenciada
  • Senha principal: crie uma senha (da qual você possa se lembrar) com no mínimo 8 caracteres

Desça até a aba Conectividade, e em Acesso público marque Sim

(P.S.: Essa não é a configuração ideal para acessarmos um banco de dados externamente, mas para fins didáticos ela vai nos atender no momento)

Um pouco mais abaixo, ainda em Conectividade, marque Criar novo para criar um novo Grupo de Segurança e dê um nome a esse grupo.

Desça até ao final da página e clique em Criar banco de dados.

2) Verificando a instância

Pode levar alguns minutos até que a instância RDS esteja disponível. Assim que estiver, clique na instância.

Assim como ocorre no EC2, você vai se deparar com uma série de informações sobre a instância. O que nos interessa aqui é o Endpoint, que é o ponto de conectividade da nossa instância.

Em Segurança e conexão, copie o Endpoint

3) Testando a conexão no MySQL Workbench

Agora, vamos usar o MySQL Workbench apenas para testar a conexão externa com a instância. Eu escolhi o Workbench, mas você pode usar outro software como o DBeaver, por exemplo.

Caso não tenha o Workbench instalado, você pode baixá-lo aqui.

Abra o Workbench e clique no + para criar uma nova conexão:

Na janela que abrir, insira as informações:

  • Connection Name: dê um nome para sua conexão
  • Connection Method: deixe marcado como Standard (TCP/IP)
  • Hostname: cole o endpoint da sua instância
  • Username: admin (ou outro, caso você tenha alterado ao criar a instância RDS)
  • Password: clique em Store in Vault e insira a senha do banco de dados

Depois que preencher os campos, clique em Test Connection

Se tudo der certo, você vai receber uma mensagem de que a conexão foi realizada com sucesso. Clique em "OK".

Você pode abrir a conexão com o RDS e se divertir criando tabelas, inserido dados, fazendo consultas, etc. O céu é o limite (na verdade, o Free Tier é o limite).

Ah, lembre-se de limpar o seu ambiente, ou seja, de excluir sua instância RDS.

Bons estudos!

Documentação