Загрузка всего ведра S3?

Я заметил, что, похоже, нет возможности загружать целую ведро S3 из консоли управления AWS.

Есть ли простой способ захватить все в одном из моих ведер? Я думал о том, чтобы сделать корневую папку общедоступной, используя wget, чтобы захватить все это, а затем снова сделать ее закрытой, но я не знаю, есть ли более простой способ.

Ответ 1

AWS CLI

Документация для AWS CLI

AWS недавно выпустила свои инструменты командной строки. Это работает как boto и может быть установлено с помощью sudo easy_install awscli или sudo pip install awscli

После установки вы можете просто запустить:

Команда:

aws s3 sync s3://mybucket .

Выход:

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

Это загрузит все ваши файлы (односторонняя синхронизация). Он не удалит существующие файлы в вашем текущем каталоге (если вы не укажете --delete), и не изменит и не удалит файлы на S3.

Вы также можете выполнить S3 Bucket для S3 Bucket или локально для S3 Bucket Sync.

Ознакомьтесь с документацией и другими примерами:

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

Скачивание папки из ведра

В то время как в приведенном выше примере показано, как загрузить полный пакет, вы также можете загрузить папку, выполнив

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

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

Ответ 2

Вы можете использовать s3cmd для загрузки своего ведра.

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

Обновление

Существует еще один инструмент, который вы можете использовать: Rclone. Ниже приведен пример кода в документации Rclone.

rclone sync /home/local/directory remote:bucket

Ответ 3

Я использовал несколько разных методов для копирования данных Amazon S3 на локальный компьютер, включая s3cmd, и, безусловно, самый легкий Cyberduck. Все, что вам нужно сделать, это ввести свои учетные данные Amazon и использовать простой интерфейс для загрузки/выгрузки/синхронизации любых ваших ведер/папок/файлов.

Снимок экрана

Ответ 4

У вас есть много вариантов для этого, но лучший из них - использование AWS CLI.

Здесь прохождение

  • Шаг 1

Загрузите и установите AWS CLI на свой компьютер

Установите интерфейс командной строки AWS с помощью установщика MSI (Windows)

Установите интерфейс командной строки AWS с помощью комплектного установщика (Linux, OS X или Unix)

  • Шаг 2

Настроить интерфейс командной строки AWS

enter image description here

Убедитесь, что вы ввели действительный ключ доступа и секретный ключ, которые вы получили при создании учетной записи

  • Шаг 3

Синхронизируйте ведро s3 с помощью следующей команды

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

Замените вышеприведенную команду следующими данными

yourbucket >> ваше ведро s3, которое вы хотите скачать

/local/path >> путь в вашей локальной системе, куда вы хотите скачать все файлы

Надеюсь это поможет!

Ответ 5

Загрузить с помощью AWS S3 CLI:

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

Чтобы загрузить с помощью кода, используйте AWS SDK.

Чтобы загрузить с помощью графического интерфейса, используйте Cyberduck.

Надеюсь, что это поможет...:)

Ответ 6

Браузер S3 - самый простой способ, который я нашел. Это отличное программное обеспечение... И это бесплатно для некоммерческого использования. Только для Windows

http://s3browser.com/

Ответ 7

Если вы используете Visual Studio, загрузите http://aws.amazon.com/visualstudio/

После установки перейдите в Visual Studio - AWS Explorer - S3 - Ваше ведро - Дважды щелкните

В окне вы сможете выбрать все файлы. Щелкните правой кнопкой мыши и загрузите файлы.

Ответ 8

Другим вариантом, который может помочь некоторым пользователям osx, является передавать. Это программа ftp, которая также позволяет подключаться к вашим файлам s3. И он имеет возможность монтировать любое хранилище ftp или s3 в качестве папки в finder. Но это только в течение ограниченного времени.

Ответ 9

Я немного поработал для s3, и я не нашел простой способ загрузить целую ведро. Если вы хотите закодировать в Java, jets3t lib прост в использовании, чтобы создать список ведер и перебрать этот список, чтобы загрузить их.

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

сначала получите набор закрытых личных ключей из консула управления 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();

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

Если вы предпочитаете код на Python, вы можете использовать Boto.

PS после осмотра BucketExplorer я делаю то, что вы хотите. https://forums.aws.amazon.com/thread.jspa?messageID=248429

Ответ 10

Используйте эту команду с CLI AWS:

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

Ответ 11

Ответ от @Layke хорош, но если у вас есть тонна данных и вы не хотите ждать вечно, вам следует обратить пристальное внимание на эту документацию о том, как получить команду синхронизации CLI AWS S3 для синхронизации сегментов с массовой распараллеливанием. Следующие команды сообщат CLI AWS использовать 1000 потоков для выполнения заданий (каждый небольшой файл или одна часть многокомпонентной копии) и просмотреть 100 000 заданий:

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

После их запуска вы можете использовать простую команду синхронизации следующим образом:

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 раз больше, чем в конфигурации по умолчанию.

Ответ 12

Если вы используете Firefox с S3Fox, это позволяет вам выбирать все файлы (shift-select first и last) и rightclick и загружать все... Я сделал это с 500 + файлами без проблем

Ответ 14

Вы можете сделать это с помощью 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.

Ответ 15

Если у вас есть только файлы (нет подкаталогов), быстрое решение - выбрать все файлы (click для первого, Shift+click последним) и нажать Enter или right click и выбрать Open. Для большинства файлов данных это загрузит их прямо на ваш компьютер.

Ответ 16

AWS SDK API будет только лучшим вариантом для загрузки всей папки и репозитория на s3 и загрузки всей корзины s3 локально.

