5 pontos por GN⁺ 2024-01-16 | 1 comentários | Compartilhar no WhatsApp
  • 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-1 e até US$ 0,154 por GB em af-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-1 e até US$ 0,147 por GB em af-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-1a para us-east-1b resulta em US$ 10 de envio e US$ 10 de recebimento, totalizando US$ 20
  • 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 bucket us-east-1a ou us-east-1b
    • Internamente, a AWS replica os dados para pelo menos 3 zonas de disponibilidade dentro da região
  • 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-1a ou de us-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-1a para uma instância EC2 em us-east-1b custa 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-1 custa 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
  • 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 cp trata 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-1a e us-east-1b, e uma instância em us-east-1a gerou 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 em us-east-1a transferiu 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-1a fez upload do arquivo de 1 TB, e a instância em us-east-1b fez download e o excluiu
  • 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

 
GN⁺ 2024-01-16
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”

    • https://aws.amazon.com/service-terms/
      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
    • Outra opção é usar o nível gratuito do CloudFront, que permite baixar 1 TB por mês gratuitamente a partir da AWS
      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
    • No detalhe, 2 TB por US$ 5 é melhor do que 3 TB por US$ 10
    • É um bom truque, mas, por causa dos termos da AWS, chega perto de brincar com fogo
  • 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

    • Parece pouco provável
      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
    • Eu sei um jeito de tirar dados do GCP de graça, mas nunca tentei na prática
      Fico curioso se conseguiria encontrar um comprador para essa informação
    • Isso parece menos uma brecha e mais o fato de a AWS ter otimizado o S3 e projetado as instâncias EC2 para usarem o S3 como armazenamento
      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

    • Uso esse método e outras técnicas há anos e nunca fui bloqueado
      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

    • Imagino que possa haver casos de uso para uma configuração como “DB na zona b, único servidor na zona a”, mas é difícil imaginar
      Seria por causa de custo? Mas nem parece economizar custo
    • Como quarta opção, também dá para ativar a classe de armazenamento S3 Intelligent-Tiering
  • 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

    • Isso não é uma brecha, é um design intencional
      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

    • Se você está fazendo uma análise sofisticada de custos de cloud, isso na verdade significa que está usando cloud do jeito certo
      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
    • Dizer “se você chegou ao ponto de analisar custos de cloud de forma sofisticada, abandone a cloud” significa perder justamente parte dos motivos para usar cloud em primeiro lugar
      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
    • A solução do texto é relativamente fácil de aplicar
      Se você já está preso à AWS, sair pode custar bastante e, em alguns casos, esse método pode ser um bom meio-termo
    • Para hospedar por conta própria, se você de fato usa recursos de cloud, ou seja, serviços gerenciados, precisa montar um departamento de TI com competências que muitas empresas não têm
      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
    • Neste caso, não acho que “hospedar por conta própria” teria ajudado
      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

    • Isso parece bem incomum
      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

    • Dados têm “gravidade”
      Eles prendem você onde estão e, assim como custa dinheiro escapar da gravidade, custa dinheiro mover os dados
    • Quando todas as VMs e contêineres estão na AWS, e o S3 tem suporte extremamente sólido independentemente da linguagem, framework ou configuração, é muito difícil pedir ao time para usar outro fornecedor de armazenamento de objetos
      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
    • Criamos um novo recurso de um SaaS que usa bastante largura de banda com R2, e funcionou muito bem
      A economia também é realmente grande
      Usamos o AWS-SDK(Node.js) do jeito que está, apenas apontando para o endpoint do R2
    • Confio muito menos na Cloudflare do que na AWS
      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
    • O R2 ainda é relativamente novo
      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