CloudCast05 – Fuse Over Amazon (S3FS) – Montando uma partição S3 no Linux

aws

Ola Pessoal!!

No CloudCast de hoje vamos aprender a montar uma partição Amazon S3 no Linux usando FuseOverAmazon  ou simplesmente S3FS.

No CloudCast de hoje vamos aprender:

1) Instalar o S3FS;
2) Montar uma partição Amazon S3 no Linux usando S3FS;
3) Configurar para montar a instancia no iniciar do Linux.

Pagina do projeto:

https://code.google.com/p/s3fs/wiki/FuseOverAmazon

 

Pacotes de dependência:

#  yum install gcc libstdc++-devel gcc-c++ fuse fuse-devel curl-devel libxml2-devel openssl-devel mailcap

 

Compilar o pacote S3FS

# cd /usr/src

# wget http://s3fs.googlecode.com/files/s3fs-1.68.tar.gz

# tar xvzf s3fs-1.68.tar.gz

# cd s3fs-1.68/

# ./configure –prefix=/usr

# make

# make install

 

Criar o arquivo com as credenciais de acesso a conta

#nano /etc/passwd-s3fs (accessKeyId:secretAccessKey)

# chmod 640 /etc/passwd-s3fs

 

Editar o aquivo /etc/fuse.conf e descomentar ouse_allow other

# nano /etc/fuse.conf

# mkdir /mnt/data

 

Montar a partição usando S3FS

# s3fs testecooperati -o allow_other /mnt/data

 

Editando fstab para montar ao iniciar o S.O. inserindo a linha abaixo:

s3fs#testecooperati /mnt/data fuse allow_other 0 0

 

Não deixe de assistir os CloudCasts anteriores:

CloudCast01 – Amazon EC2 – Como criar seu primeiro servidor Linux na Nuvem

CloudCast02 – Amazon EC2 – Como criar seu primeiro servidor Windows na Nuvem

CloudCast03 – Amazon S3 – Seu primeiro Storage na Nuvem

CloudCast04 – Amazon EC2 – Aprendendo um pouco mais

