web-dev-qa-db-fra.com

Télécharger un seau entier S3?

J'ai remarqué qu'il ne semblait pas y avoir de possibilité de télécharger un compartiment S3 entier à partir de la AWS Management Console.

Existe-t-il un moyen facile de tout saisir dans l'un de mes seaux? Je pensais rendre le dossier racine public, en utilisant wget pour tout récupérer, puis en le rendant privé à nouveau, mais je ne sais pas s'il existe un moyen plus facile.

581
rugbert

AWS CLI

Documentation pour AWS CLI

AWS a récemment publié ses outils de ligne de commande. Cela fonctionne beaucoup comme boto et peut être installé en utilisant Sudo easy_install awscli ou Sudo pip install awscli

Une fois installé, vous pouvez simplement lancer:

Commande :

aws s3 sync s3://<source_bucket> <local_destination>

Par exemple,

aws s3 sync s3://mybucket .

va télécharger tous les objets dans mybucket dans le répertoire courant.

Sortie :

download: s3://mybucket/test.txt to test.txt
download: s3://mybucket/test2.txt to test2.txt

Cela téléchargera tous vos fichiers (synchronisation unidirectionnelle). pas ne supprimera aucun fichier existant dans votre répertoire actuel (sauf si vous spécifiez --delete ), et il ne le fera pas. modifier ou supprimer tous les fichiers sur S3.

Vous pouvez également effectuer une synchronisation de S3 à S3 ou locale à la synchronisation de s3.

Consultez la documentation et d'autres exemples:

http://docs.aws.Amazon.com/cli/latest/reference/s3/sync.html

Télécharger un dossier depuis un seau

Si l’exemple ci-dessus montre comment télécharger un compartiment complet, vous pouvez également télécharger un dossier de manière récurrente en effectuant les opérations suivantes:

aws s3 cp s3://BUCKETNAME/PATH/TO/FOLDER LocalFolderName --recursive

Cela demandera à la CLI de télécharger tous les fichiers et les clés de dossier de manière récursive dans le répertoire PATH/TO/FOLDER dans le compartiment BUCKETNAME.

1108
Layke

Vous pouvez utiliser s3cmd pour télécharger votre seau.

s3cmd --configure
s3cmd sync s3://bucketnamehere/folder /destination/folder

Mettre à jour

Il existe un autre outil que vous pouvez utiliser appelé Rclone . Vous trouverez ci-dessous un exemple de code dans la documentation de Rclone.

rclone sync /home/local/directory remote:bucket
159
Phil M.

J'ai utilisé différentes méthodes pour copier des données Amazon S3 sur une machine locale, y compris s3cmd, et de loin la plus simple est Cyberduck . Tout ce que vous avez à faire est d'entrer vos informations d'identification Amazon et d'utiliser l'interface simple pour télécharger/télécharger/synchroniser vos seaux/dossiers/fichiers.

Screenshot

75
wedocando

Pour télécharger à l'aide de l'AWS S3 CLI:

aws s3 cp s3://WholeBucket LocalFolder --recursive
aws s3 cp s3://Bucket/Folder LocalFolder --recursive

Pour télécharger à l'aide de code, utilisez AWS SDK .

Pour télécharger en utilisant l'interface graphique, utilisez Cyberduck .

J'espère que ça aide.. :)

39
Sarat Chandra

Vous avez à la base de nombreuses options pour le faire, mais la meilleure consiste à utiliser AWS CLI

Voici une procédure pas à pas

  • Étape 1

Téléchargez et installez AWS CLI sur votre machine

Installez l'AWS CLI à l'aide du programme d'installation MSI (Windows)

Installez l'AWS CLI à l'aide du programme d'installation fourni (Linux, OS X ou Unix)

  • Étape 2

Configurer l'AWS CLI

enter image description here

Assurez-vous de saisir la clé d’accès valide et que vous avez reçue lorsque vous avez créé le compte

  • Étape 3

Synchronisez le s3 avec la commande suivante

aws s3 sync s3://yourbucket /local/path

Remplacer la commande ci-dessus par les données suivantes

