Завантажуєте ціле відро S3?


705

Я помітив, що, здається, немає можливості завантажити ціле відро S3 з консолі управління AWS.

Чи є простий спосіб забрати все в одне з моїх відер? Я думав над тим, щоб зробити кореневу папку загальнодоступною, використати, wgetщоб схопити її все, а потім знову зробити приватною, але не знаю, чи є простіший спосіб.


4
Як багато людей тут сказали, aws s3 syncце найкраще. Але ніхто не вказав, потужний варіант: dryrun. Ця опція дозволяє вам бачити, що буде завантажено / завантажено з / в s3 під час використання sync. Це дуже корисно, коли ви не хочете перезаписувати вміст ні в локальному, ні у відро s3. Так використовується: aws s3 sync <source> <destination> --dryrunя використовував його весь час, перш ніж натискати новий вміст у відро, щоб не завантажувати небажані зміни.
Перимош

Відповіді:


1334

AWS CLI

Для отримання додаткової інформації див. " Довідник команди AWS CLI ".

Нещодавно AWS випустили свої інструменти командного рядка, які працюють як бото і їх можна встановити за допомогою

sudo easy_install awscli

або

sudo pip install awscli

Після встановлення ви можете просто запустити:

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

Наприклад:

aws s3 sync s3://mybucket .

буде завантажено всі об'єкти в mybucketпоточний каталог.

І виведе:

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

Це завантажить усі ваші файли за допомогою односторонньої синхронізації. Він не видалить жодних існуючих файлів у вашому поточному каталозі, якщо ви не вкажете , і він не змінить і не видалить файли на S3. --delete

Ви також можете виконати відро S3 до відра S3 або локально синхронізувати відро S3.

Перегляньте документацію та інші приклади .

В той час як вищенаведений приклад - як завантажити повне відро, ви також можете завантажувати папку рекурсивно, виконуючи

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

Це доручить CLI завантажувати всі файли та ключі папок рекурсивно в PATH/TO/FOLDERкаталог у межах BUCKETNAMEвідра.


223
Спершу запустіть aws configureі додайте свої access keyта secret access keyякі ви можете знайти тут .
Ервін Ройджаккерс

12
Перейдіть сюди, щоб встановити інсталятор Windows aws.amazon.com/cli . Він збирає ідентифікатор ключа доступу із змінної середовища "AWS_ACCESS_KEY_ID", а ваш секретний ключ від "AWS_SECRET_ACCESS_KEY".
Метт Бонд

7
Я спробував s3cmdі Cyberduck, але для мене awscliбув на сьогоднішній день найшвидшим способом завантаження ~ 70 000 файлів з мого відра.
Аржен

11
Зауважте, що, хоч питання, задане лише про завантаження, я вважаю, що ця команда виконає двосторонню синхронізацію між вашим каталогом та S3. Якщо ви нічого не намагаєтеся завантажити, переконайтеся, що поточний каталог порожній.
Джессі Кроссен

15
@JesseCrossen Ця aws s3 syncкоманда нічого не завантажує, але вона видалить файли локально, якщо вони не існують на S3. Дивіться документацію .
Flimm

168

Ви можете використовувати s3cmdдля завантаження відра:

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

Є ще один інструмент, за допомогою якого можна скористатися rclone. Це зразок коду в документації на Rclone:

rclone sync /home/local/directory remote:bucket

5
Це досить повільно. Особливо, якщо ви намагаєтесь використовувати його поступово. Чи є рішення, яке є багатопоточним, щоб воно могло наситити пропускну здатність?
Пітер Лада

рішення нижче цього краще, більш стандартні та відкриті для більшої кількості платформ
abc123

