Adotando a CLI oficial do S3 para melhor exportação de arquivos
Desde que começamos, em 2009, o Amazon S3 tem sido nossa principal forma de exportar arquivos. Naquela época, a melhor ferramenta de CLI da Amazon que encontramos foi o utilitário aws de Tim Kay. Era um kit de ferramentas completo e com poucas dependências, que fazia boa parte do trabalho pesado com a AWS para nós.
A ferramenta dele nos serviu bem por 5 anos, e exportamos quase um petabyte de arquivos com ela. Mas, à medida que a Amazon evolui, os requisitos mudam. Por exemplo, os datacenters da Amazon em Frankfurt e na China não oferecem suporte à versão 2 de assinatura. Embora Tim Kay tenha feito um ótimo trabalho para acompanhar mudanças como essa, não podemos esperar que ele lance atualizações assim que a Amazon faz um anúncio, já que esse é um projeto que ele mantém de graça no tempo livre. Além disso, como a Amazon agora oferece uma ferramenta de CLI oficial, decidimos fazer a troca na semana passada.
Temos muitos testes para evitar mudanças que quebrem a compatibilidade quando fazemos esse tipo de cirurgia de coração aberto. Infelizmente, porém, alguns casos de uso não estavam cobertos, e a troca do nosso mecanismo de S3 acabou sendo um tanto turbulenta.
Se, por exemplo, você tinha buckets fora dos EUA e não especificava uma região explicitamente,
precisávamos executar uma requisição GetBucketLocation no bucket e tentar a exportação
(ou importação) novamente por conta própria. Até aí, tudo bem. No entanto, se você tinha configurado
um usuário IAM dedicado para a Transloadit que só pode fazer Puts e Lists (como recomendamos),
não tínhamos essa permissão nem os redirecionamentos regionais e, por isso, toda a exportação falhava.
Temos uma solução alternativa pouco eficiente em produção para evitar essas falhas, mas também
atualizamos nossa documentação para deixar claro que precisamos da
permissão GetBucketLocation. Recomendamos que você conceda essa permissão ao seu
usuário IAM da Transloadit.
Nossos clientes também relataram alguns outros problemas, resultantes de mudanças sutis entre as ferramentas subjacentes e do que acreditamos ser um bug de utf-8 na nova ferramenta.
Atualização de 7 de fevereiro de 2015 O bug foi confirmado. Como solução alternativa, agora
estamos convertendo caracteres não ASCII em sequências de escape Unicode, de modo que
Renan Gonçalves ficará assim: Renan Gon\u00E7alves. Você provavelmente vai
querer reverter esse escape do seu lado.
Embora mais de 99% das nossas exportações tenham continuado funcionando durante esse período, lamentamos muito não ter escrito mais testes cobrindo mais casos especiais.
Daqui para frente
Agora temos correções e soluções alternativas para todos esses problemas em produção. Também escrevemos testes de sistema que cobrem os redirecionamentos regionais e outros casos especiais, para evitar regressões em futuras atualizações ou mudanças no nosso stack.
Além disso, suspendemos o limite de 24 h do nosso armazenamento temporário, para que as Assemblies afetadas ainda possam ser reexecutadas além desse prazo. Para dar aos clientes afetados algum tempo para lidar com isso, vamos reativar a exclusão automática em 7 dias.
Os clientes que foram muito impactados receberam um desconto significativo na fatura deste mês. Já devemos ter entrado em contato com você, mas não deixe de nos avisar se isso não aconteceu.
Pedimos desculpas pelos transtornos causados, mas estamos ansiosos para usar as ferramentas oficiais do S3 em produção. Esperamos ter um caminho de atualização seguro para novos recursos e datacenters do S3 daqui para frente.
