Segui o guia oficial do AWS Amplify e recebi uma cobrança de US$ 1.100
(elliott-king.github.io)- Depois de testar a integração oficial do OpenSearch no AWS Amplify, os custos do Amazon OpenSearch Service subiram para US$ 1.124,88 em um mês, apesar de o uso não ter sido alto
- O custo se acumulou porque o domínio do OpenSearch criado por
npx ampx sandboxcontinuou existindo mesmo após encerrar/excluir o sandbox, e uma nova execução adicionava outro domínio - A configuração oficial cria por padrão uma instância
r5.large.search, e esse padrão, com custo mínimo na faixa de US$ 134 por mês, não ficava evidente no código boilerplate nem no guia - O AWS Support ofereceu créditos únicos para OpenSearch e armazenamento, e exigiu a configuração do AWS Budgets para evitar reincidência
- Ao usar Amplify junto com OpenSearch, é preciso verificar manualmente os recursos remanescentes após excluir o sandbox e o tipo de instância padrão para evitar cobranças inesperadas
Cobrança inesperada do OpenSearch
- Depois de seguir o guia oficial de integração com OpenSearch no AWS Amplify, algumas semanas depois a fatura da AWS veio acima de US$ 1.200
- O serviço identificado na solicitação ao Support foi o Amazon OpenSearch Service, com total mensal de US$ 1.124,88
- A pessoa já havia usado Amplify e OpenSearch em 2020 e considerava que, para uso pessoal, normalmente era caro, em torno de US$ 50 por mês, mas não algo no nível de US$ 1.200
- Após uma análise detalhada, o AWS Customer Support processou um ajuste de cobrança na forma de one time courtesy para os custos inesperados
- Durante o processo com o Support, foram oferecidos créditos para OpenSearch e serviços de armazenamento, e também foi exigida a configuração do AWS Budgets
- O AWS Budgets permite prever gastos futuros de serviços específicos ou de toda a AWS e enviar alertas caso seja previsto que o orçamento será excedido
Recursos criados pelo guia oficial
- O quickstart do Amplify cria um app simples de notas TODO com código fornecido pela AWS, e o Amplify gera um banco de dados DynamoDB e requisições CRUD autenticadas
- Também é possível rodar localmente, mas o Amplify cria junto um domínio acessível
- Na etapa de configuração do OpenSearch, escreve-se boilerplate em TypeScript para declarar os recursos do Amplify
- Uma tabela do DynamoDB é atribuída a uma variável e referenciada no pipeline
- São criados uma instância do OpenSearch, um index e um indexMapping
- São escritas queries para acessar dados no OpenSearch
- É criado um pipeline OpenSearchIngestionService para copiar dados do DynamoDB para o OpenSearch
- A configuração relacionada é gerenciada como TypeScript/JavaScript dentro do repositório, junto com o código do frontend
npx ampx sandboxinicializa serviços da AWS e detecta mudanças de configuração para modificar automaticamente os serviços existentes na AWS
Domínios que permaneceram após excluir o sandbox
- Essa configuração inclui vários recursos, como um banco de dados DynamoDB, um serviço OpenSearch, um pipeline OSIS, funções IAM e outros
- O boilerplate oficial cria por padrão uma instância OpenSearch
r5.large.search- Esse padrão não ficava explicitamente visível no código boilerplate nem no guia
r5.large.searchcusta no mínimo US$ 134 por mês
- Ao terminar um dia de trabalho e interromper o sandbox com
CTRL-C, aparece um prompt perguntando se deve excluir permanentemente, e o usuário pode escolherY - Nesse momento, o DynamoDB é excluído, mas, ao olhar no console da AWS, o domínio do OpenSearch continua lá
- No dia seguinte, ao executar
npx ampx sandboxnovamente, uma nova instância do OpenSearch é criada, enpx ampx sandbox deletetambém não exclui a instância original - Repetir o mesmo processo deixa vários domínios OpenSearch do mesmo projeto em segundo plano, acumulando custos
Possível bug e tipo de instância padrão
- Esse comportamento pareceu uma grande footgun, e na época ainda não havia sido resolvido mesmo após o chamado ao AWS Support
- Havia relatos antigos de bugs relacionados, mas não foram encontrados itens de menos de um ano
- Como exemplo, foi citado o issue #10523 em aws-amplify/amplify-cli
- É possível que o domínio do OpenSearch fosse excluído corretamente na v1, mas não na v2, embora essa não seja uma causa confirmada
- O fluxo atual não é executado pelo Amplify CLI, mas via
npx - O fato de
r5.large.searchser o tipo de máquina padrão também continua sendo um fator de risco- Seria melhor torná-lo um campo obrigatório, sem valor padrão
- Se o guia mostrasse
r5.large.searchcomo valor padrão, os usuários perceberiam isso com mais facilidade - Esse padrão não é exclusivo do Amplify, mas parte do AWS CDK, então não é visto como responsabilidade apenas da equipe do Amplify
Cuidados ao usar Amplify com OpenSearch
- Era esperado que ferramentas que aceleram o desenvolvimento com novas tecnologias pudessem ser mais caras do que bare metal, mas este custo foi considerado acima desse patamar
- Usar o console de budgets da AWS permite receber alertas quando o gasto previsto ultrapassar o orçamento
- Mesmo seguindo apenas a seção de OpenSearch, são criados uma conta IAM, um domínio OpenSearch, um pipeline OSIS, um log group e armazenamento S3, aumentando a quantidade de recursos ocultos
- O OpenSearch é um serviço usado com frequência por clientes corporativos, por isso pode ser considerado um serviço “avançado”, com a expectativa de que o usuário entenda melhor o ecossistema da AWS
- O OpenSearch foi usado por causa do suporte a consultas bounding-box com
geo_point, mas não há certeza se isso poderia ter sido feito com um produto mais simples - Segundo a atualização, o guia da AWS foi corrigido depois; ele ainda não havia sido atualizado três meses antes, quando o problema foi levantado pela primeira vez, mas parece que o trabalho em um PR da documentação começou antes da publicação do post
1 comentários
Opiniões no Hacker News
Alertas de cobrança são praticamente uma piada; na prática, deveriam oferecer um limite rígido de gastos
Também deveriam explicar, durante o onboarding, como configurar esse limite
Construir um negócio em cima de cheques em branco e cobranças acidentais é suspeito e também cria uma grande barreira de adoção
Quanto mais desenvolvedores veem casos como “segui um tutorial de 20 minutos e fui cobrado no valor das economias de uma vida; desta vez o suporte ao cliente isentou a cobrança, mas na próxima parecia que iam levar até minha casa”, menos vontade dá de explorar produtos da AWS
Os que transferem o risco para o cliente, como AWS ou DigitalOcean, e os que vendem planos suspeitos de “ilimitado”/“sem medição”
Nenhum dos dois é o que eu quero
Gostaria que existisse um provedor que permitisse fazer planejamento de capacidade de forma adequada, com limites claros e documentados, em que o cliente assumisse o risco de disponibilidade, mas o fornecedor assumisse o risco financeiro
Se não fosse exagerado, eu até aceitaria pagar uma tarifa fixa mais alta
Poucas cobranças acidentais baratas são piores do que causar downtime ou perda de dados em uma aplicação crítica
Mesmo que existisse apenas como opção, a equipe de contabilidade poderia pressionar pelo uso, e há risco de isso virar um incidente de perda de dados quando desse problema
Pode fazer sentido para provedores de nuvem focados em desenvolvedores independentes ou pequenas e médias empresas
Está entre as informações internas mais interessantes que fiquei sabendo por aqui
É mais seguro usar um VPS barato e de preço fixo do que se arrepender depois
Não adianta muito pedir que a Amazon faça alguma coisa
A Amazon e outras empresas precisam ser obrigadas por lei a respeitar o dinheiro dos usuários
Empresas, por padrão, não fazem o que é ético ou bom para a economia; fazem o que dá dinheiro
Em comparação, é pouca coisa, mas tentei implantar uma aplicação no ECS, recebi uma fatura de 100 dólares e decidi nunca mais usar AWS
O erro que impedia o serviço de subir era problema da minha aplicação, mas os logs do CloudWatch apareciam só uns 20%; para conseguir logs, tive de reimplantar cinco vezes, corrigir, e depois reimplantar mais cinco vezes
Cada implantação com falha foi cobrada e, depois de uns dois dias sofrendo, excluí a conta e implantei no DigitalOcean App Platform
Lá a implantação também falhou por causa do erro na aplicação, mas os logs apareciam todas as vezes; corrigi e coloquei para rodar em menos de 10 minutos, e a cobrança total foi de alguns centavos
Desde aquele dia, prometi a mim mesmo que, se houver opção, nunca usarei AWS e também não recomendarei
Para desenvolvimento e testes, o modelo de cobrança baseado em consumo foi muito barato
Não sei como fica em workloads maiores, mas cobrar por implantação é estranho
Em projetos grandes, o suporte talvez seja melhor, mas, em escala pequena a média, o GCP é muito melhor
Ele tem componentes básicos que combinam com a forma como contêineres são usados hoje, além do BigQuery
Parece haver um bug evidente no script executado por aquele comando
npxO autor está certo: se é um tutorial, deveria escolher 100% dos recursos mais baratos, e ao executar o subscritp
deletedeveria limpar os recursosNão é justo esperar que, depois de rodar algo assim, o desenvolvedor vasculhe paranoicamente a conta inteira da AWS procurando recursos perdidos
Se uma startup funcionasse desse jeito, as pessoas deixariam passar dizendo “esse tipo de coisa acontece, é preciso tomar cuidado”?
Não sei por que aplicam outro padrão à AWS
Não há uma forma fácil de ver todos os recursos pelos quais estou pagando no momento
Se existe, eu não consegui encontrar
Sem uma visão geral fácil de entender, sinto que não tenho controle total da minha conta
Também vejo o que acontece se eu passar disso e se dá para limitar cobranças inesperadas
Se não der, procuro outra coisa
Desde a mudança de cobrança do Google Maps alguns anos atrás, também temos tomado muito cuidado para não nos prender profundamente a serviços “gratuitos” do Google, e isso acabou saindo caro
Sempre tive que verificar por serviço e por região, o que era tedioso e sujeito a erros
Mesmo que considerem um bug, provavelmente terá prioridade muito menor do que outras coisas que afetem diretamente o resultado financeiro deles
Mas, na prática, é razoável
Quando crio algo na AWS, trato a AWS como uma instituição financeira hostil fora de controle
Por causa de casos como esse, venho adiando há anos me aprofundar na AWS
Deveria haver um curso educacional padrão que não exigisse dados de cartão de crédito e permitisse que as pessoas experimentassem gratuitamente
Em vez disso, parece haver burocratas calculando que dá para arrancar milhares de dólares aqui e ali por “erro do usuário”
Esse tipo de cobrança é difícil de contestar e, em alguns casos, totalmente impossível
Acho que não sou a única pessoa que evitou o ambiente da AWS por um medo racional de se deparar com uma conta enorme
É bem provável que eles tenham concluído que processar reembolsos dá menos trabalho do que fornecer tutoriais precisos e baratos
Isso não justifica a conduta, mas eu já consegui cancelar até uma cobrança legítima de 600 dólares gerada ao usar o AWS Textract
Na época eu trabalhava em uma empresa de dezenas de bilhões de dólares
As tabelas de preço são fáceis de acessar e nem sempre fáceis de entender, mas a maioria dos custos cresce de forma quase linear, então é relativamente fácil testar
É melhor evitar serviços wrapper como AWS Amplify, CloudFormation e os vários tipos de Stack
Basta usar os serviços principais diretamente
Todos os serviços têm API, e obter uma chave de API vinculada a um usuário IAM é tão simples quanto clicar em um botão
O resto dá para gerenciar com caching adequado e alinhando o modelo de custos ao modelo de receita
É fazer com que o custo dos serviços com autoscaling se torne uma proporção quase fixa da receita, independentemente da demanda atual
Largura de banda é o verdadeiro pesadelo na AWS, mas o console oferece descontos automáticos de longo prazo, e por meio de um representante comercial dá para conseguir descontos contratuais um pouco melhores
Por isso eu evitaria EC2; como a largura de banda interna do EC2 também é mais cara, acho melhor usar Lambda + S3 + CloudFront diretamente
Depois de uns 3 meses, ficou bem fácil prever qual combinação de serviços seria mais econômica ao implementar uma nova funcionalidade voltada ao usuário
Talvez sirva para esse uso, mas não usei diretamente, então não tenho certeza
Pela minha experiência, a AWS tendia mais a evitar problemas que pudessem custar caro em dano reputacional
A AWS não é barata e, em alguns casos, especialmente em custos de transferência de dados, é absurdamente cara, mas não acho que a forma deles seja enganar clientes para gastarem acidentalmente algumas centenas de dólares a mais
Bem típico da AWS
Alguns meses atrás, segui o guia oficial de início rápido do SageMaker para rodar o Llama 2; ele realmente subiu muito rápido, mas no dia seguinte vi que estava gastando 400 dólares por dia
Consegui cancelar a cobrança, mas aprendi claramente que não dá para confiar em guia oficial
No início do produto, em 2017–2018, a configuração era bastante intuitiva
Ficava claro que havia instâncias de notebook, inferência, API REST para serving, um pouco de EFS, e que o centro do serviço era o S3
O preço também era fechado, então não havia surpresas
No geral parecia algo como DigitalOcean, e até um cientista de dados com conhecimento básico e curiosidade sobre infraestrutura conseguia montar uma configuração barata, previsível e simples
Agora há Wrangler, Feature Store, RStudio, a experiência de uso do console de notebooks é horrível, e internamente vários serviços movem dados e cobram por isso
Por necessidade, precisei enviar requisições HTTP brutas em vez do SDK inchado da AWS; com o header
content-type: application/jsonfalhava, e comcontent-type: application/x-amz-json-1.0funcionavaGostaria muito que parassem com esse nonsense
Excessivamente inchada sem benefício claro, excessivamente complexa ou cheia de implementações próprias estranhas
Porque internamente a maioria dos apps usa o antigo framework Coral e esse formato JSON, com formas bem definidas para entrada, saída e erros
Todos os guias oficiais da AWS são projetados para fazer você usar o máximo possível de serviços da AWS, e com isso o risco de gasto aumenta
É preciso olhar de forma extremamente crítica para o que a AWS recomenda: padrões da GUI, ferramentas CLI, guias, arquiteturas recomendadas etc.
Há um motivo para existirem cargos muito bem pagos em empresas orientando colegas a usar AWS de forma econômica e de baixo risco
Em implantações pequenas ou testes, a parte mais cara quase sempre são coisas acessórias, ou serviços mais recentes recomendados em vez de alternativas mais simples
Se você está usando OpenSearch por causa de consultas de caixa delimitadora em
geo_point, que tal PostgreSQL + PostGIS?https://postgis.net/docs/using_postgis_query.html
Acho que essa configuração sem atrito, a experiência/interface de usuário pouco intuitiva, a baixa cautela em registrar cartão de crédito e a cobrança agrupada entre serviços como AWS Batch + Lambda + EC2 fazem parte do modelo de negócio
Não sei bem como expressar, mas é parecido com um parque de diversões moderno em que você paga ingresso para entrar e depois paga separadamente por todos os brinquedos e até pelo banheiro
O modelo de cobrança da nuvem transfere a responsabilidade para o usuário em nome da “flexibilidade” e da “customização”
Imagine uma locadora de carros cobrando cada componente por milissegundo, como rotação do comando de válvulas do motor, giro dos pneus, acionamento do limpador de para-brisa e tempo de aquecimento dos bancos, dizendo que o cliente “controla” uso e orçamento porque pode configurar alertas para cada item
É um modelo de custos hostil e perigoso para o usuário desde os padrões iniciais