Це не працює, коли реквієнт платить відрами (див. Arxiv.org/help/bulk_data_s3 ) :-(
Мартін Тома

як я можу використовувати ваше рішення, якщо мені потрібно виконати відповідність шаблону для завантаження? Моє питання: stackoverflow.com/questions/25086722 / ...
Shrikant Kakani

84

Я використовував кілька різних методів, щоб скопіювати дані Amazon S3 на локальну машину, включаючи s3cmd, і на сьогодні найпростішим є Cyberduck .

Все, що вам потрібно зробити, - це ввести свої облікові дані Amazon і використовувати простий інтерфейс для завантаження, завантаження, синхронізації будь-якого з ваших відра, папок або файлів.

Знімок екрана


Чудово працює! Доступно для Windows та Mac (GPL).
craastad

Cyberduck також дозволяє легко анонімно завантажувати загальнодоступні файли - схоже, s3cmd вимагає облікових даних
chrishiestand

Чудово працює і з Transmit.
Нерозлучення

CLI давав мені помилку, коли я намагався врятувати своє відро, це спрацювало чудово!
Лазар Куколь

О, це прийшло несподівано. Раніше я використовував cyberduck для FTP, але ніколи не очікував, що він має S3-з'єднання. Дякую за чудову підказку!
jskierbi

51

У вас є багато варіантів для цього, але найкращим є використання AWS CLI.

Ось посібник:

  1. Завантажте та встановіть AWS CLI у свій апарат:

  2. Налаштування AWS CLI:

    введіть тут опис зображення

    Переконайтеся , що ви вводите правильний доступ і секретні ключі, які ви отримали під час створення облікового запису.

  3. Синхронізуйте відро S3 за допомогою:

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

    У наведеній вище команді замініть такі поля:

    • yourbucket >> ваше відро S3, яке ви хочете завантажити.
    • /local/path >> шлях у вашій локальній системі, куди потрібно завантажити всі файли.

Я використовував це замість cyberduck, тому що cyberduck повинен "підготувати" файли до того, як він почне завантажувати. Для великої кількості файлів, які, здавалося б, тривали віки, і я не міг знайти інформацію про те, що насправді "готує". CLI почав завантажувати миттєво
Tashows

переконайтеся, що ви маєте цей s3://префікс у назві відра !!! З цим aws s3 lsвам не потрібен s3://префікс, але вам потрібна cpкоманда.
чімлінг

43

Для завантаження за допомогою AWS S3 CLI:

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

Для завантаження за допомогою коду використовуйте AWS SDK.

Для завантаження за допомогою GUI використовуйте Cyberduck.


1
Як ігнорувати деякі файли чи папки?
Набін

1
@Nabin ви можете використовувати --include & --exclude з підстановлювальний , щоб виключити будь - який файл або папку, як це: aws s3 cp s3://my-bucket-name ./local-folder --recursive --include "*" --exclude "excludeFolder/*" --exclude "includeFolder/excludeFile.txt"
DarkCenobyte

21

Для Windows браузер S3 - це найпростіший спосіб, який я знайшов. Це відмінне програмне забезпечення, і воно безкоштовне для некомерційного використання.


3
Щойно я спробував параметр "Завантажити всі файли на ..." (я вважаю, що це еквівалентно "завантажувати все відро s3", і він сказав, що мені потрібно для версії Pro.
Jack Ukleja

2
Оновлення: Але я зміг завантажити цілу папку у відрі, що було достатньо для моїх потреб ...
Jack Ukleja

так, безкоштовна версія досить обмежена, ви можете вибрати все та завантажити, але обмежитися лише двома одночасними передачами
Hayden Thring

Шукав просту версію для Windows після отримання деякої помилки підтримки python3 на Ubuntu 17.1 та s3cmd, це спрацювало добре.
edencorbin

21

Якщо ви використовуєте Visual Studio, завантажте " AWS Toolkit for Visual Studio ".

Після встановлення перейдіть до Visual Studio - AWS Explorer - S3 - Ваше відро - Двічі клацніть

У вікні ви зможете вибрати всі файли. Клацніть правою кнопкою миші та завантажте файли.



12

Інший варіант, який може допомогти деяким користувачам OS X, - це Transmit.

Це програма FTP, яка також дозволяє вам підключатися до файлів S3. І у неї є можливість монтувати будь-яке сховище FTP або S3 як папку у Finder, але це лише обмежений час.


12

Відповідь @Layke хороша, але якщо у вас є маса даних і не хочете чекати вічно, вам слід прочитати " Конфігурація AWS CLI S3 ".

Наступні команди дадуть команду AWS CLI використовувати 1000 потоків для виконання завдань (кожен невеликий файл або одну частину багатопартійної копії) і заздалегідь розглянути 100 000 завдань:

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

Запустивши їх, ви можете використовувати просту syncкоманду:

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

або

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

У системі з процесорними ядрами 4 ядрами та 16 ГБ оперативної пам’яті для таких випадків, як моя (3-50 ГБ файлів) швидкість синхронізації / копіювання перейшла від приблизно 9,5 Мбіт / с до 700 + МіБ / с, збільшення швидкості на 70 разів порівняно з конфігурацією за замовчуванням.


1
це справжня відповідь. щойно перевірив його, з ec2 він передав близько 2,3 Гб / хв. без паралельних варіантів близько 1 Гб / хв. рятівник.
Карстен

9

Я трохи розробив S3, і не знайшов простого способу завантажити ціле відро.

Якщо ви хочете кодувати на Java, то lib jet3t легко використовувати для створення списку відра і повторюйте цей список, щоб завантажити їх.

По-перше, отримайте набір відкритого приватного ключа від консулу управління AWS, щоб ви могли створити об'єкт S3service:

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

Потім отримайте масив об’єктів відра:

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

Нарешті, повторіть цей масив для завантаження об'єктів по одному за допомогою:

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

Я поклав код підключення в безпечний потік синглів. Необхідний синтаксис спробувати / ловити було пропущено з очевидних причин.

Якщо ви хочете скористатися кодом в Python, ви можете використовувати Boto замість цього.

Оглянувши BucketExplorer, " Завантаження цілого відра " може робити все, що ви хочете.


Якщо вам не потрібне рішення Java, використовуйте відповідь aws cli вище.
jeremyjjbrown

створити нову папку і так само
Jisson

7

API AWS sdk стане лише найкращим варіантом для завантаження всієї папки та репортажу до s3 та завантаження всього відра s3 на місце.

Для завантаження цілої папки в s3

aws s3 sync . s3://BucketName

для завантаження цілого відра s3 локально

aws s3 sync s3://BucketName . 

Ви також можете призначити шлях, як BucketName / Path для певної папки в s3 для завантаження


6

Це можна зробити за допомогою https://github.com/minio/mc :

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

mc також підтримує сеанси, поновлювані завантаження, завантаження та багато іншого. mcпідтримує операційні системи Linux, OS X та Windows. Написано в Golang та випущено під версією Apache версії 2.0.


5

Якщо ви використовуєте Firefox з S3Fox, це НЕ дозволяє вам вибирати всі файли (shift-select перший та останній) та клацати правою кнопкою миші та завантажувати всі ... Я це робив із 500+ файлами без проблеми


Це не працює для папок у відрі, навіть якщо "псевдо папки" були створені в консолі AWS. (Станом на написання цього коментаря)
Веслі,

Підтверджено, що не працює, у мене близько 12 кнів клавіш верхнього рівня = підпапки), S3Fox навіть не запускається. Також наполягайте на дозволі перелічити всі відра!
Пітер Лада


3

Якщо у вас є лише файли (немає підкаталогів), швидке рішення - вибрати всі файли ( clickна першому, Shift+clickна останньому) та натиснути Enterабо right clickі вибрати Open. Більшість файлів даних завантажують їх безпосередньо на ваш комп'ютер.


3

Щоб додати інший варіант GUI, ми використовуємо функціонал S3 WinSCP . Підключити його дуже просто, вимагаючи лише ключ доступу та секретний ключ в інтерфейсі. Потім ви можете переглядати та завантажувати будь-які потрібні файли з будь-яких доступних відер, включаючи рекурсивні завантаження вкладених папок.

Оскільки очистити нове програмне забезпечення за допомогою безпеки може бути проблемою, і WinSCP є досить поширеним, просто використовувати його, а не намагатися встановити більш спеціалізовану утиліту, може бути дуже корисно.


1
  1. Користувачеві Windows потрібно завантажити S3EXPLORER за цим посиланням, яке також має інструкції з установки: - http://s3browser.com/download.aspx

  2. Потім надайте ваші облікові дані AWS, як секретна клавіша, ключ доступу та регіон для s3explorer, це посилання містить інструкцію по налаштуванню для s3explorer: Скопіюйте вставку Посилання в браузер: s3browser.com/s3browser-first-run.aspx

  3. Тепер усі ваші відра s3 будуть видні на лівій панелі s3explorer.

  4. Просто виберіть відро і натисніть на меню "Відра" у верхньому лівому куті, а потім виберіть у меню опцію Завантажити всі файли. Нижче наведено скріншот для того ж:

Екран вибору відра

  1. Потім перегляньте папку, щоб завантажити відро у певному місці

  2. Натисніть кнопку ОК, і завантаження розпочнеться.


1

Aws sync - ідеальне рішення. Це не двосторонній .. це один шлях від джерела до місця призначення. Крім того, якщо у вас є багато предметів у відрі, буде непогано спершу створити кінцеву точку s3, щоб завантаження відбулося швидше (оскільки завантаження відбувається не через Інтернет, а через інтранет) і без плати


1

Ось деякі речі, щоб завантажити всі відра, перелічити їх, перелічити їх вміст.

    //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());
}

