Как распаковать zip-файл в s3 - PullRequest
       95

Как распаковать zip-файл в s3

0 голосов
/ 19 сентября 2019

Я хочу написать проверочный код для файлов, присутствующих в папке zip в s3.У меня проблемы с распаковкой.Я попытался загрузить его, а затем распаковать и загрузить, но этот процесс занимает много времени.Есть ли способ, которым это можно сделать без загрузки и выгрузки.

Ответы [ 2 ]

3 голосов
/ 19 сентября 2019

S3 не предназначен для этого;обычно вам необходимо загрузить файл, обработать его и загрузить извлеченные файлы.

Однако возможны несколько вариантов:

  • Вы можете смонтировать S3 bucket как локальную файловую систему, используя s3fs и FUSE (см. Статью GitHub ).Это по-прежнему требует загрузки и выгрузки файлов, но скрывает эти операции за интерфейсом файловой системы.

  • Если ваша главная задача - не загружать данные из AWS на локальный компьютертогда, конечно, вы можете загрузить данные в удаленный экземпляр EC2 и выполнить работу там, с или без s3fs.Это позволяет хранить данные в центрах обработки данных Amazon.

  • Вы можете выполнять удаленные операции с файлами, не загружая их на локальный компьютер, используя функцию AWS Lambda.

Установка

Многие системы предоставляют готовые пакеты:

  • Amazon Linux через EPEL:
    sudo amazon-linux-extras install epel
    sudo yum install s3fs-fuse
  • Debian 9 и Ubuntu 16.04 или новее:
    sudo apt-get install s3fs

  • Fedora 27 или новее:
    sudo yum install s3fs-fuse

  • RHEL и CentOS 7 илиновее через EPEL:
    sudo yum install epel-release
    sudo yum install s3fs-fuse
  • SUSE 12 и openSUSE 42.1 или новее:
    sudo zypper install s3fs
  • macOS через Homebrew:
    brew cask install osxfuse
    brew install s3fs

s3fs поддерживает стандартный файл учетных данных AWS, хранящийся в $ {HOME} /. Aws / credentials.В качестве альтернативы s3fs поддерживает пользовательский файл passwd.

Можно создать местоположение по умолчанию для файла паролей s3fs:

using a .passwd-s3fs file in the users home directory (i.e. ${HOME}/.passwd-s3fs)
using the system-wide /etc/passwd-s3fs file

Введите свои учетные данные в файле vim $ {HOME}/.passwd-s3fs и установить разрешения только для владельца:

echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs
chmod 600 ${HOME}/.passwd-s3fs

Запустить s3fs с существующим bucket mybucket и каталогом / path / to / mountpoint:

s3fs mybucket /path/to/mountpoint -o passwd_file=${HOME}/.passwd-s3fs

Ifпри возникновении любых ошибок включите вывод отладки:

s3fs mybucket /path/to/mountpoint -o passwd_file=${HOME}/.passwd-s3fs -o dbglevel=info -f -o curldbg

Вы также можете подключиться при загрузке, введя следующую строку в / etc / fstab:

s3fs#mybucket /path/to/mountpoint fuse _netdev,allow_other 0 0

, после чего вы можете запустить zipи распаковать команды

0 голосов
/ 19 сентября 2019

Несколько вещей, которые следует учитывать при скорости s3.

Проблема 1. Насколько велики у вас zip-файлы?Проблема 2. Куда работает ваш код проверки?Если вы используете его вне AWS, то у вас могут возникнуть проблемы, связанные с сетью.

Не так уж много общего с проблемой 1, большие файлы - это большие файлы.Однако, с выпуском 2, чем ближе вы запускаете код проверки к S3, тем лучше.Для этого у вас есть два варианта.

Вариант 1: использовать экземпляр EC2.Если вы имеете дело с действительно большими zip-файлами, то некоторые типы экземпляров обеспечивают лучшую производительность сети, чем другие.Но я бы начал с t3 и посмотрю, как это работает для вас.

Вариант 2: использовать лямбду.Преимущество использования лямбды заключается в том, что вы можете создать S3 Event Trigger, который будет вызывать лямбду при загрузке каждого zip-файла.

Кроме того, вы можете выполнить оптимизацию, если вы просто загружаете zip-файл после проверки без измененияКонтент должен использовать команду s3 mv.

...