Skip to main content

Deploy na AWS (Lambda + API Gateway)

Arquitetura

GitLab → API Gateway (HTTP API) → Lambda → Secrets Manager (cold start)

Lambda Self-Invoke (async)

ReviewPipeline → GitLab API + NVIDIA NIM

Pré-requisitos

  • AWS CLI configurado
  • Terraform >= 1.5 instalado
  • Python 3.12

1. Empacotar o código

# Instalar dependências
pip install . -t build/

# Copiar código fonte
cp -r src/* build/

# Criar zip
cd build && zip -r ../lambda.zip . && cd ..

2. Inicializar Terraform

cd terraform
terraform init

3. Planejar a infraestrutura

terraform plan \
-var lambda_zip_path="../lambda.zip" \
-var gitlab_url="https://gitlab.com/api/v4"

4. Aplicar

terraform apply \
-var lambda_zip_path="../lambda.zip" \
-var gitlab_url="https://gitlab.com/api/v4"

5. Configurar os secrets

Os secrets são criados vazios pelo Terraform. Preencha os valores reais:

# GitLab Token
aws secretsmanager put-secret-value \
--secret-id $(terraform output -raw gitlab_token_secret_arn) \
--secret-string "glpat-seu-token"

# Webhook Secret
aws secretsmanager put-secret-value \
--secret-id $(terraform output -raw gitlab_webhook_secret_arn) \
--secret-string "seu-segredo-forte"

# NVIDIA API Key
aws secretsmanager put-secret-value \
--secret-id $(terraform output -raw nvidia_api_key_secret_arn) \
--secret-string "nvapi-sua-chave"

6. Obter a URL do webhook

terraform output webhook_url

Saída:

"https://abc123.execute-api.us-east-1.amazonaws.com/webhook"

7. Configurar no GitLab

  1. Acesse Settings → Webhooks no GitLab
  2. Cole a URL do output anterior
  3. Secret Token: o mesmo valor usado no passo 5
  4. Trigger: Merge request events

Recursos criados

RecursoDescrição
aws_lambda_function.webhookFunção Lambda (Python 3.12, 512MB, 60s timeout)
aws_apigatewayv2_api.webhookHTTP API Gateway
aws_secretsmanager_secret.*3 secrets (GitLab token, webhook secret, NVIDIA key)
aws_iam_role.lambda_execRole da Lambda com permissões mínimas
aws_cloudwatch_log_group.webhookLogs com retenção de 30 dias

Arquitetura da Lambda

Cold start

No cold start, a Lambda:

  1. Lê as variáveis de ambiente (*_SECRET_ARN)
  2. Busca os valores dos secrets no Secrets Manager
  3. Inicializa os clientes (GitLab, NVIDIA NIM)
  4. Cria o app FastAPI com Mangum

Request webhook

  1. API Gateway recebe POST /webhook
  2. Mangum adapta para FastAPI
  3. Validação do token → 202 Accepted
  4. LambdaSelfInvokeDispatcher invoca a mesma Lambda async
  5. Lambda retorna HTTP response imediatamente
  6. Lambda invocada async roda o ReviewPipeline

Self-invoke

A Lambda se auto-invoca com InvocationType="Event" para garantir que o pipeline rode mesmo após o timeout do webhook handler.

Custos estimados

Para ~100 MRs/dia com ~5 arquivos cada:

  • Lambda: ~$0.05/mês (dentro do free tier)
  • API Gateway: ~$0.10/mês
  • Secrets Manager: ~$0.40/mês (3 secrets)
  • CloudWatch Logs: ~$0.50/mês

Total estimado: ~$1.00/mês

Tear down

cd terraform
terraform destroy \
-var lambda_zip_path="../lambda.zip" \
-var gitlab_url="https://gitlab.com/api/v4"