/ ---------------------------- Методи розширення ------------------- ------------------ /

//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

Як пояснила Ніл Бхат у цьому блозі , існує багато різних інструментів, які можна використовувати для цієї мети. Деякі надаються AWS, де більшість є сторонніми інструментами. Усі ці інструменти вимагають збереження ключа та секрету облікового запису AWS у самому інструменті. Будьте дуже обережні при використанні сторонніх інструментів, оскільки облікові дані, в яких ви зберігаєте, можуть коштувати вам, всієї вашої вартості і втратити вас мертвими.

Тому я завжди рекомендую використовувати для цієї мети AWS CLI . Ви можете просто встановити це за посиланням . Далі, запустіть таку команду і збережіть свої ключові таємні значення в AWS CLI.

aws configure

І скористайтеся наступною командою, щоб синхронізувати відро AWS S3 з локальною машиною. (На локальній машині повинен бути встановлений AWS CLI)

aws s3 sync <source> <destination>

Приклади:

1) Для AWS S3 для локального зберігання

aws s3 sync <S3Uri> <LocalPath>

2) Від локального зберігання до AWS S3

aws s3 sync <LocalPath> <S3Uri>

3) Від відра AWS s3 до іншого відра

aws s3 sync <S3Uri> <S3Uri> 

Наприклад, 3, чи можу я вказати папку Bucket на іншу папку відра? Насправді я хочу синхронізувати папку із відра з іншою папкою.
lukai

