Athena Query API
API HTTPS que executa queries nomeadas sobre tabelas de logs/auditoria no
AWS Athena (database datalake_logs) e devolve o resultado em JSON.
Foi feita para o app Rails consultar o datalake sem precisar assinar requisições
SigV4 — basta um header com a chave de API.
Arquitetura
Rails --GET ?query=... + x-api-key--> API Gateway (valida a key) --> Lambda
├─ StartQueryExecution
├─ poll (~até 55s)
├─ GetQueryResults
└─ 200 { query, count, columns, rows }
- Endpoint: API Gateway REST (regional,
us-east-1) na frente de uma Lambda Python 3.12. - Auth: o API Gateway valida o
x-api-key; o handler revalida o mesmo segredo (defense in depth). Sem SigV4. - Queries: nomeadas e parametrizadas — sem SQL cru, sem SQL injection.
Conceitos
| Conceito | Descrição |
|---|---|
| Query | Nome que seleciona a tabela a consultar: csps, audits ou access_logs. Único parâmetro obrigatório. |
| Filtros | Demais parâmetros da query string. Colunas inteiras filtram por igualdade; colunas string por LIKE '%valor%' case-insensitive. |
| Datas | inicio/fim filtram created_at (horário de Brasília): um só → aquele dia inteiro; os dois → intervalo de até 30 dias. Opcionais, mas recomendados — veja Filtro de datas. |
| Paginação | Resposta traz no máximo 1000 linhas + next_cursor. Para a próxima página, repita a requisição com ?cursor=<next_cursor> — veja Paginação. |
| Resposta | Objeto { query, count, next_cursor, columns, rows }. Todos os valores das linhas vêm como string. |
URL base
https://mhysmr3rl9.execute-api.us-east-1.amazonaws.com/prod
A query vai na query string de um GET na raiz (/). Exemplo:
GET /?query=audits&user_id=42&action=update&inicio=2026-05-01&fim=2026-05-15
Header: x-api-key: <sua-chave>
Próximos passos
- Autenticação — como obter e enviar a chave.
- Queries — tabelas e todas as colunas filtráveis.
- Filtro de datas — semântica de
inicio/fim, fuso e limite de 30 dias. - Paginação — cursor (
next_cursor). - Exemplos — curl, Ruby, Node, Python, Go.
- Erros — todos os códigos de status.
- Referência interativa — teste a API direto no navegador.