Acessando buckets AWS S3 como sistemas de arquivos remotos

Finalmente depois de muito tempo a AWS disponibilizou sua ferramenta oficial que nos permite acessar buckets S3 como se fossem um sistema de arquivos remoto. Está sofrendo para acessar seus arquivos na AWS? Talvez esta ferramenta seja para você.

Para situar quem caiu aqui de paraquedas, sugiro ler AWS (Amazon Web Services) e AWS S3 para uma introdução ao que estamos tratando, mas de forma ainda mais resumida, A AWS é um dos maiores ou senão o maior provedor de serviços em nuvem (Cloud computing) da atualidade o AWS S3, é o seu serviço de armazenamento de objetos de grande escala permitindo que o usuário possa escalar a casa dos petabytes em um único repositório, com custo relativamente baixo, o que o torna útil para backups, data-lakes, repositórios de mídias digital etc.

Mountpoint S3

Até então, o acesso a estes grandes repositórios de arquivos poderia ser feito a partir de três maneiras diferentes:

  1. Console Web – Apesar de bonitinho e facilitado, não é prático para rotinas automatizadas e nem para envio de grandes volumes de dados;
  2. Ferramenta CLI – A AWS fornece um cliente de linha de comandos muito funcional e prático para operação de sua infraestrutura e a partir dele é possível enviar todos os seus arquivos a partir dela, no entanto ela precisa ser integrada a sua rotina de trabalho;
  3. Usando o SDK e as APIs disponibilizadas pela AWS você poderá desenvolver uma ferramenta integrada a sua rotina para enviar arquivos da forma como preferir.

Agora, com a nova ferramenta da AWS (na verdade um driver FUSE), nós podemos mapear os buckets (repositórios S3) dentro dos nossos servidores Linux e acessá-los da forma que já fazemos com qualquer volume de rede.

Desta maneira nossas aplicações poderão manter dados em um sistema de armazenamento seguro, barato, escalável e sem precisar modificações.

E o mais importante, desde que você tenha consciência de que a largura de banda e a sua conexão Internet pode influenciar na performance do seu trabalho, você pode inclusive instalar a ferramenta e acessar seus buckets a partir de qualquer máquina fora da AWS, ou seja, não precisa ser uma instância EC2, o que facilita muito grandes transferências de arquivos.

Ferramentas de terceiros

Antes desta ferramenta, já haviam iniciativas de outros desenovlvedores em criar um driver FUSE para permitir o acesso ao S3 de “forma mais natural”, todos eles fracassaram no quesito performance.

Em uma busca no Github e demais repositórios de código, você encontrará dezenas de projetos que possuem a intenção de “resolver este problema”, mas sempre foram projetos de terceiros, pequenos e cuja performance era muito aquém do esperado.

Imagino que durante muito tempo, a AWS deveria receber uma enxurrada de pedidos para disponibilizar uma ferramenta oficial com este propósito também e eis que finalmente ela foi criada, com o seu código em Rust e toda a documentação necessária, disponibilizado abertamente o Mountpoint S3 no Github da AWS em Agosto/2023.

Pré-requisitos

Como trata-se de uma ferramenta para acesso a um serviço exclusivo da AWS, o primeiro pré-requisito é que você já tenha uma conta na AWS.

E além da conta:

  1. O nome do bucket que você pretende acessar
  2. Usuario IAM, com permissão de acesso aos buckets S3
  3. A chave de acesso via API configurada nas suas variáveis de ambiente ou no arquivo .aws/credentials

Instalação

O processo de instalação é bastante simples e rápido. Baixe o pacote adequado à sua distribuição, e use o gerenciador de pacotes para realizar a instalação no sistema.

No exemplo abaixo eu mostro como obter a versão para Debian/Ubuntu x86_64.

wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.deb
sudo apt-get install -y ./mount-s3.deb

Nota para processadores ARM: Se você precisar instalar em uma instância na AWS com processadores Graviton (ARM64), troque o “x86_64” por “arm64”.

