A fatura de S3 em outubro já ia a US$ 4,23 em três dias — 84% da conta AWS do mês. Não era foto de cardápio. Era o sidecar Litestream perguntando ao bucket, milhares de vezes por hora, se o WAL ainda estava lá.
Em 29 de setembro de 2026 nasceu o bucket
cleat-litestream-840298254452, região us-east-1, com versioning ligado no create.
No mesmo dia o Cost Explorer deixa de ser US$ 0,09 (só storage) e vira tempestade de ListBucket.
O processo cleat-litestream (Litestream 0.5.17) replica 27 arquivos SQLite de apps no cx33
para S3, sync-interval: 1s. Cada ciclo lista gerações e WAL. No S3, LIST custa o mesmo que PUT:
US$ 0,005 por mil. Disco quase não pesava. API, sim.
Escala relativa a 30/set = US$ 9,19. *3/out ainda parcial no Cost Explorer, cutover ~19:00 UTC.
| Operação | Quantidade | Custo |
|---|---|---|
| ListBucket | 800.498 | US$ 4,00 |
| PutObject | 27.238 | US$ 0,14 |
| GetObject | 6.958 | ~ US$ 0,00 |
| StandardStorage ~4 GB | — | US$ 0,09 |
| Transferência saída | 25,6 GB | US$ 0,00 (free tier) |
cleat_deploy sozinho: ~5.664 objetos, ~133 WAL/hora360 mil LIST/dia × US$ 0,005 / mil = US$ 1,80/dia. Em 30 dias, US$ 54 só para o sidecar perguntar “tem arquivo aí?”.
Decisão: o workload é LIST-pesado. No Backblaze B2, desde 1º de maio de 2026, Class A/B/C (PUT/LIST/GET) é grátis no pay-as-you-go.
Storage US$ 6,95/TB, 10 GB free. A conta B2 da casa já existia (OpenDrive / rclone b2stash).
Bucket próprio — não misturar réplica de SQLite com arquivo de cliente.
cleat-litestream-840298254452 com versioning. 130 mil LIST no mesmo dia.cleat-litestream-phoenix (us-east-005, endpoint S3-compatible). 27 réplicas no litestream.yml. Credenciais no litestream.env. Unidade reiniciada.litestream reset. Snapshot fresco no B2. Zero ERROR depois.cleat.db fluindo.| Peça | Antes | Depois |
|---|---|---|
| Réplica Litestream | S3 cleat-litestream-840298254452 |
B2 cleat-litestream-phoenix |
| Endpoint | s3.us-east-1.amazonaws.com |
s3.us-east-005.backblazeb2.com · force-path-style |
| Versioning | ligado no create | desligado (default B2) |
| Custo de LIST | US$ 0,005 / mil | US$ 0 |
| Apps (cardápio, loja…) | Continuam no S3 de mídia. Fora deste incidente. | |
Rollback no host: /etc/cleat_deploy/litestream.yml.bak-s3-* e litestream.env.bak-s3-*.
O exemplo em cleat-web/deploy/litestream.yml.example agora documenta B2 e o custo de LIST no S3.
Um sidecar único replicando 27 SQLite para S3 com sync de 1 segundo, num bucket versionado.
A API ListBucket é Tier-1. Retention do Litestream apaga WAL; o versioning do S3
transforma isso em dezenas de milhares de versões e delete markers. A fatura cobra a pergunta, não o arquivo.
b2stash já no hostlitestream reset (LTX local vs replica nova)cleat.db no restart — recuperou no resetopen-drive-phoenix.S3_ENDPOINT — outro problema, outro adapter.| Ação | Dono | Estado |
|---|---|---|
Réplicas no B2 cleat-litestream-phoenix | infra / cx33 | feito |
| Esvaziar S3 antigo (96.946 versões) | infra | feito |
Documentar B2 no litestream.yml.example | cleat-web | feito |
| Alarme Cost Explorer / budget em S3 Requests-Tier1 | infra | aberto |
| Apagar o bucket S3 vazio quando não precisar mais do nome | infra | opcional |
Subir sync-interval mesmo no B2 (ruído / ToS) | cleat-litestream | aberto |
Lição numa linha: backup contínuo de SQLite é um gerador de LIST. Escolha um store que não cobre pergunta — ou pergunte bem menos.