@lukai так. Це те, що я
наводив

1

Якщо ви хочете завантажити відро тільки з AWS, спочатку встановіть AWS CLI у свій апарат. У терміналі змініть каталог, куди потрібно завантажити файли, і запустіть цю команду.

aws s3 sync s3://bucket-name .

Якщо ви також хочете синхронізувати локальний та s3 каталоги (на випадок, якщо ви додали деякі файли в локальну папку), виконайте цю команду:

aws s3 sync . s3://bucket-name

1

AWS CLI - найкращий варіант для завантаження всього відра S3 локально.

  1. Встановіть AWS CLI.

  2. Налаштуйте AWS CLI для використання облікових даних за замовчуванням та регіону AWS за замовчуванням.

  3. Щоб завантажити весь відро S3, використовуйте команду

    aws s3 sync s3: // yourbucketname localpath

Посилання на використання AWS cli для різних служб AWS: https://docs.aws.amazon.com/cli/latest/reference/


1

Ви можете використовувати цю команду AWS cli для завантаження всього вмісту відра S3 у локальну папку

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

Якщо ви бачите подібну помилку

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

--no-verify-ssl (булева)

За замовчуванням AWS CLI використовує SSL під час спілкування зі службами AWS. Для кожного SSL-з'єднання AWS CLI перевірятиме SSL-сертифікати. Цей параметр переосмислює поведінку за замовчуванням для перевірки сертифікатів SSL. довідник

Використовуйте цей тег за допомогою команди --no-verify-ssl

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

Використання s3 syncвже розглянуто вище. + Запропонувати застосування --no-verify-sslбез пояснення наслідків для безпеки є злочином.
Мартін

Дякуємо за інформацію про безпеку. Я зіткнувся з цією проблемою і вирішив її за допомогою цього посилання docs.aws.amazon.com/cli/latest/reference
Дімуту

1

Якщо відро досить велике, є команда, s4cmdяка робить паралельні з'єднання та покращує час завантаження:

Щоб встановити його на Debian, як

apt install s4cmd

Якщо у вас є піп:

pip install s4cmd

Він прочитає ~/.s3cfgфайл, якщо він присутній (якщо його не встановити s3cmdта запустити s3cmd --configure), або ви можете вказати --access-key=ACCESS_KEY --secret-key=SECRET_KEYв команді.

Клі схожий на s3cmd. У вашому випадку syncрекомендується використовувати а, оскільки ви можете скасувати завантаження та запустити його знову, не потребуючи повторного завантаження файлів.

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

Будьте уважні, якщо ви завантажите багато даних (> 1 ТБ), це може вплинути на ваш рахунок, спочатку розрахуйте, яка буде вартість


0

Як сказав @layke, найкраща практика завантажувати файл із кліпу S3 - це безпечно і безпечно. Але в деяких випадках людям потрібно використовувати wget, щоб завантажити файл, і ось рішення

aws s3 presign s3://<your_bucket_name/>

Це призначить, ви отримаєте тимчасову загальнодоступну URL-адресу, яку ви можете використовувати для завантаження вмісту з S3 за допомогою presign_url, у вашому випадку за допомогою wget або будь-якого іншого клієнта для завантаження.


0

Спробуйте цю команду:

aws s3 sync yourBucketnameDirectory yourLocalDirectory

Наприклад, якщо назва вашого відра myBucketі локальний каталог c:\local, то:

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

Для отримання додаткової інформації про awscli перевірте цю установку Aws cli

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.