Log in to leave a comment
No posts yet
Eu sei bem como é aquela sensação de frio na barriga ao ver a fatura do Amazon S3. Para um engenheiro de dados, o S3 é como o ar que respiramos, mas ao fazer dezenas de milhares de chamadas de API para testes e mover arquivos de grande volume, os custos operacionais podem acabar superando os benefícios. Em 2025, o custo de armazenamento do S3 Standard é de 0,023 USD por GB, mas o verdadeiro perigo reside nos custos de transferência de dados (Egress). Ao ultrapassar apenas 100 GB, você já paga 0,09 USD por GB, o que é quase quatro vezes o custo de armazenamento. Para economizar, muitos tentam rodar o MinIO localmente, mas acabam sofrendo com inconsistências em relação ao código de produção. Por isso, reuni aqui as configurações que utilizo na prática.
Escrever o endereço do S3 diretamente no código da aplicação é um hábito perigoso. Se você esquecer um endereço local ao fazer o deploy, isso causará falhas no ambiente de produção. A biblioteca Boto3 lê as variáveis de ambiente do sistema antes das configurações internas do código. Aproveitando essa prioridade, podemos fazer com que o ambiente local aponte para o MinIO, enquanto o ambiente de produção utiliza automaticamente o AWS S3.
Como configurar
.env do ambiente local, defina AWS_S3_ENDPOINT_URL=http://localhost:9000.os.getenv("AWS_S3_ENDPOINT_URL").boto3.client("s3", endpoint_url=endpoint).Com essa configuração, como o servidor de produção não possui essa variável de ambiente, o Boto3 buscará o endereço padrão da AWS. É a maneira mais eficaz de reduzir a zero o custo de milhares de requisições PUT/GET geradas durante a fase de testes locais.
Ao tentar usar o código Terraform que define a infraestrutura de produção diretamente com o MinIO local, você encontrará erros. Isso ocorre porque o provedor AWS do Terraform tenta validar o ID da conta AWS real por padrão. No ambiente local, precisamos interceptar e contornar esse processo de validação.
Exemplo de configuração Terraform
s3 = "http://localhost:9000" dentro das configurações de endpoints.s3_use_path_style, skip_credentials_validation e skip_requesting_account_id definindo-as como true.access_key e secret_key, insira qualquer string, como mock_key.Após essa configuração, o Terraform criará políticas de bucket e regras de ciclo de vida (Lifecycle Rules) no MinIO local sem a necessidade de uma conexão real com uma conta AWS. Isso é eficiente para detectar erros na definição da infraestrutura antes do deploy, reduzindo a taxa de falhas.
Para analisar o desempenho de queries adequadamente, a escala dos dados fictícios deve ser grande. No entanto, criar dados usando loops comuns é tão lento que se torna exaustivo. Eu utilizo Polars ou Apache Arrow. O Polars utiliza operações vetorizadas, sendo até 10 vezes mais rápido que o Pandas.
Processo de geração de dados
Faker e crie chunks de 100.000 linhas com o Polars.write_to_dataset do engine pyarrow para salvar arquivos Parquet particionados no estilo Hive (year=2026/month=04).Subir e baixar 100GB de dados repetidamente na nuvem pode gerar faturas de centenas de dólares. Testar levando o hardware local ao limite é muito mais saudável para o seu bolso.
Para testar localmente lógicas serverless que são acionadas automaticamente quando um arquivo é carregado, use a função de notificação de bucket do MinIO. O MinIO suporta Webhooks, que enviam dados JSON para um endpoint HTTP especificado quando um objeto é criado.
Ordem de implementação
MINIO_NOTIFY_WEBHOOK_ENDPOINT ao endereço do seu servidor local.s3:ObjectCreated:Put está chegando corretamente no servidor local.A confiabilidade quando há um surto de eventos é determinada pelo tamanho da fila e pela taxa de ocorrência de eventos (
). Para um ambiente de teste local, é recomendável aumentar generosamente a configuração queue_limit para manter a sanidade mental.
Às vezes, arquivos criados dentro de um container Docker não abrem no host devido a problemas de permissão. Especialmente para usuários de macOS, é essencial verificar se o 'VirtioFS' está ativado nas configurações do Docker Desktop. O VirtioFS é até 98% mais rápido no processamento do sistema de arquivos do que o método gRPC FUSE tradicional. Ao lidar com grandes volumes de dados, essa diferença é muito perceptível.
Solução para problemas de permissão
docker run, utilize a opção --user $(id -u):$(id -g) para alinhar as permissões entre o host e o container./data do container.Ao estruturar bem o seu ambiente local, você terá um laboratório perfeito para explorar o funcionamento da infraestrutura sem se preocupar com custos. Além de economizar dinheiro, isso permite manter um ritmo de desenvolvimento independente, sem ficar à mercê das variações do ambiente de nuvem.