Download de um grande conjunto de dados na Web diretamente no AWS S3

12

Alguém sabe se é possível importar um grande conjunto de dados para o Amazon S3 a partir de um URL?

Basicamente, eu quero evitar o download de um arquivo enorme e depois enviá-lo novamente para o S3 através do portal da web. Eu só quero fornecer o URL de download para o S3 e esperar que eles façam o download no sistema de arquivos. Parece uma coisa fácil de fazer, mas simplesmente não consigo encontrar a documentação.

Will Stedden
fonte
Ótima pergunta.
Pramit

Respostas:

10

Como você obviamente possui uma conta da AWS, recomendo o seguinte:

  • Crie uma instância do EC2 (qualquer tamanho)
  • Use wget (ou curl) para buscar os arquivos nessa instância do EC2. Por exemplo: wget http://example.com/my_large_file.csv.
  • Instale o s3cmd
  • Use s3cmdpara fazer upload do arquivo para o S3. Por exemplo:s3cmd cp my_large_file.csv s3://my.bucket/my_large_file.csv

Como as conexões feitas entre vários serviços da AWS aproveitam a rede interna da AWS, o upload de uma instância do EC2 para o S3 é muito rápido. Muito mais rápido do que enviá-lo do seu próprio computador. Dessa forma, você evita o download do arquivo no seu computador e economiza um tempo potencialmente significativo ao carregá-lo pela interface da web.

Daniel Zohar
fonte
Obrigado. Eu estava pensando em algo assim, mas queria perguntar ao redor para ver se havia uma maneira mais fácil. Obrigado por apontar todas as etapas também. Muito útil
Will Stedden
@ Daniel Zohar E se a URL for dinâmica? O uso do wget não baixa o arquivo, mas apenas a página com este link: cms.unov.org/UNCorpus/en/Download?file=UNv1.0.en-zh.tar.gz.00
echan00
3
  1. Iniciar uma instância do EC2 com armazenamento suficiente

  2. ssh para a instância

  3. Obtenha o comando curl correspondente ao download na sua máquina local. Você pode usar as opções de desenvolvedor no Google chrome -> guia rede -> copiar -> copiar como ondulação (esta etapa é necessária para alguns sites que exigem autenticação, como o kaggle)

  4. No terminal da instância, execute o curlcomando (acrescente -o output_fileao comando). Isso fará o download e salvará o arquivo

  5. Configure as credenciais do aws para conectar a instância ao s3 (uma maneira é usar o comando aws config, fornecer o ID e o segredo da chave de acesso da AWS),

  6. Use este comando para fazer upload do arquivo para s3:

    aws s3 cp path-to-file s3://bucket-name/
    
MNassar
fonte
2

Consulte a documentação do Aws: http://aws.amazon.com/code, existem bibliotecas disponíveis para a maioria das linguagens de programação. Assim, você pode criar um bucket e configurar no seu código para buscar dados do URL e gravar nesse bucket no s3

por exemplo em python:

from boto.s3.key import Key
k = Key(bucket)
k.key = 'foobar'
k.set_contents_from_string(url_data)

Ref: https://boto.readthedocs.org/en/latest/s3_tut.html

Sreejithc321
fonte
Eu não acho que isso esteja certo. Não sei ao certo de onde viriam os url_data. A partir da documentação, k.set_contents_from_string () parece literalmente definir o conteúdo do arquivo 'foobar' para o que estiver contido nessa string. Quero que o conteúdo desse URL seja enviado diretamente para o s3 sem precisar ser baixado localmente.
Will Stedden
1

Você pode montar seu bucket s3 na instância ec2 e depois fazer o cd na pasta / path / to / s3_mounted_on_a_folder, onde você pode simplesmente usar o comando:

wget https://your.download.url/

para montar s3 no seu ec2, use s3fs.

Tanmay Gautam
fonte