yourbucket >> votre compartiment s3 que vous souhaitez télécharger

/local/chemin >> chemin dans votre système local où vous souhaitez télécharger tous les fichiers

J'espère que cela t'aides!

39
Darshan Lila

S3 Browser est le moyen le plus simple que j'ai trouvé. C'est un excellent logiciel ... Et il est gratuit pour une utilisation non commerciale. Windows seulement.

http://s3browser.com/

19
dworrad

Si vous utilisez Visual Studio, téléchargez http://aws.Amazon.com/visualstudio/

Une fois installé, accédez à Visual Studio - AWS Explorer - S3 - Votre compartiment - Double-cliquez sur

Dans la fenêtre, vous pourrez sélectionner tous les fichiers. Faites un clic droit et téléchargez les fichiers.

18
Ives.me

Une autre option qui pourrait aider certains tilisateurs d'osx, est transmettre. C'est un programme ftp qui vous permet également de vous connecter à vos fichiers s3. Et il a une option pour monter n'importe quel stockage ftp ou s3 en tant que dossier dans le Finder. Mais ce n'est que pour un temps limité.

10
Diederik

J'ai fait un peu de développement pour s3 et je n'ai pas trouvé de moyen simple de télécharger tout un seau. Si vous voulez coder dans Java, la librairie jets3t est facile à utiliser pour créer une liste de compartiments et effectuer une itération sur cette liste pour les télécharger.

http://jets3t.s3.amazonaws.com/downloads.html

commencez par obtenir un jeu de clés privées publiques à partir du logiciel de gestion AWS afin de pouvoir créer un objet S3service ...

AWSCredentials awsCredentials = new AWSCredentials(YourAccessKey, YourAwsSecretKey);
s3Service = new RestS3Service(awsCredentials);

puis obtenez un tableau de vos objets de seaux ...

S3Object[] objects = s3Service.listObjects(YourBucketNameString);

enfin, parcourez ce tableau pour télécharger les objets un à un avec ce code ...

S3Object obj = s3Service.getObject(bucket, fileName);
            file = obj.getDataInputStream();

Je mets le code de connexion dans un singleton threadsafe. La syntaxe try/catch nécessaire a été omise pour des raisons évidentes.

Si vous préférez coder dans Python, vous pouvez utiliser Boto à la place.

PS après avoir regardé autour de BucketExplorer mon faire ce que vous voulez. https://forums.aws.Amazon.com/thread.jspa?messageID=248429

8
jeremyjjbrown

Utilisez cette commande avec AWS CLI :

aws s3 cp s3://bucketname. --recursive
7
ashack