Atenção: É importante você desligar os recursos que usou para seguir esse CloudCast, ou irá gerar custo desnecessário para sua conta. Não nos responsabilizamos por serviços não desligados.

 

  • Pingback: ()

  • Fernando Pereira

    Rodrigo, muito bom esse vídeo. Minha empresa estar muito interessada nas soluções da Amazon.
    Queremos utilizar o backup com a solução glacier e coloca nosso email hj com zimbra interno pra amazon.Isso é possível?

    • Ola Fernando!!

      Sim, tudo que vc perguntou é possível.
      Com relação ao Glacier, vai depender muito da sua necessidade, pois para acessar os objetos pode levar 4 horas…
      O ideal é utilizar um bunket S3 e nele configurar ciclo de vida dos objetos para reter no Glaicer somente os bem antigos que vc tem certeza que nao vai precisar para um acesso rápido. Como por exemplo os volumes de arquivamento.

      Se sua empresa precisar a Equipe do CooperaTI pode te oferecer algumas soluções.

  • Fernando Pereira

    Obrigado pela Resposta rápida e precisa.

    Talvez precisaremos sim já que sou leitor fiel de vocês..rsrs..Como devemos proceder pra marcar uma reunião por exemplo com meu gerente?

  • Pingback: ()

  • samuel

    Mais, uma vez, parabéns pelos videos rodrigo . Ajudam muito mesmo.
    Porém surgiu uma duvida,
    eu posso usar o s3fs em duas maquinas diferentes para compartilhar o mesmo bucket?
    Uma maquina poderia enviar/deletar arquivos, e a outra somente teria permissao de leitura.

    Outra coisa, eu posso criar permissões diferenciadas?

    Usando uma instancia micro, utilizar o s3fs acarretaria em muito processamento extra? tornando a instancia lenta?

    Minha ideia (sugerida por vc hehehe),é usar o s3fs, como um servidor de imagens.

    Muito Obrigado

    • Ola Samuel!!

      Sim, pode usar 2 ou mais instancias acessando o mesmo bunket S3.

      Sim, uma pode so enviar/deletar e a otra so ler sem problemas.

      Sim, vc pode criar permissões diferenciadas com p IAM, da uma olhada na documentação do S3FS e do S3 que vc vai encontrar essas infos sem problemas.

      Pode usar instancia micro com S3FS com certeza, nao gera muito processamento, a dica para nao ter lentidão de acesso ao S3, é cria-lo na mesma região geográfica da instancia ec2.

      Essa ideia é largamente utilizada, procure utilizar tb o cloudfront para melhorar a performasse.

      Abraços,

      Ramos.

  • Luiz Carlos Devilarte

    Olá Rodrigo, estou estudando e queria saber se vc pode fazer um tutorial desse, para ser usado na instância ubuntu tenho uma já e queria implementar um Bunket S3 nela, só aproveitando tenho interesse em desenvolver uma instância para armazenar meu projetos (páginas), seria possível utilizar minha instância como um cpanel sendo usado um Buket S3 como repositório do conteúdo de meu projetos?

    • Ola Luiz,

      O processo de instalação do Ubuntu é o mesmo, so as dependências que mudam, no ubuntu vc deve instalar os seguintes pacotes antes:

      # apt-get install build-essential libfuse-dev fuse-utils libcurl4-openssl-dev libxml2-dev mime-support

      Quanto a segunda pergunta, sim, vc pode usar para armazenar seus projetos sem problema, eu nunca utilizei o cpanel, mas como o s3 trabalha coo uma partição do linux os programas vão entender como parte do S.O.

      Abraços.

      • Luiz Carlos Devilarte

        Olá Rodrigo,

        Fico muito grato e parabéns pela atenção com a qual você dá pra pessoas quem lhe procura com os diversos problemas, eu vou corrigir e explicar alguns dos serviços que quero obter da amazon.

        Precisava de um sistema de hospedagem para meus próprios trabalhos e também de terceiros, estudei muito na internet, já trabalho com informática a muito tempo mais na parte de conserto, minha experiência com linux é muito pouca mais me considero um auto-didata e fui afundo nos meus estudos.

        Em uma determinada parte encontrei um post na internet falando sobre uma estrutura compatível com o cPanel na Amazon que seria:

        1 – VPS (Estruturado e configurado para o cPanel)
        2 – EC2 – NameServer01 e NameServer02 (Linux Centos 5 32bits com cPanel DNS Only)
        1 – EC2 – VirtualServer01 (Linux Centos 5 32bits com cPanel WHM)

        Bom até então não tinha nada disso feito, e coloquei a mão na massa e conclui todas estas etapas, o que falta é fazer um balanceamento para minimizar a sobre carga de acessos, mais o que tenho mais dúvidas é o seguinte:

        * Como fazer um Fuse Over Amazon (S3FS) e monta-lo na pasta do cPanel onde fica armazenado os arquivos dos clientes, e assim economizarei nos custos de EBS uma vez que o serviço S3 é bem mais em conta e pago somente pelo que usar.

        Como falei minha experiência é pouca e se puder me ajudar agradeço, tenha uma visão própria do que quero e me responda se for possível, aceito ainda opiniões sua sobre melhoramento e aperfeiçoamento desse projeto.

        Que Deus te abençoe e muito obrigado por tudo!

  • Luiz Carlos Devilarte

    Tinha te enviado os links mais acho que foi reprovado pela moderação do site, vou colocar abaixo mais tirei os caracteres especiais do link, se vc colocar no google vc consegue.

    part-1-how-i-built-a-cpanel-hosting-environment-on-amazon-aws
    part-2-how-i-built-a-cpanel-hosting-environment-on-amazon-aws
    part-3-how-i-built-a-cpanel-hosting-environment-on-amazon-aws

    Como falei se colocar no google conseguirá achar, muito obrigado e como tinha falado vc me surpreende com a rapidez nas suas respostas e a atenção que você dar a seus fãs, DEUS te abençoe cara e sou seu fã, fico no aguardo!

    • Opa… nao nao. eu que modero tb 🙂 é que eu li no e-mail a notificação e esqueci de aprovar.

      Olha eu ainda nao tive tempo de ver tudo, li por auto mesmo… o cpanel é pago ou tem versão gratuita? esse tutorial eh com a versão paga ou gratuita??

      Vou dar uma estudada com calma nisso, te respondo no final de semana, ou ate no máximo inicio da semana que vem.

      • Luiz Carlos Devilarte

        Ok, mestre veja só com o cpanel instalado você tem 30 dias grátis é uma forma de testar antes de comprar, no próprio tutorial de instalação dele que é anexo destes que lhe passei tem explicando como liberar o ip instalado com 30 dias, ok.

  • Ola Rodrigo, cara parabéns pelas respostas, estou com um problema aqui, criei um bucket e attachei ele no meu linux, porem para gravar esta demorando demais, demora quase 1 min por arquivo, você sabe o que pode ser.

    Abraços.

    • Ola Luis!

      Verifique se você criou o bunket na mesma região da instancia.

      É bem provável que estejam em regiões diferentes.

  • Olá Rodrigo,

    Você conhece alguma solução equivalente para instancias windows 8 da EC2
    para usar o S3 como driver nativo?.

    Um abraço!

  • Eduardo Almeida

    Bom dia,

    Segui a o tutorial que você explicou. Sendo que tive que realizar algumas modificações em função de usar uma instância Debian 7.3. Sendo assim procedi da seguinte forma que agora vou especificar para você:

    Para a instalação dos pré-requisitos segui a documentação oficial no seguinte link: http://code.google.com/p/s3fs/wiki/InstallationNotes

    Daí instalei as seguintes dependências:

    1) Primeiro passo:

    #apt-get install build-essential
    #apt-get install libfuse-dev
    #apt-get install fuse-utils
    #apt-get install libcurl4-openssl-dev
    #apt-get install libxml2-dev
    #apt-get install mime-support

    2) Segundo passo:

    #cd usr/src

    Dentro da pasta /src temos que pesquisar para saber qual é a versão mais recente do programa. Para isso basta acessar o link: https://code.google.com/p/s3fs/downloads/list. No caso atualmente temos a versão mais recente:

    #wget http://s3fs.googlecode.com/files/s3fs-1.74.tar.gz

    #tar xvzf s3fs-1.74.tar.gz

    #cd s3fs-1.74/

    #./configure –prefix=/usr

    #make

    #make install

    3) Terceiro passo:

    #cd /etc

    #touch passwd-s3fs

    #vim passwd-s3fs

    Depois coloquei o “ID” e a “Chave de acesso secreta” : e dei o comando chmod.

    #chmod 640 passwd-s3fs

    Depois modificamos o arquivo fuse.conf em /etc/. Para isso basta descomentar a opção user_allow_other e salvar.

    #vim /etc/fuse.conf

    4) Quarto passo:

    Depois criei o diretório s3fs. Para isso utilizei o seguinte comando:

    #mkdir /mnt/s3fs

    Para montar a partição usei, onde s3-debian é o bucket. A região que criei o bucket foi “US Standard” e a instância está no “N. Virginia”:

    #s3fs s3-debian -o allow_other /mnt/s3sf

    Repare que até aqui está tudo conforme foi explicado no post! A diferença está nas dependência por se tratar de um servidor Debian e que seguimos a documentação oficial.

    Quando executo o comendo df -h tenho como retorno o seguinte resultado:

    # df -h

    df: `/mnt/s3fs’: Transport endpoint is not connected
    Filesystem Size Used Avail Use% Mounted on
    rootfs 7.9G 973M 6.6G 13% /
    udev 10M 0 10M 0% /dev
    tmpfs 60M 64K 60M 1% /run
    /dev/xvda 7.9G 973M 6.6G 13% /
    tmpfs 5.0M 0 5.0M 0% /run/lock
    tmpfs 120M 0 120M 0% /run/shm

    Indo ao diretório /mnt e dando um ls -la retorna o seguinte:

    drwxr-xr-x 3 root root 4096 Mar 3 15:07 .
    drwxr-xr-x 23 root root 4096 Mar 3 12:46 ..
    d????????? ? ? ? ? ? s3fs

    Pesquisei e encontrei na internet uma solução que consiste em desmontar a partição e montar novamente através dos comandos:

    #fusermount -u /s3fs

    #/usr/bin/s3fs -o allow_other s3-debian /s3fs

    Sendo assim a partição é desmontada e quando é montada outra vez volta ao mesmo estado!

    Gostaria de saber se você pode me ajudar a resolver essa situação, pois tenho um script de backup em um servidor de produção com Debian 7.2 e precisaria utilizar o S3 como solução para essa instância.

    Desde já agradeço a atenção e a ajuda!

    Muito obrigado!

    • Rafael

      Eduardo!

      Bom dia, meu nome é Rafael.
      Um mês depois não sei se você já conseguiu resolver o problema que estava tendo…

      Mas eu acho que posso ajudar. Quando você tinha aquele erro:

      df: `/mnt/s3fs’: Transport endpoint is not connected

      eu também tive este problema e ralei muito.
      Mas era simples, um amigo meu e eu simplesmente entramos no arquivo .passwd-s3fs e:
      1. Retiramos uma barra “/” que estava no final da linha.
      2. Colocamos a KeyID e a SecretID na linha 2 ao invés da linha 1. (A linha 1 ficou vazia).

      Pronto! Foi o suficiente para funcionar tudo!

      ——

      No segundo problema:

      touch: setting times of `texto.txt’: Operation not permitted

      Eu resolvi dando as propriedades do diretório para o usuário e grupo “ubuntu”.
      chown -R ubuntu:ubuntu /mnt/.
      Pra mim resolveu!

      Mas se você for usar recursos web dentro deste bucket como um repositório SVN
      ou qualquer outra coisa que precise de interação com o Apache, aí eu acho que
      voçê precisa colocar “ubuntu:www-data”.

      E é exatamente neste problema que estou travado no momento, meu SVN não funciona lá no bucket,
      e eu acho que é por contas destas permissões que citei. Só pode, pois qualquer interação Ubuntu,
      como transferencia de arquivos e criação de diretórios funciona, mas é só colocar o serviço Apache
      para gravar, ler ou executar que dá acesso negado.

      Até lhe peço, se souber me ajudar, por favor, estou precisando muito. : )
      Boa sorte! Abraços!

  • Eduardo Almeida

    Boa tarde,

    Ainda para ilustrar o caso do tutorial acima. Resolvi fazer o seguinte para comprovar o que está acontecendo. Excluí a instância de teste na região de N. virgínia e criei a mesma instância em Oregon. Ou seja criei do zero uma instância no EC2 em Oregon.

    Depois fui ao S3 e criei um bucket também em Oregon. Daí a coisa deu certo consegui attachar a partição normalmente!

    Sendo que para complicar agora quando entro dentro da partição que está montada e crio um arquivo com o comando touch, do tipo por exemplo, texto.txt, vem uma informação de permissão negada. Repare na mensagem que retorna:

    touch: setting times of `texto.txt’: Operation not permitted

    Não sei porque está havendo isso. Vou recriar novamente as instância, pois pode ter acontecido de está utilizando a a conta IAM e a conta de gerenciamento e pode ter havido alguma mistura. Contudo a credencial utilizada no servidor é a da conta de gerenciamento!

    Contudo fica o seguinte problema pro meu lado: a instância que está em produção está em N. Virgínia. Lá não é possível criar nenhum bucket. Como vou conseguir attachar minha instância s3 se não posso criar no local que a instância está?

    Será isso um problema????

    Abraço!

  • Gostei muito da explicação. É clara e objetiva. Parabéns! Eu vi em outro site, mas como ninguém comentou, segue o caso:

    Tenho vários clientes na Amazon. Para cada cliente, eu costumo ter um bucket para receber os backups. Criei um utilitário em C# que faz o envio do mesmo. Para linux, tenho um shell script no cron que sempre faz depois do backup.

    Tenho um servidor de monitoramento com Nagios na conta Amazon da Empresa e gostaria que este servidor tivesse acesso aos buckets de backup dos clientes. A idéia é que eu acesse no linux /buckets e já tenha: clienteX, clienteY, etc… Se eu fizer isso, poderei acessar os buckets através de um único servidor de ftp.

    É possível?

    Desde já agradeço qualquer ajuda.