Skip to content

Latest commit

 

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Noctus Lambda

Consumidor Kafka responsavel por validar resultados FraudAssessment produzidos pelo noctus-service e grava-los na camada S3 Curated.

orders-topic --> noctus-service --> fraud-detection-topic --> Noctus Lambda --> S3 Curated

Contrato de entrada

A Lambda recebe o envelope de Amazon MSK ou Kafka self-managed. Cada records.<topico-particao>[].value contem um FraudAssessment JSON codificado em Base64.

Campos preservados na Curated:

  • assessmentId, sourceEventId, orderId, customerId
  • orderAmount, currency, riskScore, decision, reasons
  • assessedAt, modelVersion

O objeto e gravado em:

s3://<bucket>/fraud-assessments/decision=<DECISION>/year=YYYY/month=MM/day=DD/<assessmentId>.json

Como a chave usa assessmentId, um retry sobrescreve o mesmo objeto em vez de criar duplicatas. Payload invalido ou falha do S3 gera excecao para impedir a confirmacao silenciosa do lote.

Execucao local integrada

O docker-compose.yml fica no repositorio irmao noctus-service:

Set-Location C:\Projetos\noctus-service
docker compose up --build -d
docker compose logs -f noctus-lambda-worker

O worker local consome fraud-detection-topic no grupo noctus-curation-v1, converte os registros para o mesmo envelope recebido na AWS e somente confirma os offsets depois que todo o lote foi gravado.

Variaveis do worker:

Variavel Padrao
KAFKA_BOOTSTRAP_SERVERS localhost:9092
FRAUD_RESULTS_TOPIC fraud-detection-topic
KAFKA_CONSUMER_GROUP noctus-curation-v1
CURATED_BUCKET_NAME obrigatoria
CURATED_PREFIX fraud-assessments
S3_ENDPOINT vazio na AWS

Payloads de teste

  • examples/fraud-assessment.json: mensagem direta de fraud-detection-topic.
  • examples/lambda-kafka-event.json: envelope Base64 para teste do handler ou console da Lambda; nao testa a conectividade com o broker.

Testes Python via Docker

Nao e necessario instalar Python na maquina:

docker build -t noctus-lambda-test .
docker run --rm --entrypoint python -e AWS_ACCESS_KEY_ID=test -e AWS_SECRET_ACCESS_KEY=test -e AWS_REGION=us-east-1 -e CURATED_BUCKET_NAME=test-curated noctus-lambda-test /app/test_lambda.py

Como alternativa, execute localmente apos instalar requirements.txt:

pip install -r requirements.txt
python test_lambda.py

Terraform

O trigger Kafka fica desabilitado por padrao, portanto o deploy do restante da infraestrutura nao exige um cluster existente.

Amazon MSK

enable_kafka_trigger  = true
kafka_source_type     = "msk"
kafka_msk_cluster_arn = "arn:aws:kafka:us-east-1:123456789012:cluster/noctus/..."

Essa variante assume autenticacao IAM no MSK. As permissoes de leitura ficam limitadas aos recursos de topico e consumer group derivados do ARN informado.

Kafka self-managed

enable_kafka_trigger      = true
kafka_source_type         = "self_managed"
kafka_bootstrap_servers   = ["broker-1.example.com:9092", "broker-2.example.com:9092"]
kafka_subnet_ids          = ["subnet-0123456789abcdef0"]
kafka_security_group_ids  = ["sg-0123456789abcdef0"]
kafka_auth_type           = "SASL_SCRAM_512_AUTH"
kafka_auth_secret_arn     = "arn:aws:secretsmanager:us-east-1:123456789012:secret:noctus-kafka"

As duas opcoes usam fraud-detection-topic, consumer group noctus-curation-v1 e uma fila SQS com retencao de 14 dias para lotes descartados. O Terraform apenas configura a conexao; ele nao cria o cluster Kafka/MSK.

Validacao:

Set-Location terraform
terraform fmt -check
terraform init
terraform validate

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages