Objetivos de aprendizado
Depois de ler este artigo, você vai conseguir:
- Entender as três linhas que compõem a conta de um object storage
- Estimar o custo mensal de um projeto com uma conta reproduzível
- Reconhecer os custos escondidos: duração mínima, versões antigas e uploads incompletos
Nesta página
- O que compõe o custo de um object storage?
- Como os grandes provedores cobram cada linha?
- Como estimar o custo mensal de um projeto?
- Quais custos escondidos aparecem na fatura?
- Como reduzir a conta de object storage?
- Quando o armazenamento é a linha que pesa?
- Como fazer isso na Square Cloud
- Perguntas frequentes
O preço em destaque na página de um object storage é o do GB armazenado, e ele é baixo: centavos de dólar por mês. Só que a fatura tem outras linhas. Cada upload, cada download e cada listagem é uma requisição, e cada GB que sai para a internet pode ser cobrado à parte.
Os números deste artigo são hipotéticos, escolhidos para facilitar a conta. Não são preços de nenhum provedor; os valores reais mudam com o tempo, variam por região e ficam nas páginas oficiais citadas em "fontes". A conta completa mais adiante pode ser adaptada ao seu projeto. Se o conceito ainda é novo, comece por o que é object storage.
O que compõe o custo de um object storage?#
Quase todo provedor cobra três coisas:
- Armazenamento: GB guardados por mês. A cobrança costuma ser proporcional ao tempo: 1 TB por meio mês custa metade de 1 TB pelo mês inteiro.
- Requisições: operações na API. Escrever (PUT, COPY, POST) e listar (LIST) costuma custar mais que ler (GET).
- Saída de dados (egress): GB transferidos do storage para a internet ou para outra região. A entrada, em geral, não é cobrada.
Alguns provedores acrescentam linhas para classes de armazenamento frias (taxa de recuperação, duração mínima) e para recursos como replicação entre regiões. O modelo de cobrança varia muito: há quem cobre as três linhas, quem isente requisições e quem não cobre saída.
Como os grandes provedores cobram cada linha?#
Duas referências com modelos opostos:
| Linha | Amazon S3 Standard | Backblaze B2 (pay-as-you-go) |
|---|---|---|
| Armazenamento | Preço por GB-mês, em faixas que barateiam com o volume | Preço por TB-mês, em geral mais baixo por GB |
| Escrita e listagem | Cobradas por milhar de PUT, COPY, POST ou LIST | Sem cobrança na maior parte das chamadas |
| Leitura | Cobrada por milhar de GET, mais barata que a escrita | Sem cobrança na maior parte das chamadas |
| Saída para a internet | Franquia mensal pequena (somando todos os serviços da AWS), depois preço por GB em faixas de volume | Franquia proporcional ao volume armazenado, depois um preço baixo por GB |
| Duração mínima | Nenhuma no Standard | Nenhuma |
No S3, tanto o preço do GB quanto o da saída caem em faixas conforme o volume cresce. No B2, algumas chamadas menos comuns são cobradas acima de uma franquia diária. Os preços mudam e variam por região, então confira as páginas oficiais da AWS e da Backblaze antes de fechar uma conta.
Como estimar o custo mensal de um projeto?#
Você precisa de quatro números: GB armazenados, número de uploads, número de downloads e GB baixados por mês. Exemplo hipotético: um app que guarda 500 GB de imagens, recebe 1 milhão de uploads e serve 20 milhões de downloads que somam 2 TB (2.000 GB) por mês.
O script abaixo faz a conta para um provedor que cobra as três linhas separadas, com preços hipotéticos. Troque-os pelos preços atuais do seu provedor e da sua região antes de usar o resultado. Salve como custo-storage.mjs e rode com node custo-storage.mjs:
// Exemplo hipotético em US$: um provedor que cobra as três linhas separadas.
// Não são preços de nenhum provedor; troque pelos da página oficial do seu.
const preco = {
armazenamentoGB: 0.02, // por GB-mês
putPorMil: 0.01, // por 1.000 PUT, COPY, POST ou LIST
getPorMil: 0.001, // por 1.000 GET
saidaGB: 0.1, // por GB para a internet
franquiaSaidaGB: 100, // franquia mensal de saída
};
const uso = { armazenadoGB: 500, puts: 1_000_000, gets: 20_000_000, saidaGB: 2000 };
const linhas = {
armazenamento: uso.armazenadoGB * preco.armazenamentoGB,
uploads: (uso.puts / 1000) * preco.putPorMil,
downloads: (uso.gets / 1000) * preco.getPorMil,
saida: Math.max(0, uso.saidaGB - preco.franquiaSaidaGB) * preco.saidaGB,
};
const total = Object.values(linhas).reduce((a, b) => a + b, 0);
for (const [nome, valor] of Object.entries(linhas)) console.log(nome.padEnd(14), valor.toFixed(2));
console.log("total".padEnd(14), total.toFixed(2));A saída:
armazenamento 10.00
uploads 10.00
downloads 20.00
saida 190.00
total 230.00O armazenamento é 4% da conta; a saída, 83%. Agora um provedor que cobra US$ 5 por TB-mês, não cobra requisições e dá uma franquia de saída de 2 vezes o volume armazenado, com US$ 0,02 por GB acima dela (também hipotético): o mesmo cenário dá US$ 2,50 de armazenamento (0,5 TB), nada de requisições e US$ 20 de saída (2.000 GB menos a franquia de 1.000 GB), US$ 22,50 no total. A diferença vem quase toda da política de saída, não do preço do GB. O artigo sobre taxas de saída detalha como essa linha funciona.
Para chegar nos seus números, estime o tamanho médio do arquivo e multiplique pelo número de downloads. Um arquivo de 100 KB baixado 20 milhões de vezes são 2.000 GB.
Quais custos escondidos aparecem na fatura?#
- Duração e tamanho mínimos em classes frias. O S3 Standard-IA cobra menos por GB-mês que o Standard, mas conta no mínimo 30 dias por objeto, cobra objetos menores que 128 KB como se tivessem 128 KB e acrescenta uma taxa por GB recuperado. Um arquivo apagado depois de uma semana paga o mês inteiro. Classes de arquivamento têm prazos mínimos ainda maiores.
- Versões antigas. Com versionamento ligado, a AWS informa que cada versão é o objeto inteiro e é cobrada pelas tarifas normais: três versões de um arquivo custam como três arquivos. Sobrescrever um arquivo grande todo dia multiplica o armazenamento em silêncio.
- Uploads multipart incompletos. As partes de um upload que nunca terminou ficam guardadas até serem abortadas. A AWS recomenda uma regra de lifecycle com
AbortIncompleteMultipartUploadpara reduzir esse custo. Veja regras de ciclo de vida. - Listagens em massa. Ferramentas de sincronização que listam o bucket inteiro a cada execução geram milhares de LIST, cobrados como escrita no S3.
- Saída entre regiões e migração. Copiar dados para outra região, ou baixar tudo para trocar de provedor, é saída cobrada sobre o volume inteiro.
- Picos e hotlinking. Um arquivo viral ou outro site usando o link direto das suas imagens multiplica a saída sem que nada mude no seu código.
Como reduzir a conta de object storage?#
- Coloque uma CDN na frente dos arquivos públicos, com
Cache-Controllongo. O arquivo sai do storage uma vez e o resto vem do cache. A diferença entre arquivos públicos e privados define o que pode ir para a CDN. - Comprima e redimensione antes de subir. Uma imagem WebP de 80 KB no lugar de um JPEG de 2 MB corta armazenamento e saída ao mesmo tempo.
- Use regras de lifecycle para apagar temporários, versões antigas e uploads incompletos.
- Só mova para classes frias o que você realmente não lê, e só se o arquivo ficar lá mais que a duração mínima.
- Escolha o provedor pelo seu perfil de uso. Muito armazenamento e pouco download: o preço do GB manda. Muito download: a política de saída manda. Um storage compatível com S3 facilita trocar depois, porque o código não muda.
Quando o armazenamento é a linha que pesa?#
Em arquivos frios, como cópias de segurança e logs antigos, quase não há download, então a conta é praticamente GB vezes preço por GB. Aqui classes de arquivamento e provedores com GB barato fazem diferença real, desde que você respeite as durações mínimas. Para esse caso, veja como guardar cópias de segurança em object storage.
Já em apps que servem mídia para usuários (imagens de perfil, anexos, vídeos), a saída domina e o preço do GB armazenado quase não importa.
Como fazer isso na Square Cloud#
O Blob Storage da Square Cloud é um object storage com API compatível com S3 (aws-cli, rclone, boto3, SDKs da AWS), API REST e painel. Ele não cobra taxa de saída nem de entrada, então a linha que dominava a conta do exemplo some da fatura.
Todo plano inclui uma cota de armazenamento, de 5 GB a 250 GB. O plano Hobby, a partir de R$ 12,49 por mês, inclui de 5 a 15 GB de Blob. Arquivos públicos são servidos por uma CDN global na edge, e arquivos privados abrem por link temporário de até 24 horas ou por link de compartilhamento de até 30 dias.
No lugar das regras de lifecycle, o Blob tem regras por pasta (expiração, cache, limpeza automática): a regra "apagar após N dias" expira os objetos antigos sozinha, contando a partir da última escrita. Ele aceita arquivos de até 10 GB, e o multipart só é obrigatório acima de 100 MB. Veja cotas e detalhes na página do Blob Storage.
Blob Storage
Object storage compatível com S3, sem taxa de saída
Perguntas frequentes
Quanto custa guardar 1 TB em object storage?
Só o armazenamento é o volume em GB vezes o preço por GB-mês do provedor. Supondo US$ 0,02 por GB-mês (valor hipotético), 1 TB (1.000 GB) sai por US$ 20 por mês; num provedor que cobrasse US$ 5 por TB-mês, também hipotético, sairia por US$ 5. Requisições e saída de dados entram à parte.
Por que minha conta de storage veio maior que o esperado?
Quase sempre por saída de dados (downloads para a internet) ou por requisições em massa. Versões antigas de objetos, uploads multipart incompletos e taxas de recuperação em classes frias também somam sem aparecer no painel principal.
Classes frias como Infrequent Access são sempre mais baratas?
Só para arquivos que quase nunca são lidos. No S3 Standard-IA o GB armazenado custa menos, mas há taxa por GB recuperado, cobrança mínima de 30 dias e de 128 KB por objeto.
Upload de arquivos é cobrado?
A transferência de entrada vinda da internet costuma ser gratuita, mas cada upload é uma requisição. No S3, PUT, COPY, POST e LIST são cobrados por milhar de requisições, a uma tarifa maior que a do GET.
Mais em Storage
Ver todos os 15 artigos- O que é uma URL assinada (pre-signed URL) e quando usarUma URL assinada (pre-signed URL) é um link temporário para um arquivo privado. Veja como funciona, o que ela não faz e quando usar.
- O que é armazenamento de objetos (object storage)Armazenamento de objetos guarda arquivos como objetos com chave e metadados, acessados por API HTTP. Veja como funciona, para que serve e seus limites.
- O que é S3 e armazenamento compatível com S3S3 é o armazenamento de objetos da Amazon e virou a API padrão do setor. Veja o que significa ser compatível com S3, o que muda e como conectar via boto3.
- Upload de arquivos grandes: multipart e upload retomávelO upload multipart divide um arquivo grande em partes enviadas em paralelo e reenviadas uma a uma. Veja o passo a passo em Python, como retomar e os erros comuns.