Nota para Linux RHEL-Like: Se você precisar da versão para distribuições baseadas em RedHat, como Amazon Linux, Fedora e CentOS, troque a extensão do pacote “.deb” por “.rpm” e o instalador “apt-get” pelo “yum”.

Montando o bucket como um volume de rede

Uma vez que o pacote esteja instalado o acesso ao seu bucket torna-se facilitado. Basta montá-lo como você faria com qualquer outro sistema.

Por exemplo, digamos que eu tenha um bucket S3 chamado “planilhas” e eu queira disponibilizá-lo no ponto de montagem “s3-planilhas” para acessar meus arquivos diretamente pelo LibreOffice Microsoft Excel etc.

mkdir s3-planilhas
mount-s3 --profile welington planilhas s3-planilhas

Neste exemplo estou usando o parâmetro –profile para especificar um perfil do seu arquivo “~/.aws/credentials”, mas eu poderia omití-lo e usar as chaves definidas através das variáveis de ambiente AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY.

Usando o seu novo repositório

Agora que o bucket esteja mapeado no seu sistema, esteja a vontade para suar qualquer ferramenta de que esteja acostumado para lidar com seus arquivos.

Por baixo do capô da AWS tudo ocorre diferente de um filesystem normal, mas para sua aplicação as coisas serão mais ou menos normais.

Limitações

É importante frisar aqui o “diferente”. O S3 não é um filesystem para armazenamento de blocos, então o driver tenta amenizar algumas coisas, embora nem tudo seja perfeito.

Por exemplo. Não existem “pastas/diretórios” em buckets S3. Os chamados “prefixos” que simulam pastas, fazem apenas isso: “simulam”.

Na verdade todos os arquivos são literalmente largados no seu bucket S3, sem qualquer separação e para facilitar as coisas, nós usamos prefixos nada mais são do que a inicial do nome do arquivo, de forma que as ferramentas que o acessem possam filtra-los com base nesta inicial, o que acaba parecendo uma estrutura de diretórios, mas definitivamente não é.

Em um filesystem normal teriamos:

/pasta1
   /arquivo1
   /arquivo2

No S3 o que temos é:

/pasta1/arquivo1
/pasta1/arquivo2

Pode parecer tudo igual, mas na prática, isso significa que:

  1. Enquanto em um filesystem normal você renomeia a pasta em uma única operação de poucos milisegundos, no S3, você estará na verdade renomeando todos os arquivos que possuirem aquele prefixo, o que pode levar muito tempo dependendo da quantidade.
  2. Como já disse, não existem pastas no S3, então quando você cria uma pasta, o driver faz o seu melhor e mostra a sua listagem uma pasta com o nome pedido, mas na verdade ela só existe na memória do seu computador, enquanto o driver está ativo. Se você não colocar um arquivo lá dentro para que ele possa ser renomeado e assumir aquele prefixo, ao desmontar o volume, ele deixará de existir

Eu não vou listar todas as limitações, já que boa parte delas, podem ser contornadas, mas se quiser conhecê-las e estar preparado para o que pode ocorrer quando estiver usando esta ferramenta em produção, então é melhor ler a documentação do projeto e em especial o arquivo SEMANTICS.md.

Por fim, testem a ferramenta e talvez ela seja a simplificadora para diversos projetos que andam por ai usando a AWS, pra mim ela já faz parte do meu kit de ferramentas básico.

Referências

The inside history on Mountpoint for Amazon S3, a High Performance Open Source file Client – https://aws.amazon.com/pt/blogs/storage/the-inside-story-on-mountpoint-for-amazon-s3-a-high-performance-open-source-file-client/

Mountpoint for Amazon S3 – Generally Available and Ready for Production Workloads – https://aws.amazon.com/pt/blogs/aws/mountpoint-for-amazon-s3-generally-available-and-ready-for-production-workloads/

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.