La réponse de @Layke est bonne, mais si vous avez une tonne de données et que vous ne voulez pas attendre indéfiniment, vous devez porter une attention particulière à cette documentation sur comment obtenir la commande de synchronisation AWS S3 CLI pour synchroniser les compartiments avec parallélisation massive . Les commandes suivantes indiqueront à l'AWS CLI d'utiliser 1 000 threads pour exécuter des travaux (chacun un petit fichier ou une partie d'une copie en plusieurs parties) et d'anticiper 100 000 travaux:

aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000

Après les avoir exécutées, vous pouvez utiliser la commande de synchronisation simple comme suit:

aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path

ou

aws s3 sync s3://source-bucket/source-path c:\my\local\data\path

Sur un système doté de 4 cœurs de processeur et de 16 Go de RAM, dans des cas comme le mien (fichiers de 3 à 50 Go), la vitesse de synchronisation/copie est passée d’environ 9,5 Mo/s à 700 + MiB/s, soit 70 fois plus rapidement que la configuration par défaut.

7
James

Si vous utilisez Firefox avec S3Fox, cela vous permet de sélectionner tous les fichiers (sélection du premier et du dernier) et de cliquer à droite et de tout télécharger ... Je l'ai déjà fait avec plus de 500 fichiers sans problème

4
jpwynn

Vous pouvez le faire avec https://github.com/minio/mc :

mc cp -r https://s3-us-west-2.amazonaws.com/bucketName/ localdir

mc prend également en charge les sessions, les téléchargements pouvant être repris, les mises en ligne, etc. mc prend en charge les systèmes d'exploitation Linux, OS X et Windows. Écrit dans Golang et publié sous Apache Version 2.0.

4
Krishna Srinivas

AWS sdk API constituera la meilleure option pour le téléchargement de tout le dossier et du référentiel sur s3, ainsi que pour le seau complet de s3 sur local.

Pour télécharger tout le dossier sur s3

aws s3 sync . s3://BucketName

pour télécharger seau entier s3 localement

aws s3 sync s3://BucketName . 

vous pouvez également attribuer un chemin d'accès comme BucketName/Path pour un dossier particulier dans s3 à télécharger

3
Harsh Manvar

Si vous ne disposez que de fichiers (pas de sous-répertoires), une solution rapide consiste à sélectionner tous les fichiers (click sur le premier, Shift+click sur le dernier) et à cliquer sur Enter ou right click et sélectionner Open. . Pour la plupart des fichiers de données, cela les téléchargera directement sur votre ordinateur.

3
Lukasz Czerwinski

Pour ajouter une autre option graphique, nous utilisons fonctionnalité S3 de WinSCP . Il est très facile de se connecter, ne nécessitant que votre clé d'accès et votre clé secrète dans l'interface utilisateur. Vous pouvez ensuite parcourir et télécharger les fichiers dont vous avez besoin à partir de tous les compartiments accessibles, y compris les téléchargements récursifs de dossiers imbriqués.

Comme la suppression de nouveaux logiciels par la sécurité peut s'avérer un défi et que WinSCP est assez répandu, il peut être très bénéfique de simplement l'utiliser, plutôt que d'essayer d'installer un utilitaire plus spécialisé.

3
bsplosion

Dans Windows, mon outil graphique préféré pour cela est Cloudberry Explorer pour S3., http://www.cloudberrylab.com/free-Amazon-s3-Explorer-cloudfront-IAM.aspx . Possède un explorateur de fichiers plutôt poli, une interface de type ftp.

3
fundead

Vous pouvez simplement l'obtenir avec la commande s3cmd :

s3cmd get --recursive --continue s3://test-bucket local-directory/
1
Hubbitus

aws sync est la solution parfaite. Il ne fait pas un aller-retour. C'est un aller-simple de source en destination. De plus, si vous avez beaucoup d'éléments dans le seau, il serait judicieux de créer d'abord un point de terminaison s3 afin que le téléchargement se fasse plus rapidement (car le téléchargement ne s'effectue pas via Internet, mais via un intranet) et sans frais.

1
Deepak

Si vous souhaitez uniquement télécharger le compartiment à partir d'AWS, installez d'abord l'AWS CLI sur votre ordinateur. Dans terminal, changez le répertoire dans lequel vous souhaitez télécharger les fichiers et exécutez cette commande.

aws s3 sync s3://bucket-name .

Si vous souhaitez également synchroniser les répertoires local et s3 (si vous avez ajouté des fichiers dans un dossier local), exécutez la commande suivante:

aws s3 sync . s3://bucket-name
1
Muzammil

Mon commentaire n'ajoute pas vraiment de nouvelle solution. Comme beaucoup de gens ici l'ont dit, aws s3 sync est le meilleur. Mais personne n'a signalé une option puissante: dryrun. Cette option vous permet de voir ce qui serait téléchargé/chargé de/vers s3 lorsque vous utilisez sync. Ceci est vraiment utile lorsque vous ne voulez pas écraser le contenu dans votre compartiment local ou dans un compartiment s3. Voici comment est utilisé:

aws s3 sync <source> <destination> --dryrun

Je l'ai utilisé tout le temps avant de transférer du nouveau contenu dans un compartiment afin de ne pas télécharger les modifications non souhaitées.

1
Perimosh

