Painel web de administração do Amazon SQS — 100% serverless.
- 📋 Listar filas (Standard + FIFO) com métricas em tempo real
- ➕ Criar / deletar filas
- ⚙️ Editar atributos (visibility timeout, retention, redrive policy)
- 🗑️ Purgar filas
- 📨 Enviar mensagens (com suporte a FIFO group/dedup ID e delay)
- 📦 Envio em batch (JSON array)
- 👁️ Peek de mensagens (visualizar sem remover da fila)
- ✏️ Editar o corpo da mensagem in place (peek-and-edit best-effort, race delete/send existe; preserva MessageAttributes, não todos os atributos SQS)
- 🔍 Filtro de mensagens por conteúdo
- ❌ Deletar mensagens individuais
- 🔄 Redrive de DLQ (reprocessar mensagens que falharam)
- 🔀 Mover mensagens entre filas (por
messageId, comMessageAttributespreservados) - ⏱️ Long polling com retries configuráveis para fetch confiável
- 📤 Export / Import de mensagens (JSON)
- 📊 Dashboard com KPIs e visão geral de todas as filas
- 🔐 Autenticação via Cognito (no deploy AWS)
- Frontend: React + Vite → S3 + CloudFront
- Backend: API Gateway + Lambda (Python) → AWS SAM
- Auth: Amazon Cognito User Pool
- Local: Docker Compose (LocalStack + Backend + Frontend)
- Docker
Copie o arquivo de exemplo e escolha um modo:
cp .env.example .env.env.example documenta dois modos:
- Modo A — AWS SQS real: deixe
SQS_ENDPOINT_URLvazio e preenchaAWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_SESSION_TOKEN(opcional, para SSO / role assumida) eAWS_DEFAULT_REGION. O backend conversa diretamente com a AWS. - Modo B — LocalStack (desenvolvimento local padrão): defina
SQS_ENDPOINT_URL=http://localstack:4566e use as credenciais dummytest.
⚠️ SQS_ENDPOINT_URLdeve ser apenas o endpoint do serviço — nunca a URL de uma fila. Colocar a URL de uma fila causaInvalidAction ... ListQueues is not valid for this endpoint.
Modo A (AWS SQS real) — sobe apenas backend e frontend:
docker compose up --build -d backend frontendModo B (LocalStack) — sobe os três serviços:
docker compose --profile localstack up --buildAcesse http://localhost:5173. Pronto.
Serviços:
- localstack (porta 4566) — SQS emulado (somente Modo B)
- backend (porta 3001) — API Python que invoca o mesmo handler da Lambda
- frontend (porta 5173) — Vite dev server com proxy para o backend
No ambiente local a autenticação é desabilitada automaticamente.
# Localmente (com containers já rodando)
bash tests.sh
# Via Docker (sobe tudo e roda os testes)
docker compose --profile test run --rm testsOs testes cobrem: CRUD de filas, envio/recebimento, batch, export/import, move, DLQ/redrive, purge e delete.
- AWS CLI configurado
- AWS SAM CLI (
brew install aws-sam-cli) - Node.js 18+
./deploy.sh sqs-admin-panel admin@example.comParâmetros:
sqs-admin-panel— nome do stack CloudFormation (opcional, default:sqs-admin-panel)admin@example.com— email do admin inicial (opcional, recebe senha temporária por email)
O script faz tudo automaticamente:
sam build+sam deploy(Lambda, API Gateway, Cognito, S3, CloudFront)- Build do frontend com as variáveis do Cognito e API URL
- Upload do frontend pro S3
- Exibe a URL do painel
# 1. Deploy do backend
sam build
sam deploy --guided
# 2. Copie os outputs (ApiUrl, UserPoolId, UserPoolClientId, FrontendBucket)
# 3. Build do frontend
cd frontend
VITE_API_URL=https://xxx.execute-api.us-east-1.amazonaws.com/api \
VITE_COGNITO_USER_POOL_ID=us-east-1_xxx \
VITE_COGNITO_CLIENT_ID=xxx \
npm run build
# 4. Upload pro S3
aws s3 sync dist/ s3://BUCKET_NAME/ --delete./destroy.sh sqs-admin-panelEsvazia o bucket S3 e deleta todo o stack CloudFormation (Lambda, API Gateway, Cognito, S3, CloudFront).
sqs_admin_painel/
├── backend/
│ ├── app.py # Lambda handler — API completa do SQS
│ ├── local_server.py # Servidor HTTP local que emula API Gateway
│ ├── Dockerfile
│ └── requirements.txt
├── frontend/
│ ├── src/
│ │ ├── App.tsx # Componente principal (queue detail)
│ │ ├── App.css # Estilos globais
│ │ ├── Dashboard.tsx # Dashboard com KPIs e tabela de filas
│ │ ├── Dashboard.css # Estilos do dashboard
│ │ ├── Login.tsx # Tela de login (Cognito)
│ │ ├── api.ts # Cliente HTTP para a API
│ │ ├── auth.ts # Módulo de autenticação (Cognito)
│ │ ├── main.tsx # Entry point com fluxo de auth
│ │ └── vite-env.d.ts
│ ├── index.html
│ ├── vite.config.ts
│ ├── tsconfig.json
│ ├── Dockerfile
│ └── package.json
├── template.yaml # SAM template (Lambda, API GW, Cognito, S3, CloudFront)
├── samconfig.toml
├── docker-compose.yml # Ambiente local (LocalStack + Backend + Frontend + Tests)
├── deploy.sh # Script de deploy one-click
├── destroy.sh # Script de tear-down
├── tests.sh # Testes de integração
├── .env.example # Template de env local (Modo A: AWS real / Modo B: LocalStack)
├── .gitignore
└── README.md
| Variável | Descrição | Obrigatória |
|---|---|---|
VITE_API_URL |
URL do API Gateway | Sim (deploy) |
VITE_COGNITO_USER_POOL_ID |
Cognito User Pool ID | Sim (deploy) |
VITE_COGNITO_CLIENT_ID |
Cognito App Client ID | Sim (deploy) |
Quando as variáveis do Cognito não estão definidas, a autenticação é desabilitada (modo local).
Carregadas automaticamente pelo docker compose a partir do .env na raiz
do projeto. Veja .env.example para o template completo.
| Variável | Descrição | Default |
|---|---|---|
SQS_ENDPOINT_URL |
Endpoint do serviço SQS. Vazio = AWS real; http://localstack:4566 = LocalStack. Nunca a URL de uma fila. |
(vazio) |
AWS_ACCESS_KEY_ID |
AWS access key | test |
AWS_SECRET_ACCESS_KEY |
AWS secret key | test |
AWS_SESSION_TOKEN |
Session token (apenas para SSO / credenciais temporárias) | (vazio) |
AWS_DEFAULT_REGION |
Região AWS onde estão as filas | us-east-1 |
- API protegida por Cognito Authorizer (JWT)
- Frontend servido via CloudFront (HTTPS)
- S3 bucket privado (acesso apenas via CloudFront OAC)
- Lambda com policy
sqs:*— intencional, pois é um painel de administração - CORS configurado no API Gateway
MIT