AWS para Iniciantes: S3, Deduplicação e URLs pré-assinadas
Pare de construir aplicativos de brinquedo. Comece a construir sistemas de produção.
Se o seu servidor é descartável, seus arquivos não podem residir no disco dele. Você precisa do AWS S3. O S3 é um armazenamento de objetos. Ele vive de forma independente dos seus servidores. Isso garante que seus arquivos sobrevivam mesmo que seu servidor caia ou desapareça.
Veja como construir um fluxo profissional de upload de arquivos:
Use S3 Buckets e Keys Um bucket é o seu contêiner. Uma key é o caminho completo para o seu arquivo. O S3 não possui pastas reais. Ele utiliza prefixos em uma estrutura plana. Você pode organizar os arquivos por tipo, como
images/oudocuments/, para manter tudo organizado.Implemente Deduplicação de Conteúdo Não pague pelo mesmo arquivo duas vezes. Use o algoritmo SHA-256 para criar uma impressão digital única para cada arquivo. Se dois usuários fizerem o upload da exata mesma imagem, o hash será idêntico. Verifique este hash no seu banco de dados antes de fazer o upload para o S3. Se o hash já existir, reutilize o arquivo existente.
Faça o Stream de Arquivos Grandes Nunca carregue um vídeo de 200MB na RAM do seu servidor apenas para gerar o hash. Use streams do Node.js para processar arquivos em pequenos pedaços (chunks). Isso mantém seu servidor rápido e evita travamentos.
Aplique Limites de Tamanho de Arquivo Uma verificação no frontend serve apenas para a experiência do usuário. Não é segurança. Você deve aplicar limites de tamanho em três camadas: • No lado do cliente (client-side) para UX. • Validação no backend para rejeitar requisições inválidas precocemente. • Condições do S3 via presigned URLs para interromper uploads excessivamente grandes na origem.
Use Presigned URLs para Segurança Não torne seu bucket público. Mantenha a opção "Block all public access" ativada. Em vez disso, gere uma presigned URL. Isso concede ao usuário permissão temporária para fazer o upload de um arquivo específico. Você pode definir um tempo de expiração. Use janelas curtas para arquivos pequenos e janelas mais longas para uploads de vídeos grandes.
Verifique o Upload Nunca confie no cliente. Após um upload, use o comando
HeadObjectpara verificar se o arquivo realmente existe no S3 e se o tamanho corresponde aos seus registros.
O Fluxo de Produção:
- O cliente solicita uma URL de upload.
- O backend valida o tamanho, o tipo e verifica duplicatas.
- O backend gera uma presigned URL com escopo limitado.
- O cliente faz o upload do arquivo diretamente para o S3.
- O backend confirma que o arquivo existe via
HeadObject.
Construa sistemas que sejam seguros por padrão.
Fonte: https://dev.to/surajrkhonde/aws-for-newbies-episode-2-3jg5