Voici quelques trucs pour télécharger tous les seaux, les lister, lister leur contenu.

    //connection string
    private static void dBConnection() {
    app.setAwsCredentials(CONST.getAccessKey(), CONST.getSecretKey());
    conn = new AmazonS3Client(app.getAwsCredentials());
    app.setListOfBuckets(conn.listBuckets());
    System.out.println(CONST.getConnectionSuccessfullMessage());
    }

    private static void downloadBucket() {

    do {
        for (S3ObjectSummary objectSummary : app.getS3Object().getObjectSummaries()) {
            app.setBucketKey(objectSummary.getKey());
            app.setBucketName(objectSummary.getBucketName());
            if(objectSummary.getKey().contains(CONST.getDesiredKey())){
                //DOWNLOAD
                try 
                {
                    s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
                    s3Client.getObject(
                            new GetObjectRequest(app.getBucketName(),app.getBucketKey()),
                            new File(app.getDownloadedBucket())
                            );
                } catch (IOException e) {
                    e.printStackTrace();
                }

                do
                {
                     if(app.getBackUpExist() == true){
                        System.out.println("Converting back up file");
                        app.setCurrentPacsId(objectSummary.getKey());
                        passIn = app.getDataBaseFile();
                        CONVERT= new DataConversion(passIn);
                        System.out.println(CONST.getFileDownloadedMessage());
                    }
                }
                while(app.getObjectExist()==true);

                if(app.getObjectExist()== false)
                {
                    app.setNoObjectFound(true);
                }
            }
        }
        app.setS3Object(conn.listNextBatchOfObjects(app.getS3Object()));
    } 
    while (app.getS3Object().isTruncated());
}

/ ---------------------------- Méthodes d'extension --------------- ---------------------- /

//Unzip bucket after download 
public static void unzipBucket() throws IOException {
    unzip = new UnZipBuckets();
    unzip.unZipIt(app.getDownloadedBucket());
    System.out.println(CONST.getFileUnzippedMessage());
}

//list all S3 buckets
public static void listAllBuckets(){
    for (Bucket bucket : app.getListOfBuckets()) {
        String bucketName = bucket.getName();
        System.out.println(bucketName + "\t" + StringUtils.fromDate(bucket.getCreationDate()));
    }
}

//Get the contents from the auto back up bucket
public static void listAllBucketContents(){     
    do {
        for (S3ObjectSummary objectSummary : app.getS3Object().getObjectSummaries()) {
            if(objectSummary.getKey().contains(CONST.getDesiredKey())){
                System.out.println(objectSummary.getKey() + "\t" + objectSummary.getSize() + "\t" + StringUtils.fromDate(objectSummary.getLastModified()));
                app.setBackUpCount(app.getBackUpCount() + 1);   
            }
        }
        app.setS3Object(conn.listNextBatchOfObjects(app.getS3Object()));
    } 
    while (app.getS3Object().isTruncated());
    System.out.println("There are a total of : " + app.getBackUpCount() + " buckets.");
}

}

1
John Hanewich
  1. L'utilisateur Windows doit télécharger S3Explorer à partir de ce lien, qui contient également des instructions d'installation: - http://s3browser.com/download.aspx

  2. Indiquez ensuite les informations d'identification AWS telles que secretkey, accesskey et region dans s3Explorer. Ce lien contient des instructions de configuration pour s3Explorer: Copier le lien de collage dans brower: s3browser.com/s3browser-first-run.aspx

  3. Maintenant, tous vos seaux s3 seraient visibles sur le panneau de gauche de s3Explorer.

  4. Sélectionnez simplement le compartiment, puis cliquez sur le menu Buckets dans le coin supérieur gauche, puis sélectionnez l'option Télécharger tous les fichiers dans du menu. Voici la capture d'écran pour la même chose:

Écran de sélection de sea

  1. Puis parcourez un dossier pour télécharger le seau à un endroit particulier

  2. Cliquez sur OK et votre téléchargement commencerait.

1
Patrick R

Comme Neel Bhaat l'a expliqué dans ce blog , il existe de nombreux outils pouvant être utilisés à cette fin. Certains sont fournis par AWS, où la plupart sont des outils tiers. Tous ces outils nécessitent que vous enregistriez la clé de votre compte AWS et le secret dans l'outil lui-même. Soyez très prudent lorsque vous utilisez des outils tiers, car les informations d'identification que vous enregistrez risquent de vous coûter toute votre valeur et vous feront perdre la vie.

