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.
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
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
.
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
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.
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.. :)
Vous avez à la base de nombreuses options pour le faire, mais la meilleure consiste à utiliser AWS CLI
Voici une procédure pas à pas
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)
Configurer l'AWS CLI
Assurez-vous de saisir la clé d’accès valide et que vous avez reçue lorsque vous avez créé le compte
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!
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.
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.
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é.
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
Utilisez cette commande avec AWS CLI :
aws s3 cp s3://bucketname. --recursive
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.
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
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.
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
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.
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é.
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.
Vous pouvez simplement l'obtenir avec la commande s3cmd :
s3cmd get --recursive --continue s3://test-bucket local-directory/
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.
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
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.
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.");
}
}
L'utilisateur Windows doit télécharger S3Explorer à partir de ce lien, qui contient également des instructions d'installation: - http://s3browser.com/download.aspx
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
Maintenant, tous vos seaux s3 seraient visibles sur le panneau de gauche de s3Explorer.
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:
Puis parcourez un dossier pour télécharger le seau à un endroit particulier
Cliquez sur OK et votre téléchargement commencerait.
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>
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
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
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.
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
AWS CLI est la meilleure option pour télécharger un compartiment S3 entier localement.
Installation AWS CLI.
Configurer AWS CLI pour utiliser les informations d'identification de sécurité par défaut et la région AWS par défaut.
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/