У меня есть zip-архив, загруженный в S3 в определенное место (например, /foo/bar.zip). Я хотел бы извлечь значения из bar.zip и поместить его в /foo без загрузки или повторной загрузки извлеченных файлов. Как я могу это сделать, чтобы S3 обрабатывался почти как файловая система
Как извлечь файлы из zip-архива в S3
Ответы:
S3 на самом деле не предназначен для этого; обычно вам нужно скачать файл, обработать его и загрузить извлеченные файлы.
Однако может быть несколько вариантов:
Вы можете смонтировать корзину S3 как локальную файловую систему, используя
s3fs
иFUSE
(см. статью и сайт github). Это по-прежнему требует загрузки и выгрузки файлов, но скрывает эти операции за интерфейсом файловой системы.Если ваша главная задача — избежать загрузки данных из AWS на локальный компьютер, то, конечно, вы можете загрузить данные на удаленный экземпляр EC2 и выполнять работу там, с
s3fs
или без него. Это позволяет хранить данные в центрах обработки данных Amazon.Вы можете выполнять удаленные операции с файлами, не загружая их на локальный компьютер, с помощью AWS Lambda а>.
Вам нужно будет создать, упаковать и загрузить небольшую программу, написанную на node.js
, для доступа, распаковки и загрузки файлов. Эта обработка будет происходить в инфраструктуре AWS за кулисами, поэтому вам не нужно будет загружать какие-либо файлы на свой компьютер. См. Часто задаваемые вопросы.
Наконец, вам нужно найти способ активировать этот код — обычно в Lambda это будет запускаться автоматически при загрузке zip-файла на S3. Если файл уже существует, вам может потребоваться активировать его вручную с помощью команды invoke-async
, предоставляемой API AWS. См. AWS Lambda пошаговые руководства и документация по API а>.
Тем не менее, это довольно сложный способ избежать загрузок, и, вероятно, он того стоит, только если вам нужно обработать большое количество zip-файлов! Также обратите внимание, что (по состоянию на октябрь 2018 г.) функции Lambda ограничены 15 минутами максимальная продолжительность (время ожидания по умолчанию составляет 3 секунды), поэтому может не хватить времени, если ваши файлы очень большие, но, поскольку рабочее пространство в /tmp
ограничено 500 МБ, ваш размер файла также ограничен.