Par conséquent, je recommande toujours d'utiliser AWS CLI à cette fin. Vous pouvez simplement l'installer à partir de ce lien . Ensuite, exécutez la commande suivante et enregistrez votre clé, les valeurs secrètes dans AWS CLI.

aws configure

Et utilisez la commande suivante pour synchroniser votre AWS S3 Bucket sur votre ordinateur local. (AWS CLI doit être installé sur l'ordinateur local)

aws s3 sync <source> <destination>

Exemples:

1) Pour AWS S3 sur le stockage local

aws s3 sync <S3Uri> <LocalPath>

2) Du stockage local à AWS S3

aws s3 sync <LocalPath> <S3Uri>

3) D'un seau AWS s3 à un autre.

aws s3 sync <S3Uri> <S3Uri> 
1
Keet Sugathadasa

Essayez cette commande:

aws s3 sync yourBucketnameDirectory yourLocalDirectory

Par exemple, si votre nom de compartiment est myBucket et que le répertoire local est c:\local, alors:

aws s3 sync s3://myBucket c:\local

Pour plus d'informations sur awscli, vérifiez ceci installation de aws cli

0
PKP

Si le compartiment est assez grand, il existe une commande appelée s4cmd qui établit des connexions en parallèle et améliore le temps de téléchargement:

Pour l'installer sur Debian comme

apt install s4cmd

Si vous avez un pip:

pip install s4cmd

Il lit le fichier ~/.s3cfg s'il est présent (sinon, installez s3cmd et exécutez s3cmd --configure) ou vous pouvez spécifier --access-key=ACCESS_KEY --secret-key=SECRET_KEY dans la commande.

Le cli est similaire à s3cmd. Dans votre cas, un sync est recommandé, car vous pouvez annuler le téléchargement et le redémarrer sans avoir à télécharger à nouveau les fichiers.

s4cmd [--access-key=ACCESS_KEY --secret-key=SECRET_KEY] sync s3://<your-bucket> /some/local/dir

Soyez prudent si vous téléchargez beaucoup de données (> 1 To), cela pourrait avoir un impact sur votre facture. Calculez d'abord quel sera le coût

0
bartomeu

Comme @layke l'a dit, il est recommandé de télécharger le fichier à partir de la S3 cli car il s'agit d'un logiciel sûr et sécurisé. Mais dans certains cas, les gens doivent utiliser wget pour télécharger le fichier et voici la solution

aws s3 presign s3://<your_bucket_name/>

Cela signifiera que vous obtiendrez une URL publique temporaire que vous pourrez utiliser pour télécharger du contenu depuis S3 à l’aide de presign_url, dans votre cas, utilisez wget ou n’importe quel autre client de téléchargement.

0
Balaji JB

Vous pouvez utiliser cette commande AWS cli pour télécharger l'intégralité du contenu du compartiment S3 dans un dossier local.

aws s3 sync s3://your-bucket-name "Local Folder Path"

Si vous voyez une erreur comme celle-ci

fatal error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)

--no-verify-ssl (boolean)

Par défaut, l'AWS CLI utilise SSL pour communiquer avec les services AWS. AWS CLI vérifiera les certificats SSL pour chaque connexion SSL. Cette option annule le comportement par défaut de la vérification des certificats SSL. référence

Utilisez cette balise avec la commande - no-verify-ssl

aws s3 sync s3://your-bucket-name "Local Folder Path" --no-verify-ssl
0
Dimuthu

AWS CLI est la meilleure option pour télécharger un compartiment S3 entier localement.

  1. Installation AWS CLI.

  2. Configurer AWS CLI pour utiliser les informations d'identification de sécurité par défaut et la région AWS par défaut.

  3. Pour télécharger l'intégralité de la commande d'utilisation du compartiment S3

    aws s3 sync s3: // yourbucketname localpath

Référence à utiliser AWS cli pour différents services AWS: https://docs.aws.Amazon.com/cli/latest/reference/

0
singh30