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
- Acesse Settings → Webhooks no GitLab
- Cole a URL do output anterior
- Secret Token: o mesmo valor usado no passo 5
- Trigger: Merge request events
Recursos criados
| Recurso | Descrição |
|---|---|
aws_lambda_function.webhook | Função Lambda (Python 3.12, 512MB, 60s timeout) |
aws_apigatewayv2_api.webhook | HTTP API Gateway |
aws_secretsmanager_secret.* | 3 secrets (GitLab token, webhook secret, NVIDIA key) |
aws_iam_role.lambda_exec | Role da Lambda com permissões mínimas |
aws_cloudwatch_log_group.webhook | Logs com retenção de 30 dias |
Arquitetura da Lambda
Cold start
No cold start, a Lambda:
- Lê as variáveis de ambiente (
*_SECRET_ARN) - Busca os valores dos secrets no Secrets Manager
- Inicializa os clientes (GitLab, NVIDIA NIM)
- Cria o app FastAPI com Mangum
Request webhook
- API Gateway recebe POST /webhook
- Mangum adapta para FastAPI
- Validação do token →
202 Accepted LambdaSelfInvokeDispatcherinvoca a mesma Lambda async- Lambda retorna HTTP response imediatamente
- 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"