Téléchargement d'un grand ensemble de données sur le Web directement dans AWS S3

12

Est-ce que quelqu'un sait s'il est possible d'importer un grand ensemble de données dans Amazon S3 à partir d'une URL?

Fondamentalement, je veux éviter de télécharger un fichier énorme et de le re-télécharger vers S3 via le portail Web. Je veux juste fournir l'URL de téléchargement à S3 et attendre qu'ils la téléchargent sur leur système de fichiers. Cela semble être une chose facile à faire, mais je ne trouve tout simplement pas la documentation à ce sujet.

Will Stedden
la source
Grande question.
Pramit

Réponses:

10

Étant donné que vous possédez évidemment un compte AWS, je recommanderais ce qui suit:

  • Créer une instance EC2 (n'importe quelle taille)
  • Utilisez wget (ou curl) pour récupérer le ou les fichiers dans cette instance EC2. Par exemple: wget http://example.com/my_large_file.csv.
  • Installer s3cmd
  • Utilisez s3cmdpour télécharger le fichier sur S3. Par exemple:s3cmd cp my_large_file.csv s3://my.bucket/my_large_file.csv

Étant donné que les connexions établies entre divers services AWS exploitent le réseau interne d'AWS, le téléchargement à partir d'une instance EC2 vers S3 est assez rapide. Beaucoup plus rapide que de le télécharger depuis votre propre ordinateur. De cette façon, vous évitez de télécharger le fichier sur votre ordinateur et gagnez un temps potentiellement important à le télécharger via l'interface Web.

Daniel Zohar
la source
Je vous remercie. J'envisageais quelque chose comme ça, mais je voulais demander autour pour voir s'il y avait un moyen plus facile. Merci d'avoir signalé toutes les étapes également. Très utile
Will Stedden
@Daniel Zohar Et si l'URL est dynamique? L'utilisation de wget ne télécharge pas le fichier mais uniquement la page avec ce lien: cms.unov.org/UNCorpus/en/Download?file=UNv1.0.en-zh.tar.gz.00
echan00
3
  1. Lancer une instance EC2 avec suffisamment de stockage

  2. ssh à l'instance

  3. Obtenez la commande curl correspondant au téléchargement depuis votre machine locale. Vous pouvez utiliser les options de développement dans Google Chrome -> onglet réseau -> copier -> copier en boucle (cette étape est nécessaire pour certains sites Web nécessitant une authentification tels que kaggle)

  4. Depuis le terminal d'instance, exécutez la curlcommande (ajoutez-la -o output_fileà la commande). Cela va télécharger et enregistrer le fichier

  5. Configurer les informations d'identification aws pour connecter l'instance à s3 (une façon consiste à utiliser la commande aws config, fournir l'identifiant et le secret de la clé d'accès AWS),

  6. Utilisez cette commande pour télécharger le fichier sur s3:

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

Reportez-vous à la documentation Aws: http://aws.amazon.com/code , des bibliothèques sont disponibles pour la plupart des langages de programmation. Vous pouvez donc créer un compartiment et configurer dans votre code pour récupérer les données de l'url et écrire dans ce compartiment en s3

par exemple en python:

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

Réf: https://boto.readthedocs.org/en/latest/s3_tut.html

Sreejithc321
la source
Je ne pense pas que ce soit tout à fait juste. Je ne sais pas trop d'où proviendrait url_data. D'après la documentation, k.set_contents_from_string () semble littéralement définir le contenu du fichier 'foobar' sur tout ce qui est contenu dans cette chaîne. Je veux que le contenu de cette URL soit poussé directement vers s3 sans avoir besoin d'être téléchargé localement.
Will Stedden
1

Vous pouvez monter votre bucket s3 sur l'instance ec2 puis cd dans le / chemin / vers / s3_mounted_on_a_folder, là vous pouvez simplement utiliser la commande:

wget https://your.download.url/

pour monter s3 sur votre ec2, utilisez s3fs.

Tanmay Gautam
la source