- Na AWS, a transferência entre zonas de disponibilidade dentro da mesma região custa US$ 0,01 por GB tanto no envio quanto no recebimento; uma transferência direta de 1 TB sai por cerca de US$ 20, mas usando o S3 como ponto de passagem temporário é possível reduzir o custo para a casa dos centavos
- Buckets S3 Standard funcionam em nível de região e a AWS replica os dados para pelo menos 3 zonas de disponibilidade dentro da região, portanto eles podem ser acessados igualmente a partir de várias AZs na mesma região
- Quando uma EC2 faz upload para o S3 na mesma região e outra AZ faz o download, a cobrança de transferência de dados é gratuita; o custo real se reduz ao custo de armazenamento no S3 por um curto período e às chamadas de API
- Em
us-east-1, armazenar 1 TB por menos de 1 hora custa apenas cerca de US$ 0,03, que é 1/720 do valor de US$ 23/TB-mês do S3 Standard; até 1 PB cai para cerca de US$ 32, em vez de US$ 20.000 em transferência direta - Esse método não é um substituto drop-in para código de transferência de rede e pode aumentar a latência, mas, para transferências cross-AZ em massa em que custo é a prioridade máxima, pode gerar economia de mais de 99%
Onde os custos de transferência de dados da AWS aumentam
- Se você mover dados sem cuidado na AWS, os custos de transferência se acumulam rapidamente
- No momento da redação, as principais tarifas de transferência de dados são as seguintes
- Transferências de saída da AWS para a internet pública custam US$ 0,09 por GB em
us-east-1e até US$ 0,154 por GB emaf-south-1; transferir 1 TB custa de US$ 90 a US$ 154 - Transferências de saída de uma região da AWS para outra custam US$ 0,02 por GB em
us-east-1e até US$ 0,147 por GB emaf-south-1; mesmo sem sair da rede da AWS, 1 TB pode custar de US$ 20 a US$ 147 - Transferências entre zonas de disponibilidade diferentes dentro da mesma região custam US$ 0,01 por GB em cada direção; enviar 1 TB de
us-east-1aparaus-east-1bresulta em US$ 10 de envio e US$ 10 de recebimento, totalizando US$ 20
- Transferências de saída da AWS para a internet pública custam US$ 0,09 por GB em
- Para transferências pela internet e entre regiões, você paga apenas a taxa de egress sobre os dados de saída, mas transferências entre AZs dentro da mesma região são cobradas nos dois sentidos
- Arquiteturas que distribuem recursos por várias zonas de disponibilidade aumentam a resiliência e a disponibilidade, mas quando recursos em AZs diferentes trocam dados, surgem custos cross-AZ
Cuidados com PrivateLink e endpoints de VPC
- Se uma instância EC2 enviar 1 TB para um bucket S3 público em outra região, você pode receber uma cobrança de egress para a internet de US$ 90, em vez dos US$ 20 esperados de transferência entre regiões
- AWS PrivateLink e endpoints de VPC são úteis em termos de preço e segurança porque garantem que dados entre regiões não saiam da rede da AWS
- Porém, esses recursos não são gratuitos e têm suas próprias limitações e detalhes de cobrança
- Materiais relacionados
Contornando custos de transferência cross-AZ com S3
- A maioria das classes de armazenamento do S3 guarda buckets em nível de região, não de zona de disponibilidade
- O usuário faz upload para um bucket
us-east-1, não para um bucketus-east-1aouus-east-1b - Internamente, a AWS replica os dados para pelo menos 3 zonas de disponibilidade dentro da região
- O usuário faz upload para um bucket
- Dados em buckets S3 Standard podem ser acessados igualmente a partir de todas as zonas de disponibilidade da AWS na mesma região; para o S3, não há diferença entre baixar de
us-east-1aou deus-east-1b - No S3 Standard, downloads dentro da mesma região são gratuitos, e as tarifas normais de transferência de dados se aplicam ao baixar de outra região ou para a internet pública
- Uploads para o S3 são gratuitos em termos de transferência de dados em todas as classes de armazenamento
- Porém, há custos de chamadas da API do S3
- O custo das chamadas é relativamente baixo
Cálculo de custos para 1 TB e 1 PB
- Enviar 1 TB diretamente de uma instância EC2 em
us-east-1apara uma instância EC2 emus-east-1bcusta US$ 20 - Se os mesmos dados forem enviados para o S3 e depois baixados por uma instância em outra AZ, os custos de transferência de dados de upload e download são gratuitos
- O custo restante é o armazenamento no S3
- O S3 Standard em
us-east-1custa US$ 0,023 por GB ao mês, ou US$ 23 por TB ao mês - A cobrança é calculada por hora
- Se o projeto garantir que os dados fiquem no S3 por menos de 1 hora, o custo fica em cerca de US$ 0,03, que é 1/720 de US$ 23 considerando 720 horas
- É preciso excluir os objetos do S3 após a transferência
- O S3 Standard em
- Nesse cálculo, o custo de transferência cai de US$ 0,02 por GB para US$ 0,000032/GB, cerca de 0,15% da tarifa original
- Em um exemplo extremo, transferir 1 PB custaria cerca de US$ 32 com esse método, em vez dos US$ 20.000 do método padrão
Escalabilidade e limitações
- O S3 é altamente escalável, o que também o torna adequado para cenários em que objetos enviados de uma AZ são baixados simultaneamente por muitas instâncias em outra AZ
- Milhares de instâncias na segunda AZ podem baixar o mesmo objeto S3
- O custo de armazenamento no S3 permanece o mesmo
- O custo de download também permanece gratuito
- Há limites para o tamanho de objetos no S3
- Um único objeto não pode exceder 5 TB
- Arquivos maiores que 5 TB precisam ser divididos
- Um upload único não pode exceder 5 GB, portanto arquivos maiores exigem multipart upload
aws s3 cptrata multipart upload internamente
- S3 One Zone-Infrequent Access e S3 Express One Zone armazenam dados em apenas uma zona de disponibilidade
- O custo de armazenamento é menor, mas há um preço a pagar em termos de disponibilidade
- Em
us-east-1, o S3 One Zone-Infrequent Access custa US$ 0,01 por GB, e o S3 Infrequent Access custa US$ 0,0125 por GB - O S3 One Zone-Infrequent Access é projetado para 99,5% de disponibilidade, e o S3 Infrequent Access para 99,99%
Configuração do experimento e custos confirmados
- O experimento usou 2 novas contas AWS para cada parte, a fim de reduzir ruídos de custo
- Em cada conta, foram colocadas 2 instâncias EC2 em
us-east-1aeus-east-1b, e uma instância emus-east-1agerou um arquivo aleatório de 1 TB - Dois métodos foram comparados
- No primeiro, em uma VPC com sub-redes privadas nas duas AZs, foi iniciado um servidor netcat na instância em
us-east-1b, e a instância emus-east-1atransferiu diretamente o arquivo de 1 TB - No segundo, em uma VPC com S3 Gateway endpoint, foi criado um bucket S3; a instância em
us-east-1afez upload do arquivo de 1 TB, e a instância emus-east-1bfez download e o excluiu
- No primeiro, em uma VPC com sub-redes privadas nas duas AZs, foi iniciado um servidor netcat na instância em
- O AWS Free Tier pode ter influenciado ligeiramente os resultados do experimento
- O Free Tier do S3 oferece 5 GB-months por 12 meses
- 5 GB-months é menor que 1 TB-hour, mas não é uma diferença grande
- Após a atualização do Cost Explorer, o experimento de transferência direta ficou em US$ 21,49, próximo dos US$ 20 esperados
- O fato de a transferência ter sido interrompida e reiniciada uma vez explica parte do custo adicional
- O arquivo gerado tinha tecnicamente 1024 GB, portanto o custo base era US$ 20,48
- O experimento de transferência baseada em S3 apareceu inicialmente como US$ 0,08, sem custos de transferência de dados exibidos
- Depois, confirmou-se que os custos de armazenamento do S3 são reportados por bucket em base diária e que sua atualização no Cost Explorer é mais lenta do que a de outros custos
- Como esperado, o custo de armazenamento reportado ficou na casa de alguns centavos
- O Free Tier de armazenamento do S3 foi totalmente consumido
- Essa possibilidade foi apontada por Dieter Matzion, da comunidade FinOps
Quando vale a pena usar
- A AWS replica internamente dados do S3 entre zonas de disponibilidade, e esse custo está incluído no custo de armazenamento do S3 pago pelo usuário
- O método que passa pelo S3 aproveita o fato de que o custo cross-AZ já foi pago indiretamente no momento do upload
- Se você mantiver os dados no S3 por muito tempo, isso pode sair muito mais caro do que uma transferência direta cross-AZ
- Ao excluir os objetos logo após a transferência, é possível atingir a redução de custo de 99% pretendida
- As desvantagens também são claras
- Não é um substituto drop-in para código de transferência de dados existente
- A latência pode ser muito maior do que em uma conexão de rede direta
- Quando o custo é a prioridade máxima, esta pode ser uma forma prática de reduzir em mais de 99% os custos de transferência de dados cross-AZ na AWS
1 comentários
Opiniões no Hacker News
Compartilhando o meu truque: é possível usar uma instância Lightsail para fazer “proxy” de dados de outros recursos da AWS, por exemplo instâncias EC2 ou buckets S3
Cada instância Lightsail inclui uma franquia de transferência de dados no preço: a instância de US$ 3,50 oferece 1 TB, a de US$ 5 oferece 2 TB, a de US$ 10 oferece 3 TB, a de US$ 20 oferece 4 TB, e a de US$ 40 oferece 5 TB
Em preço por volume transferido, a melhor é a instância de US$ 10 com 3 TB
Com base nos dados do texto, 3 TB de tráfego no EC2 custariam US$ 276,48 em us-east-1, e US$ 69 a partir de um bucket S3
A desvantagem é que, no Lightsail, tanto o tráfego de entrada quanto o de saída contam como “tráfego”
Segundo a cláusula 51.3 dos termos da AWS, não se deve usar o Amazon Lightsail de uma forma destinada a evitar cobranças de dados de outros serviços
Isso inclui, por exemplo, fazer proxy de tráfego de rede de outros serviços para a internet pública ou outros destinos, ou processar dados em excesso por meio de serviços de balanceamento de carga/CDN; em caso de violação, a AWS pode limitar os serviços de dados ou suspender a conta
Basta definir o S3 ou qualquer servidor HTTP desejado como origem
Antes eram 50 GB por mês nos primeiros 12 meses, mas logo depois que a Cloudflare publicou https://blog.cloudflare.com/aws-egregious-egress, isso mudou para 1 TB gratuito permanente
O GCP também fechou uma brecha parecida em 2023, provavelmente porque alguns clientes a estavam explorando
Se esse método se espalhar o suficiente, imagino que a AWS fará o mesmo
https://cloud.google.com/storage/pricing-announce#network
A “brecha” que o GCP fechou era a possibilidade de fazer transferência de dados entre regiões no mesmo continente via GCS gratuitamente; na AWS, isso já é pago
O que o texto original menciona é que até a transferência entre zonas de disponibilidade dentro da mesma região custa US$ 0,02 por GB, e que isso pode ser contornado
Fico curioso se conseguiria encontrar um comprador para essa informação
Talvez não exatamente para usá-lo como canal de transferência, mas mais no sentido de esperar que você coloque os dados lá e os mantenha lá
Existem muitos desses truques para reduzir custos e conseguir recursos de graça
São engenhosos, mas não confiáveis
É o mesmo tipo de hack que fazer mineração de criptomoedas no GitHub Actions por meio de repositórios OSS
Trate como um exercício de hacking interessante, mas é melhor não colocar esse tipo de solução em produção
No mínimo, obtenha aprovação do gerente da sua conta; caso contrário, você corre o risco de acordar um dia com a conta da AWS encerrada
Passar pelo S3 também costuma ser mais eficiente para distribuir dados para vários destinos do que rodar um processo de sincronização
O custo de armazenamento do S3 é cobrado em GB-mês, então 1 TB × US$ 0,023 por GB ÷ 730 horas no mês deveria dar cerca de 3 centavos se o dado ficar uma hora no bucket
Mas, como aparentemente ele foi excluído quase imediatamente, se os dados ficaram por cerca de 1 minuto, poderia ser algo como 0,03 ÷ 60
Em geral, eu esperaria que a AWS arredondasse isso para US$ 0,01
O valor TimedByteStorage no relatório de custos e uso é o critério definitivo
https://handbook.vantage.sh/aws/services/s3-pricing/
O S3 também é um bom truque, e há outros
Clientes grandes da AWS, por exemplo os que gastam mais de US$ 1 milhão por ano, podem pedir descontos
Houve uma época em que os descontos para transferência entre zonas de disponibilidade eram muito grandes
Concentrar o máximo possível em uma única zona de disponibilidade também é uma opção
Uma configuração em que o banco de dados fica na zona “b” e o único servidor fica na zona “a” é pior até do que padronizar tudo em uma só zona
Ao usar várias zonas de disponibilidade, é preciso fazer balanceamento entre zonas levando a carga em conta
Seria por causa de custo? Mas nem parece economizar custo
Isso parece uma espécie de elisão fiscal em versão tecnológica
Se muita gente fizer isso, a AWS vai “simplesmente fechar a brecha”
A AWS não é uma coisa só; é mais como dezenas ou centenas de AWSs, cada uma com seus próprios KPIs
Algumas equipes querem que você reduza gastos, mas não chegam a ensinar como reduzir gastos de fato
Quando se cria algo tão complexo quanto a AWS, tudo fica interligado, e torna-se impossível para o cliente otimizar apenas um único elemento
A AWS quer que certos serviços sejam usados de certas formas e, por isso, torna muito barato usá-los dessa maneira
Usar endpoints do S3 também é uma das formas como a AWS quer que você use o serviço S3
O CloudFront é outro exemplo
A AWS quer que você use o CloudFront, então torna o CloudFront mais barato do que outras saídas de dados
A alternativa a um sistema complexo de minimização de custos de cloud é simplesmente não usar cloud
Hospede por conta própria ou use a Cloudflare, que cobra 0 centavo por GB de saída
Ou alugue servidores cloud em vários provedores de hospedagem VPS muito mais baratos e não use serviços cloud caros e complexos que sugam 9, 12 ou 17 centavos por GB e incentivam o lock-in
Falando sério: se você chegou ao ponto de precisar analisar custos de cloud de forma sofisticada, deveria considerar abandonar a cloud
Porque em outros lugares esse tipo de análise é simplesmente impossível
Quem manda ir para on-premises parece não saber quanto custa a mão de obra de alguém que não vai tratar um data center como um homelab
Até o Apple iCloud usa AWS e GCP porque faz sentido economicamente
Ou você acha que, por não conseguir usar cloud, precisa voltar para on-premises, ou não liga muito para confiabilidade
Eu diria para calcular primeiro o custo de defesa contra DDoS acima de 10G e depois tentar dizer que cloud é mais caro
Nós gastamos mais de US$ 100 mil com banda na AWS, mas ainda sai mais barato do que links dedicados de internet porque não precisamos pagar engenheiros de rede para gerenciar 3 zonas de disponibilidade
Muitas organizações migram para hospedagem baseada em cloud porque, entre várias vantagens, conseguem fazer FinOps e controle de custos de forma muito mais profunda
Dependendo da infraestrutura, se a demanda por armazenamento ou computação varia, uma solução baseada em cloud pode se encaixar bem
No fim, é apenas uma ferramenta
Já trabalhei em lugares onde se entrava via SSH em servidores bare metal de produção para atualizar software, gerenciar firewall e verificar storage; também trabalhei em lugares onde a maior parte da hospedagem ficava com provedores de cloud; e já participei da transição de um modelo para o outro
“Cloud” não é melhor nem pior que servidores bare metal ou VPS; depende do caso de uso
Basta fazer a diligência para entender por que um lado faz mais sentido e reavaliar sempre que o ambiente mudar
Essa postura de “cloud é ruim” é infantil
Se você já está preso à AWS, sair pode custar bastante e, em alguns casos, esse método pode ser um bom meio-termo
Esse custo, em muitos casos, pode facilmente anular ou superar a economia
Esse também é um grande motivo pelo qual escolher cloud se tornou uma decisão tão óbvia para as empresas
A AWS parece estar operando com prejuízo neste caso
O autor encontrou uma brecha no modelo de preços da AWS, e por isso ficou tão barato
Se fizesse por conta própria, provavelmente sairia mais caro
Só dá para especular por que os preços da AWS são assim, mas é provável que o objetivo seja incentivar o uso de um serviço em vez de outro
Se você usa muita largura de banda, vale olhar provedores como Leaseweb, PhoenixNAP, Hetzner, OVH
Os preços de largura de banda são absurdamente mais baratos
Já houve uma situação estranha em que, mesmo com os preços padrão tornando a empresa inviável, os vendedores da AWS não reduziam em nada o preço de largura de banda
Custos de transferência parecem ser, em grande parte, itens negociáveis
Outro truque é usar o ECR
Dá para transferir 5 TB por mês pela internet gratuitamente
As imagens de contêiner precisam ser públicas, mas o conteúdo pode ser criptografado
É útil para armazenar arquivos de mídia no Glacier
Não entendo como a AWS continua conseguindo arrancar dinheiro das pessoas com essas tarifas de transferência de dados absurdas
Logo ao lado, o Cloudflare R2 oferece condições 100 vezes melhores
Eles prendem você onde estão e, assim como custa dinheiro escapar da gravidade, custa dinheiro mover os dados
Se houver perda de dados ou transferências lentas no R2, eu serei culpado ou, no mínimo, vão me pedir ajuda
Já se o S3 perder dados ou for lento em certos casos, as pessoas acham que estamos usando algo errado e encontram uma forma de melhorar
Ninguém é culpado
Sinceramente, se o negócio está gerando algum valor, as tarifas de transferência de dados são praticamente irrelevantes e não precisam ser otimizadas
A economia também é realmente grande
Usamos o AWS-SDK(Node.js) do jeito que está, apenas apontando para o endpoint do R2
Quando os dados entram na AWS, todas as aplicações na mesma região podem usá-los sem custo de transferência
Além disso, os preços citados no texto são preços de tabela; quando clientes pré-compram largura de banda por contrato, fica muito mais barato
Não sei muito bem quão bons são seu desempenho e disponibilidade em produção real
Em especial, a durabilidade é difícil, ou quase impossível, de avaliar
O S3 tem a vantagem de uma história e um histórico muito mais longos
Se tudo já está dentro da AWS, também há a vantagem de manter os dados por perto
Dependendo de como os dados são usados, o custo de saída pode nem sempre ser tão significativo
Mas, quando você realmente começa a gerar tráfego de saída considerável, ele fica absurdamente caro
Se concorrentes como o R2 conseguirem oferecer confiabilidade e desempenho razoavelmente competitivos, espero que ganhem participação de mercado