Для загрузки всей папки в s3

aws s3 sync . s3://BucketName

для загрузки всего ведра s3 локально

aws s3 sync s3://BucketName . 

Вы также можете назначить путь Как и BucketName/Path для конкретной папки в s3 для загрузки

Ответ 17

Чтобы добавить еще один вариант графического интерфейса, мы используем функциональность WinSCP S3. Это очень легко подключить, требуя только ваш ключ доступа и секретный ключ в пользовательском интерфейсе. Затем вы можете просматривать и загружать любые файлы, которые вам нужны, из любых доступных групп, включая рекурсивные загрузки вложенных папок.

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

Ответ 18

  • Пользователю Windows необходимо загрузить S3EXPLORER по этой ссылке, которая также содержит инструкции по установке: - http://s3browser.com/download.aspx

  • Затем предоставите вам учетные данные AWS, такие как secretkey, accesskey и region, в s3explorer, эта ссылка содержит инструкцию по конфигурации для s3explorer: Копировать вставить ссылку в brower: s3browser.com/s3browser-first-run.aspx

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

  • Просто выберите ведро и нажмите "Меню ведер" в верхнем левом углу, затем выберите "Загрузить все файлы в опцию" в меню. Ниже приведен снимок экрана для этого:

Экран выбора ведра

  1. Затем просмотрите папку для загрузки ведра в определенном месте

  2. Нажмите "ОК", и начнется загрузка.

Ответ 19

aws sync - идеальное решение. Это не делает два пути. Это один путь от источника к месту назначения. Кроме того, если у вас много элементов в ковше, будет полезно сначала создать конечную точку s3, чтобы загрузка выполнялась быстрее (потому что загрузка не происходит через Интернет, а через интрасеть) и никаких сборов

Ответ 20

Вот некоторые вещи, чтобы загрузить все ведра, перечислить их, перечислить их содержимое.

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

}

Ответ 21

Вы можете просто получить его с помощью команды s3cmd:

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

Ответ 22

Как объяснил Нил Баат в этом блоге, для этой цели можно использовать много разных инструментов. Некоторые из них предоставляются AWS, а большинство - сторонними инструментами. Все эти инструменты требуют сохранения ключа учетной записи AWS и секрета в самом инструменте. Будьте очень осторожны при использовании сторонних инструментов, поскольку учетные данные, которые вы сохраняете, могут стоить вам, всей вашей ценности и привести к смерти.

Поэтому я всегда рекомендую использовать для этой цели интерфейс командной строки AWS. Вы можете просто установить это по этой ссылке. Затем выполните следующую команду и сохраните ключ, секретные значения в CLI AWS.

aws configure

И используйте следующую команду для синхронизации вашего AWS S3 Bucket с вашим локальным компьютером. (На локальном компьютере должен быть установлен 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> 

Ответ 23

Если вы хотите только загрузить пакет с AWS, сначала установите CLI AWS на своем компьютере. В терминале измените каталог, куда вы хотите скачать файлы и выполните эту команду.

aws s3 sync s3://bucket-name .

Если вы также хотите синхронизировать как локальный каталог, так и каталог s3 (если вы добавили некоторые файлы в локальную папку), выполните следующую команду:

aws s3 sync . s3://bucket-name

Ответ 25

Как сказал @layke, лучше всего скачать файл с S3 cli, это безопасно и надежно. Но в некоторых случаях люди должны использовать wget для загрузки файла, и вот решение

aws s3 presign s3://<your_bucket_name/>

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

Ответ 26

Мой комментарий не добавляет новое решение. Как говорили многие здесь, aws s3 sync - лучшая. Но никто не указал на мощный вариант: dryrun. Эта опция позволяет вам увидеть, что будет загружено/загружено с/на s3, когда вы используете sync. Это действительно полезно, когда вы не хотите перезаписывать контент ни в вашем локальном хранилище, ни в сегменте s3. Вот как это используется:

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

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

Ответ 27

Попробуйте эту команду:

aws s3 sync yourBucketnameDirectory yourLocalDirectory

Например, если ваше имя myBucket - myBucket а локальный каталог - c:\local, то:

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

Для получения дополнительной информации о awscli проверьте эту установку aws cli

Ответ 28

AWS CLI - лучший вариант для загрузки всей корзины S3 локально.

  1. Установите AWS CLI.

  2. Настройте интерфейс командной строки AWS для использования учетных данных безопасности по умолчанию и региона AWS по умолчанию.

  3. Чтобы загрузить всю корзину S3, используйте команду

    aws s3 sync s3://yourbucketname localpath

Ссылка на использование AWS cli для различных сервисов AWS: https://docs.aws.amazon.com/cli/latest/reference/

Ответ 29

Вы можете использовать эту команду 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 использует SSL при взаимодействии со службами AWS. Для каждого SSL-соединения AWS CLI будет проверять SSL-сертификаты. Этот параметр переопределяет поведение по умолчанию при проверке сертификатов SSL. ссылка

Используйте этот тег с командой --no-verify-ssl

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

Ответ 30

Если s4cmd достаточно большая, есть команда s4cmd которая выполняет параллельные соединения и s4cmd время загрузки:

Чтобы установить его на Debian, как

apt install s4cmd

Если у вас есть пункт:

pip install s4cmd

Он прочитает файл ~/.s3cfg если он есть (если не установить s3cmd и не запустить s3cmd --configure), или вы можете указать --access-key=ACCESS_KEY --secret-key=SECRET_KEY в команде.

s3cmd похож на s3cmd. В вашем случае рекомендуется sync как вы можете отменить загрузку и начать ее заново без необходимости повторной загрузки файлов.

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

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