image

Unlimited bootcamps + English course forever

80
%OFF
Article image
Vinicius Hoffmann
Vinicius Hoffmann02/05/2026 22:45
Share

Do Caos ao Event-Driven: Como juntei .NET, Python, SQS e Docker (e sobrevivi para contar)

    Se você já tentou juntar duas tecnologias que parecem falar línguas totalmente diferentes, sabe que o processo é uma mistura de "Eu sou um gênio da tecnologia" com "Por que eu decidi trabalhar com isso mesmo?".

    Recentemente, decidi criar um pipeline de ETL orientado a eventos, Event-Driven, para processamento de transações financeiras. O objetivo? Simples no papel: uma API em .NET 8 recebe o dado, salva no PostgreSQL, joga para uma fila AWS SQS, via LocalStack no Docker, e um worker em Python 3.11 consome a mensagem e atualiza o status para Processed. Parece lindo, né? O diagrama de arquitetura que fiz no final parecia obra de arte. Mas o caminho até lá... Ah, meus amigos, foi uma verdadeira montanha-russa.

    image

    Erro 1: O PowerShell odeia aspas (e a minha sanidade)

    Tudo começou quando precisei alterar a tabela no banco de dados para incluir uma coluna de status. "Fácil", pensei eu. "Vou rodar um docker exec com o comando SQL direto no PowerShell".

    docker exec -it postgres psql -U admin -d db -c 'ALTER TABLE "Transactions" ADD COLUMN "Status"...'

    O resultado? O PowerShell simplesmente ignorou as aspas, transformou Transactions em transactions (tudo minúsculo), e o PostgreSQL começou a gritar no console dizendo que a tabela não existia. Depois de muito escape de barra invertida e xingamentos mentais, veio o primeiro acerto:

    Não brigue com o PowerShell. Entre no modo interativo do container e execute o SQL direto na fonte. Paz restaurada.

    Erro 2: O clássico "CamelCase vs. PascalCase"

    Com o .NET enviando as mensagens para a fila SQS e o Python pronto para ler, fui testar o worker. O código do Python rodava sem erros, mas o status no banco de dados não mudava nunca . Continuava em Received. Fui olhar o terminal do worker e percebi o crime: o .NET enviava o JSON serializado como id (minúsculo), e o meu Python estava caçando a chave Id (maiúsculo). Python olhava para o JSON, não achava nada, e retornava um belo e silencioso None.

    O acerto: Ajustei o Python para ser resiliente:

    transaction_id = body.get("Id") or body.get("id")

    Dica de ouro: Nunca confie na capitalização de APIs de terceiros (mesmo quando o terceiro é você mesmo).

    Erro 3: Os traumas do Psycopg2

    Para conectar o Python ao PostgreSQL, comecei usando a clássica biblioteca psycopg2-binary. Mas logo de cara começamos a ter problemas com tipos de dados modernos e enconding.

    O acerto: Decidi chutar o balde e migrar para o psycopg (versão 3). Que decisão maravilhosa! Com o suporte nativo a gerenciadores de contexto (with) e melhor manipulação de UUIDs, o código do Python ficou limpo, rápido e atualizou o banco de dados no exato momento em que leu a mensagem do SQS.

    O Grand Finale: O arquivo fantasma no GitHub

    Depois de tudo funcionando perfeitamente (API gravando, SQS enfileirando, Worker processando), fui fazer a documentação e adicionei um diagrama de arquitetura incrível no README.md.

    Fiz o push pro GitHub e... imagem quebrada. Fui investigar o VS Code e lá estava o culpado: o arquivo estava salvo como pipeline-arquitetura.jpg.png. Sim, duas extensões. E para ajudar, eu tinha colocado ./images/ no Markdown em vez de apenas images/. Corrigido o nome e o caminho, finalmente a mágica aconteceu: um repositório limpo, documentado e 100% funcional.

    Conquistas e Aprendizados

    No final das contas, esse projeto foi muito mais do que apenas escrever código. Foi sobre:

    • Desacoplamento real: Entender na prática como uma fila SQS evita que sua aplicação caia se o banco de dados ficar lento.
    • Resiliência: Aprender a debugar entre containers Docker e entender a comunicação de rede local.
    • Flexibilidade: Usar a melhor ferramenta para cada trabalho (.NET para a API de alta performance e Python para o Worker de processamento rápido).

    Se você quer ver como ficou o código final e a documentação desse projeto (prometo que sem aspas quebradas e sem extensões duplicadas), o link do repositório está aqui embaixo!

    https://github.com/viniciushoffmanndev/aws-dotnet-python-etl

    E você, qual foi a última vez que uma aspa no terminal te fez questionar suas escolhas de carreira? Deixa aí nos comentários! 👇

    Share
    Recommended for you
    GFT - Fundamentos de Cloud com AWS
    Bootcamp Afya - Automação de Dados com IA
    Bootcamp NTT DATA: Backend Java com Spring AI
    Comments (0)