Como posso configurar um servidor SFTP suportado pelo S3 (ou similar)

8

Eu preciso configurar um servidor SFTP que, essencialmente, tenha uma capacidade muito grande. Preciso fornecer um dos detalhes de login do SFTP aos nossos parceiros para um servidor no qual eles carregarão milhões de arquivos, totalizando algumas centenas de Terabytes. Eu então serei seletiva e muito raramente lendo alguns desses arquivos. Este é o único requisito real, qualquer opção de tecnologia está disponível.

O que vem à mente como a maneira mais fácil é ter algum tipo de instância do EC2 executando o servidor SFTP de forma que qualquer coisa carregada seja enviada diretamente para o S3, ou algum tipo de processo descubra novos arquivos quando eles forem enviados, copia-os para o S3 e apaga-os do disco.

Este é o melhor caminho? Existe alguma outra maneira de obter um servidor que tenha essencialmente "espaço em disco infinito e magicamente crescente"?

Obrigado pela sua ajuda! Daniel

    
por Daniel Magliola 20.03.2015 / 20:57

3 respostas

10

Respondi esta mesma pergunta no Stack Overflow .

s3fs é de fato uma solução razoável e, no meu caso, eu o integrei ao proftpd com excelentes resultados, apesar dos problemas teóricos / potenciais.

Na época em que escrevi a resposta, eu só tinha configurado isso para um dos meus clientes de consultoria ... mas desde então, eu também comecei a beber meu próprio kool-aid e o estou usando na produção no meu dia trabalho. Empresas trocamos dados com upload e download de arquivos o dia todo no meu servidor sftp, que está armazenando tudo diretamente no S3. Como bônus, meu sistema de exportação de relatórios - que grava planilhas do Excel diretamente para o S3 - pode exportar relatórios "para o servidor FTP" simplesmente colocando-os diretamente no bucket do servidor FTP, com metadados apropriados para mostrar o uid, gid e modo de cada arquivo. (s3fs usa cabeçalhos x-amz-meta-uid, -gid e -mode para emular as permissões do sistema de arquivos). Quando o cliente se conecta ao servidor, os arquivos de relatório estão ... ali.

Eu acho que a solução ideal seria provavelmente um serviço de gateway sftp para S3, mas eu ainda não consegui projetar um, já que esta solução funciona muito bem ... com algumas ressalvas, é claro:

Nem todos os valores padrão para s3fs são sãos. Você provavelmente desejará especificar essas opções:

-o enable_noobj_cache   # s3fs has a huge performance hit for large directories without this enabled
-o stat_cache_expire=30 # the ideal time will vary according to your usage
-o enable_content_md5   # it's beyond me why this safety check is disabled by default

Provavelmente, é melhor usar uma região diferente da US-Standard, porque essa é a única região que não oferece consistência de leitura após gravação em novos objetos. (Ou, se você precisar usar o padrão americano, poderá usar o nome de host quase não documentado your-bucket.s3-external-1.amazonaws.com da região us-east-1 para impedir que suas solicitações sejam roteadas geograficamente, o que pode melhorar a consistência.)

Eu tenho o controle de versão de objeto ativado no bucket, o qual o s3fs não sabe. O benefício disso é que, mesmo que um arquivo seja "invadido", sempre posso ir para o controle de versão do bucket para recuperar o arquivo "sobrescrito". O versionamento de objetos no S3 foi brilhantemente projetado de tal forma que os clientes do S3 que não estão cientes de versionamento não são de forma alguma desabilitados ou confusos, porque se você não fizer chamadas REST com reconhecimento de versão, as respostas retornadas pelo S3 são compatíveis com clientes que possuem nenhum conceito de versionamento.

Note também que transferência de dados S3 está livre dos custos de transferência de dados. Você paga apenas o preço por solicitação. A transferência de dados do S3 para o EC2 dentro de uma região também é isenta de encargos de transferência de dados. É somente quando você transfere do S3 para a Internet, para a Cloudfront ou para outra região da AWS que você paga taxas de transferência. Se você quiser usar o armazenamento de redundância reduzida com preço mais baixo, o s3fs suporta isso com -o use_rrs .

Como um divertimento à parte, você sempre terá uma sensação de conforto ao ver os 256 terabytes de espaço livre (e 0 usados, já que um cálculo real de tamanhos é impraticável porque o S3 é um armazenamento de objetos, não um sistema de arquivos).

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  1.4G  6.2G  18% /
s3fs            256T     0  256T   0% /srv/s3fs/example-bucket

Claro, você pode montar o balde em qualquer lugar. Por acaso, eu tenho isso em / srv / s3fs.

    
por 28.03.2015 / 02:39
5

Confira o Gateway SFTP no AWS Marketplace .

Tivemos problemas de confiabilidade com o s3fs, por isso desenvolvemos uma solução personalizada especificamente para essa finalidade. Estamos usando em produção há vários anos sem problemas e lançamos recentemente no AWS Marketplace.

    
por 11.07.2017 / 16:18
1

Como o @Michael já respondeu , basta montar o bloco usando o sistema de arquivos s3fs (ou semelhante) para um servidor Linux (Amazon EC2) e use o servidor SFTP interno do servidor para acessar o intervalo.

Aqui estão as instruções básicas:

  • Instale o s3fs
  • Adicione suas credenciais de segurança em um formulário access-key-id:secret-access-key ao /etc/passwd-s3fs
  • Adicione uma entrada de montagem de depósito ao fstab :

    <bucket> /mnt/<bucket> fuse.s3fs rw,nosuid,nodev,allow_other 0 0
    

Para mais detalhes, consulte meu guia Como configurar um acesso SFTP ao Amazon S3 .

    
por 03.09.2015 / 16:21